废弃简单的javascript页面



我想抓取这个网站的数据(http://www.oddsportal.com/matches/soccer)以便以这种方式获得包含匹配信息和赔率信息的纯文本文件:

00:30   Criciuma - Atletico-PR                    1:2   2.70    3.24    2.41    
10:45   Vier-und Marschlande - Concordia Hamburg  0:0   4.00    3.53    1.68    
10:45   Germania Schnelsen - ASV Bergedorf 85     2:3   1.95    3.37    3.23    
10:45   Barmbecker SG - Altona                    0:2   3.67    3.37    1.82

我以前用w3m做这件事,但现在看来他们把html改成了javascript,w3m不起作用了。数据只包含在一个分区中。这是一个条目

<tr xeid="862487"><td class="table-time datet t1333724400-1-1-0-0 ">17:00</td><td class="name table-participant" colspan="2"><a href="/soccer/italy/serie-b-2011-2012/brescia-marmi-lanza-verona-862487/">Brescia - Verona</a></td><td class="odds-nowrp" xoid="40456791" xodd="xzc0fxzxa">-</td><td class="odds-nowrp" xoid="40456793" xodd="cz0ofxz9c">-</td><td class="odds-nowrp" xoid="40456792" xodd="cz9xfcztx">-</td><td class="center info-value">17</td></tr>

我能做什么?

最简单的方法(可能不是最好的)是使用硒/wtir。用红宝石我会做:

require 'watir-webdriver'
require 'csv'
@browser = Watir::Browser.new
@browser.goto 'http://www.oddsportal.com/matches/soccer/'
CSV.open('out.csv', 'w') do |out|
    @browser.trs(:class => /deactivate/).each do |tr|
        out << tr.tds.map(&:text)
    end
end

如果他们使用Javascript从服务中获取数据并在div中呈现,W3M将不会显示用该数据更新的div,因为它不支持Javascript。

你有两个选择:

  • 对他们的Javascript进行逆向工程,找出数据的来源,看看你是否可以直接查询该数据源,以获得他们用来更新DIV的XML或JSON。然后你可以完全跳过抓取。然而,他们可能不希望你这样做,可能已经保护了数据源以防止它发生。或者他们可能没有。

  • 在开始抓取之前,请使用一个执行Javascript的浏览器。通过这种方式,您将使用数据填充div。W3M js可能会为您做这件事,或者您可能想尝试其他东西(lynx或链接)。这个问题似乎有关联。

埃塔:也许PhantomJS会在这里帮忙?

相关内容

  • 没有找到相关文章

最新更新