我想抓取这个网站的数据(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不起作用。数据仅包含在一个div中。这是一个条目
<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>
我该怎么办?
答案 0 :(得分:3)
最简单的方法(可能不是最好的方法)是使用selenium / watir。在红宝石中,我会这样做:
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
答案 1 :(得分:2)
如果他们使用Javascript从服务获取数据并在DIV中呈现它,W3M将不会显示使用该数据更新的div,因为它不支持Javascript。
您有两种选择:
对其Javascript进行反向工程以找出数据的来源,并查看是否可以直接查询该数据源以获取他们用于更新DIV的XML或JSON。然后你可以完全跳过刮擦。但是,他们可能不希望您这样做,并且可能已经保护数据源以防止它。或者他们可能没有。
在开始抓取之前使用执行Javascript的浏览器。这样你就可以使用数据填充div。 W3M-js 可能为您执行此操作,或者您可能想尝试其他内容(lynx或links)。 This question似乎是相关的。
ETA:也许PhantomJS会对此有所帮助吗?