我正在尝试发现从Nokogiri节点检索href链接的最佳方法。这就是我所在的地方
mech = Mechanize.new
mech.get(HOME_URL)
mech.page.search('.listing_content').each do |business|
website = business.css('.website-feature')
puts website.class
puts website.inner_html
end
输出 =>
Nokogiri::XML::NodeSet» website
基本上,我只需要把http://urlofsite.com
从inner_html
中取出,我不确定该怎么做。我已经读过关于使用 CSS 和 XPATH 来做这件事的文章,但我现在都无法工作。感谢您的任何帮助
首先,告诉 Nokogiri 获取一个节点,而不是 NodeSet。 at_css
将检索节点,css
检索一个节点集,它类似于数组。
而不是:
website = business.css('.website-feature')
尝试:
website = at_css('a.track-visit-website no-tracks')
使用 class="website-feature"
检索<a>
节点的第一个实例。如果它不是您想要的第一个实例,则需要通过获取 NodeSet 然后索引到它来缩小它的范围。没有周围的 HTML,很难提供更多帮助。
要从节点获取href
参数,只需将节点视为哈希:
website['href']
应返回:
http://urlofsite.com
以下是IRB的一个小例子:
irb(main):001:0> require 'nokogiri'
=> true
irb(main):002:0>
irb(main):003:0* html = '<a class="this_node" href="http://example.com">'
=> "<a class="this_node" href="http://example.com">"
irb(main):004:0> doc = Nokogiri::HTML.parse(html)
=> #<Nokogiri::HTML::Document:0x8041e2ec name="document" children=[#<Nokogiri::XML::DTD:0x8041d20c name="html">, #<Nokogiri::XML::Element:0x805a2a14 name="html" children=[#<Nokogiri::XML::Element:0x805df8b0 name="body" children=[#<Nokogiri::XML::Element:0x8084c5d0 name="a" attributes=[#<Nokogiri::XML::Attr:0x80860170 name="class" value="this_node">, #<Nokogiri::XML::Attr:0x8086047c name="href" value="http://example.com">]>]>]>]>
irb(main):005:0>
irb(main):006:0* doc.at_css('a.this_node')['href']
=> "http://example.com"
irb(main):007:0>