屏幕抓Rails?

时间:2013-10-16 12:45:12

标签: ruby-on-rails ruby web-scraping nokogiri

我正在尝试使用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获取表格  只想要西会议桌,但似乎无法得到它。

3 个答案:

答案 0 :(得分:1)

由于东西方会议团队在一个表格中,您可以做的最好的事情是获得所有西方会议团队<tr>标签。

doc.xpath("//table/tr[td//text()[contains(., 'Western Conference')]]/following-sibling::tr")

答案 1 :(得分: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的文本,然后保存或打印该数据/

答案 2 :(得分: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文档,其中找到的节点可以存储/记住。