2

のこぎりノードから 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

出力 =>

のこぎり::XML::NodeSet
64c15af0-a558-012f-a041-00215a4685f6","nav":null});' rel="nofollow" target="_blank" title="エグゼクティブ サービス センターのウェブサイト"><span class="raquo">»</span> ウェブサイト</a>

基本的に、 から を取得する必要があるだけhttp://urlofsite.comで、inner_htmlその方法がわかりません。CSSとXPATHでそれを行うことについて読んだことがありますが、現時点ではどちらも機能しません。助けてくれてありがとう

4

1 に答える 1

3

まず、NodeSetではなくノードを取得するようにNokogiriに指示します。at_cssNodeをcss取得し、配列のようなNodeSetを取得します。

それ以外の:

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 に答える