Ruby Nokogiri在标记结束后提取文本
我这里有一个相当基本的问题,这意味着我可能遗漏了一些我用Nokogiri来刮网站的东西 我想提取div中强标记结尾后的文本,如下所示:Ruby Nokogiri在标记结束后提取文本,ruby,nokogiri,Ruby,Nokogiri,我这里有一个相当基本的问题,这意味着我可能遗漏了一些我用Nokogiri来刮网站的东西 我想提取div中强标记结尾后的文本,如下所示: <p style="padding-bottom:0px;"><strong>Location:</strong> Cape Town</p> 这显然给出了位置:位,有没有一种方法可以在不使用正则表达式的情况下实现这一点 问这个问题的原因是,在相同的格式中还有其他div包含我需要的信息,所以我不能只删除强元素 提
<p style="padding-bottom:0px;"><strong>Location:</strong> Cape Town</p>
这显然给出了位置:
位,有没有一种方法可以在不使用正则表达式的情况下实现这一点
问这个问题的原因是,在相同的格式中还有其他div包含我需要的信息,所以我不能只删除强元素
提前谢谢
Marc您可以使用XPath:
detail_page.xpath('//p[@style="padding-bottom:0px;"]/strong/following-sibling::text()')
这将选择任何文本节点,这些节点跟随
strong
元素的同级,这些元素依次是p
元素的子元素,这些元素具有style
属性,其值为padding bottom:0px代码>在这里,我将按照以下步骤操作:
require 'nokogiri'
@doc = Nokogiri::HTML.parse('<p style="padding-bottom:0px;"><strong>Location:</strong> Cape Town</p>')
@doc.at_css('p[style*="padding-bottom:0px;"] > text()').text.strip
# => Cape Town
需要“nokogiri”
@doc=Nokogiri::HTML.parse(“位置:开普敦
”)
@doc.at_css('p[style*=“padding-bottom:0px;”]>text()).text.strip
#=>开普敦
谢谢,我可以指定strong元素中的内容吗?@MrkFldig是的,类似于strong[.=“Location:”]
,但是如果p
元素中有多个元素–文本对,则需要仅指定
之后的第一个文本节点,使用后面的同级::text()[1]
(注意结尾的[1]
)。你是我的朋友,是个天才!谢谢。
require 'nokogiri'
@doc = Nokogiri::HTML.parse('<p style="padding-bottom:0px;"><strong>Location:</strong> Cape Town</p>')
@doc.at_css('p[style*="padding-bottom:0px;"] > text()').text.strip
# => Cape Town