gpt4 book ai didi

ruby - 在 Rails + Nokogiri 中检索
之间的文本

转载 作者:太空宇宙 更新时间:2023-11-03 17:36:46 24 4
gpt4 key购买 nike

对于以下部分 HTML,我正在尝试检索文本“Conducts research ... find cures!”两个之间<br>通过 Nokogiri 标记。

<b>Multiple Sclerosis National Research Institute</b><br>
<!-- <b>CFC Code: 12135</b><br /> ***** This is edited by Anas -->
<a href="http://www.ms-research.org" target="_blank">http://www.ms-research.org</a><br>
(866)-676-7400<br>
Conducts research towards understanding, treating and halting the progression of multiple sclerosis and related diseases. Current research progress is promising. Please help us find cures!<br>
<a href="/ntn/charities/view.aspx?record_id=510">Click here for more info</a><br><br>

到目前为止,我已经能够检索到 nameurl使用此代码:

url = "https://www.neighbortonation.org/ntn/charities/home.aspx"    
doc = Nokogiri::HTML(open(url))

doc.css("#site-pagecontent table table td").each do |item|
name = item.at_css("b").text unless item.at_css("b").blank?
url = item.at_css("a")[:href] unless item.at_css("a").blank?
end

但我在尝试检索特定 <br> 之间的文本时遇到了困难标签。我通过 Extracting between <br> tags with Nokogiri? 尝试了这些建议但这似乎没有用。有任何想法吗?我应该使用 xpath、搜索还是正则表达式?

最佳答案

在谈论 XML 中的“元素之间的文本”时,记住 XML 中的文本保存在 Text node 中会有所帮助。 .在 Nokogiri,这是一个 Nokogiri::XML::Text 实例。

例如,这个 HTML:

<p>Hello <b>World</b>!</p>

最简单地表示为:

(Element name:"p" children:[
(Text content:"Hello ")
(Element name:"b" children:[
(Text content:"World")
])
(Text content:"!")
])

<p>元素具有三个子节点。通常我们不需要记住这一点,因为我们经常想知道文本是 child 还是后代,找到一个元素然后使用 .text 给我们一个字符串的方法。

在您的情况下,您想找到最可靠的方法来定位附近的元素。让我们假设 <a href="...">Click here for more info</a>将始终存在,并且您想要的文本紧接在其之前。

# Find an <a> element with specific text content
info = doc.at_xpath('//a[.="Click here for more info"]')

# Walk back to the previous element, which we assume is an always-present <br>
br = info.previous_element

# Find the Text node immediately preceding that, and then get its contents
desc = br.previous.text

我们可以使用 XPath 更高效、更简洁地完成此操作,但 Ruby 程序员更难理解:

p doc.at('//a[.="Click here for more info"]/preceding-sibling::text()[1]').text
#=> " \nConducts research towards understanding, treating and halting the ...

上面找到 anchor ,然后使用 XPath 找到所有前面的文本节点,然后只选择第一个文本节点。

关于ruby - 在 Rails + Nokogiri 中检索 <br> 之间的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14208271/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com