這裏是我如何使用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,它與我們的目的相似。
查看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文檔,其中找到的節點可以存儲/記憶。
小心使用拖尾'救援零'。它涵蓋了該行發生的所有異常,包括Nokogiri和OpenURI內發生的任何異常。如果觸發,「@ doc」將爲零,導致「@ doc.css」以意想不到的方式失敗。而且,在這樣的例子中'@ doc'不是必需的,因爲不需要實例變量。 –