2

我正在尝试发现从 Nokogiri 节点检索 a 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
64c15af0-a558-012f-a041-00215a4685f6","nav":null});' rel="nofollow" target="_blank" title="Executive Service Ctr Website"><span class="raquo">»</span> 网站</a>

基本上,我只需要http://urlofsite.com退出 ,inner_html我不知道该怎么做。我已经阅读了关于使用 CSS 和 XPATH 进行此操作的信息,但此时我都无法工作。谢谢你的帮助

4

1 回答 1

3

首先,告诉 Nokogiri 获取一个节点,而不是一个 NodeSet。at_css将检索 Node 并css检索一个 NodeSet,它就像一个 Array。

代替:

website = business.css('.website-feature')

尝试:

website = at_css('a.track-visit-website no-tracks')

<a>用 检索节点的第一个实例class="website-feature"。如果它不是您想要的第一个实例,那么您需要通过抓取 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> 
于 2012-07-01T03:31:48.253 回答