4

フォーラムからデータを抽出しています。に基づく私のスクリプトは正常に動作しています。ここで、単一の投稿から日付と時刻 (2009 年 12 月 21 日 20:39) を抽出する必要があります。私はそれを働かせることができません。FireXPath を使用して xpath を特定しました。

サンプルコード:

 require 'rubygems'
 require 'mechanize'

   post_agent = WWW::Mechanize.new
    post_page = post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')
    puts  post_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div[2]/text()').to_s.strip
    puts  post_page.parser.at_xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div[2]/text()').to_s.strip
    puts post_page.parser.xpath('//[@id="post1960370"]/tbody/tr[1]/td/div[2]/text()')

私の試みはすべて空の文字列またはエラーで終了します。


Mechanize 内で Nokogiri を使用する方法に関するドキュメントが見つかりません。Mechanize のドキュメントには、ページの下部に次のように記載されています。

Mechanize を使用してスクレイピングする必要があるページに移動した後、Nokogiri メソッドを使用してスクレイピングします。

しかし、どのような方法ですか?サンプルと説明された構文でそれらについてどこで読むことができますか? Nokogiri のサイトでも何も見つかりませんでした。

4

2 に答える 2

28

ラデク。釣り方をお見せします。

電話をかけるとMechanize::Page::parser、のこぎりの書類が届きます。つまり、「xpath」と「at_xpath」の呼び出しは、のこぎりを呼び出しています。問題はxpathにあります。一般に、作業に取り掛かることができる最も一般的なxpathから始めて、それを絞り込みます。したがって、たとえば、これの代わりに:

puts  post_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div[2]/text()').to_s.strip

これから始めましょう:

puts post_page.parser.xpath('//table').to_html

これにより、任意のテーブルがどこにでも取得され、htmlとして出力されます。HTMLを調べて、どのテーブルが戻ってきたかを確認します。1つだけが必要な場合は、おそらくいくつかを取得するので、必要な1つのテーブルを選択する方法を説明する必要があります。たとえば、必要なテーブルにCSSクラス " userdata"があることに気付いた場合は、次のことを試してください。

puts post_page.parser.xpath("//table[@class='userdata']").to_html

配列が戻らないときはいつでも、xpathを間違えたので、続行する前に修正してください。必要なテーブルを取得したら、次の行を取得してみてください。

puts post_page.parser.xpath("//table[@class='userdata']//tr").to_html

それがうまくいったら、 ""を外すto_htmlと、それぞれがテーブル行であるNokogiriノードの配列ができます。

そして、それはあなたがそれをする方法です。

于 2010-01-22T03:29:20.310 に答える
6

これを Firebug からコピーしたと思います。firebug は余分な tbody を提供しますが、これは実際のコードには存在しない可能性があります...その tbody を削除して再試行することをお勧めします。それでもうまくいかない場合は、Wayne Conrad のプロセスに従うのが最善です。

于 2010-12-29T20:39:40.677 に答える