这是我使用 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 文档,可以在其中存储/记住找到的节点。