1

ページをクロールし、ページの要素を配列に格納しました。

最初の要素を調べると:

puts "The inspection of the first my_listing: "
puts my_listing.first.first.inspect

出力は次のとおりです。

The inspection of the first my_listing: 
#<Nokogiri::XML::Element:0x80c58764 name="p" children=[#<Nokogiri::XML::Text:0x80c584e4 " May  4 - ">, #<Nokogiri::XML::Element:0x80c58494 name="a" attributes=[#<Nokogiri::XML::Attr:0x80c58340 name="href" value="http://auburn.craigslist.org/web/2996976345.html">] children=[#<Nokogiri::XML::Text:0x80c57f08 "residual income No experience is needed!!!">]>, #<Nokogiri::XML::Text:0x80c57da0 " - ">, #<Nokogiri::XML::Element:0x80c57d50 name="font" attributes=[#<Nokogiri::XML::Attr:0x80c57bfc name="size" value="-1">] children=[#<Nokogiri::XML::Text:0x80c577c4 " (online)">]>, #<Nokogiri::XML::Text:0x80c5765c " ">, #<Nokogiri::XML::Element:0x80c5760c name="span" attributes=[#<Nokogiri::XML::Attr:0x80c574b8 name="class" value="p">] children=[#<Nokogiri::XML::Text:0x80c57080 " img">]>]>

各要素にアクセスするにはどうすればよいですか? たとえばText、このオブジェクトの最初の要素である 'May 4 -' にアクセスするにはどうすればよいでしょうか?

私が行った場合:

puts my_listing.first.first.text, 

私はこの出力を得る:

May  4 - residual income No experience is needed!!! -  (online)  img

hrefまた、属性にアクセスするにはどうすればよいですか?

my_listing.first.first[:href]

これは機能しません。

4

2 に答える 2

2

Nokogiri は、テキスト、属性、要素など、すべてをノードとして扱うことに注意してください。ドキュメントには子が 1 つあります:

irb(main):014:0> my_listing.children.size
=> 1
irb(main):015:0> puts my_listing.children
<p> May 4 - <a href="http://auburn.craigslist.org/web/2996976345.html">residual income No
experience is needed</a> - <font size="-1"> (online)</font> <span class="p">
img</span></p>
=> nil

ところで、puts は to_s メソッドを使用し、そのメソッドはすべての子からテキストを組み立てます。これが、必要以上のテキストが表示される理由です。

その単一要素の子をさらに深く見ると、次のようになります。

irb(main):017:0> my_listing.children.first.children.size
=> 6
irb(main):018:0> puts my_listing.children.first.children
 May 4 - 
<a href="http://auburn.craigslist.org/web/2996976345.html">residual income No
experience is needed</a>
 - 
<font size="-1"> (online)</font>

<span class="p"> img</span>
=> nil

あなたが求めているものを得るために、階層を下っていきます:

irb(main):022:0> my_listing.children.first.children[0]
=> #<Nokogiri::XML::Text:0x..fd9d1210e " May 4 - ">
irb(main):023:0> my_listing.children.first.children[0].text
=> " May 4 - "
irb(main):024:0> my_listing.children.first.children[1]['href']
=> "http://auburn.craigslist.org/web/2996976345.html"
于 2012-05-10T23:24:22.220 に答える
0

あなたがするように、私がウェブページをプルダウンして要素を持っている場合:

p c
> => #<Nokogiri::XML::Element:0x3ff9d9c6b660 name="a" ...

あなたは子供を得ることができます:

c2 = c.children

次に、テキストを取得します。

c2.text # or
c2[0].text  =>   => "Watch video! "

hrefは次のように取得できます。

c["href"] # -> "http://example.com/video/"
于 2012-05-10T15:07:24.973 に答える