CSSアクセサーを使用してそれを行う方法は次のとおりです。
require 'nokogiri'
require 'open-uri'
url = "http://www.nba.com/standings/team_record_comparison/conferenceNew_Std_Cnf.html"
doc = Nokogiri::HTML(open(url))
table = doc.at('.genStatTable')
table
現在、テーブルの上部を指しています。
rows = Nokogiri::XML::NodeSet.new(Nokogiri::HTML::Document.new)
rows
は NodeSet であり、目的の配列に似ています。
である 2 番目/最後のセルのテーブルを調べ、その親を取得しclass
ます。このレベルでノードが見つかるまでループします。confTitle
<tr>
tr = table.css('.confTitle').last.parent
while tr do
rows << tr
tr = tr.next
end
puts rows.to_html
<tr>
これは、次で始まるすべてのノードのリストを返します。
<tr>
<td colspan="11" class="confTitle">Western Conference</td>
</tr>
そして次で終わる:
<tr class="odd">
<td class="team"><a href="/jazz">Utah</a></td>
<td>1</td>
<td>3</td>
<td>0.250</td>
<td>3.5</td>
<td>1-3</td>
<td>0-2</td>
<td>1-2</td>
<td>0-1</td>
<td>1-3</td>
<td>L 3</td>
</tr>
テーブル内に埋め込むには、もう少し便利かもしれません:
require 'nokogiri'
require 'open-uri'
url = "http://www.nba.com/standings/team_record_comparison/conferenceNew_Std_Cnf.html"
doc = Nokogiri::HTML(open(url))
doc2 = Nokogiri::HTML('<html><body><table></table></body></html>')
doc2_table = doc2.at('table')
tr = doc.css('.genStatTable .confTitle').last.parent
while tr do
doc2_table.add_child(tr.to_html)
tr = tr.next
end
puts doc2.to_html
これdoc2
は、見つかったノードを保存/記憶できるスタブ HTML ドキュメントです。