0

この Web サイト ( 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 が機能しません。データは 1 つの div にのみ含まれます。これは1つのエントリです

<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>

私に何ができる?

4

2 に答える 2

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
于 2012-04-06T19:11:56.720 に答える
2

彼らがJavascriptを使用してサービスからデータを取得し、それをDIV内でレンダリングしている場合、W3MはJavascriptをサポートしていないため、そのデータで更新されたdivを表示しません。

2つの選択肢があります。

  • Javascriptをリバースエンジニアリングして、データの出所を確認し、そのデータソースを直接クエリして、DIVの更新に使用しているXMLまたはJSONを取得できるかどうかを確認します。その後、スクレイピングを完全にスキップできます。しかし、彼らはあなたにそうすることを望まないかもしれません、そしてそれを防ぐためにデータソースを保護したかもしれません。または彼らは持っていないかもしれません。

  • スクレイピングを開始する前に、Javascriptを実行するブラウザを使用してください。このようにして、divにデータを入力します。W3M-js これを行う場合もあれば、他の何か(lynxまたはlinks)を試してみたい場合もあります。この質問は関連しているようです。

ETA:たぶんPhantomJSがここで役立つでしょうか?

于 2012-04-06T14:13:19.847 に答える