以下是我正在扫描的HTML示例。
<div class="text">
<h3>
<a href="http://www.faith.co.uk/">
Rodeo Sinclair
</a>
</h3>
.
.
.
h3>
<a href="http://www.hate.co.uk/">
Morvern
</a>
</h3>
这是我的代码。
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open(url))
output = doc.css('div h3 a').attr("href")
问题是,它只输出第一个网址。我如何获得两者?
答案 0 :(得分:2)
doc = Nokogiri::HTML(open(url))
output = doc.css('div h3 a').map{|x| x['href']}
您可以使用map
之类的内容来捕获所有节点。
答案 1 :(得分:0)
doc = Nokogiri::HTML(open(url))
output = doc.css('div h3 a')
output.class
#=&gt; Nokogir :: XML ::节点集
Nokogir :: XML :: NodeSet是一个“类似于”类,所以(简单来说)你可以期待Nokogir :: XML :: NodeSet对象在标准迭代方法或[]被调用时表现得像Arrays 。
在您的示例中,输出包含所有出现的:
a 标记位于 h3 标记内,而 div 标记位于 div 标记内。(2次点击)
所以你可以:
output[0].attr('href')
#=&gt; “http://www.faith.co.uk/”
output[1].attr('href')
#=&gt; “http://www.hate.co.uk/”
output.each do |node|
puts "Link says: " + node.content
end
Link说:Rodeo Sinclair
Link说:Morvern
output.map do |node|
node.attr('href')
end
#=&gt; ['http://www.faith.co.uk/','http://www.hate.co.uk/']
等等...
去查看nokogiri.org以获取更多示例和深入解释。