1

私は少し初心者で、テーブルからいくつかのデータをスクレイピングしようとしていますが、xpath を使用してうまくいきません。必要な最初のフィールドを取得できますが、その後... 何もありません。

各行のテーブル構造は次のとおりです。

<tr bgcolor="#FFF7E7">
<td valign="Top"><font color="#8C4510">
<span id="DataGrid1__ctl3_Label2">Index</span>
</font></td>
<td><font color="#8C4510"><a href="javascript:__doPostBack('DataGrid1$_ctl3$_ctl0','')"><font color="#8C4510">Title</font></a></font></td>
<td><font color="#8C4510"><a href="javascript:__doPostBack('DataGrid1$_ctl3$_ctl2','')"><font color="#8C4510">People</font></a></font></td>
<td valign="Top"><font color="#8C4510">Date</font></td><td><font color="#8C4510"><a href="javascript:__doPostBack('DataGrid1$_ctl3$_ctl4','')">
<font color="#8C4510">Text</font></a></font></td>
<td><font color="#8C4510"><a href="javascript:__doPostBack('DataGrid1$_ctl3$_ctl6','')"><font color="#8C4510">Outcome</font></a></font></td>
<td valign="Top">
<font color="#8C4510"><a href="javascript:__doPostBack('DataGrid1$_ctl3$_ctl8','')"><font color="#8C4510">Click link for more</font></a></font></td>
</tr>

リンクだけでなく、インデックス、タイトル、人、テキスト、結果フィールドを抽出しようとしています。なんとかインデックスを抽出していますが、残りを取得できないようです。

私のルビーコードでは、実際にテーブルを取得するための呼び出しが機能しているように見えますが、テーブルの各行のフィールドを抽出しているループは、インデックスを除いて機能していません。

どんな助けでも素晴らしいでしょう。

4

1 に答える 1

2

そこにある抜粋を使用して、次の XPath クエリを使用してテキストとリンクを抽出できます。

require 'rubygems'
require 'nokogiri'

f = File.open('test.html')
doc = Nokogiri::HTML(f)

doc.xpath("//tr//td//a").each do |node|
  puts "#{node.text().strip()}: #{node.attribute('href')}"
end
f.close

ただし、テーブルの他の行が表示されないため、これが残りの行に役立つかどうかはわかりません.

于 2012-06-07T16:13:33.443 に答える