Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Nokogiri在标记结束后提取文本_Ruby_Nokogiri - Fatal编程技术网

Ruby Nokogiri在标记结束后提取文本

Ruby Nokogiri在标记结束后提取文本,ruby,nokogiri,Ruby,Nokogiri,我这里有一个相当基本的问题,这意味着我可能遗漏了一些我用Nokogiri来刮网站的东西 我想提取div中强标记结尾后的文本,如下所示: <p style="padding-bottom:0px;"><strong>Location:</strong> Cape Town</p> 这显然给出了位置:位,有没有一种方法可以在不使用正则表达式的情况下实现这一点 问这个问题的原因是,在相同的格式中还有其他div包含我需要的信息,所以我不能只删除强元素 提

我这里有一个相当基本的问题,这意味着我可能遗漏了一些我用Nokogiri来刮网站的东西

我想提取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