0

我正在尝试使用 Nokogiri 复制 NBA 联赛表的内容,但遇到了一点麻烦:

require 'rubygems'
require 'nokogiri'
require 'open-uri'

url = "http://www.nba.com/standings/team_record_comparison/conferenceNew_Std_Cnf.html"
doc = Nokogiri::HTML(open(url))
doc.css(":contains('Western Conference')").count do |team|
  puts team .at_css("")
end

我想从http://www.nba.com/standings/team_record_comparison/conferenceNew_Std_Cnf.html获得这张桌子,只想要西部会议桌,但似乎无法获得。

4

3 回答 3

1

由于东部和西部会议团队在一张桌子上,因此您能做的最好的事情就是获得所有西部会议团队的<tr>标签。

doc.xpath("//table/tr[td//text()[contains(., 'Western Conference')]]/following-sibling::tr")
于 2013-10-16T13:06:59.820 回答
0
require 'rubygems'
require 'nokogiri'
require 'open-uri'

url = "http://www.nba.com/standings/team_record_comparison/conferenceNew_Std_Cnf.html"
@doc = Nokogiri::HTML(open(url)) rescue nil
@doc.css('.confTitle').each do |team|
  if team.text == "Western Conference"
    # do your stuff
  end
end

您可以检查 CSS 的文本,然后您将保存或打印该数据/

于 2013-10-16T13:28:34.053 回答
0

这是我使用 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,就我们的目的而言,它类似于一个数组。

查看表格中的第二个/最后一个单元格,classconfTitle获取其父级<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 文档,可以在其中存储/记住找到的节点。

于 2013-10-19T02:55:51.360 回答