0

我在 html 中有这个:

<meta name='DC.creator' scheme='inventor' content='Chen Yonghong' />
<meta name='DC.creator' scheme='inventor' content='Chen Yuan' />

如果我想获得第一个创作者,我可以这样做:

:author =>  page.at('meta[@name="DC.creator"]')[:content]

问题是,如何使用机械化选择器获得第二个?

4

1 回答 1

2

您可以使用:

page.search('meta[@name="DC.creator"]')[1][:content]

at等价于search(...).first使用相同的选择器进行搜索并抓取找到的第二个元素,只要确实有两个匹配的标签就可以工作。如果没有,你会得到一个异常,因为你不能获取一个 nil 值的索引。

而且,作为一个仅供参考,Mechanize 在内部使用Nokogiri来处理其 HTML 解析和操作。Nokogiri 支持 CSS 和 XPath 选择器,因此您可以使用任何一种更容易找到您想要的标签或元素的选择器。我倾向于 CSS 以提高可读性,但两者都使用。有关搜索的更多信息,请参阅 Nokogiri 教程。

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<meta name='DC.creator' scheme='inventor' content='Chen Yonghong' />
<meta name='DC.creator' scheme='inventor' content='Chen Yuan' />
EOT

doc.search('meta[@name="DC.creator"]')[1][:content]
=> "Chen Yuan"
于 2013-06-19T06:40:39.350 回答