ほとんどのコンテンツが ajax リクエストのように見えるものによって生成される動的 Web サイトをスクレイピングするための最良の方法は何ですか? Mechanize、BeautifulSoup、および python の組み合わせの経験はありますが、何か新しいことを考えています。
--編集-- 詳細について: CNNプライマリ データベースをスクレイピングしようとしています。そこには豊富な情報がありますが、API はないようです。
ほとんどのコンテンツが ajax リクエストのように見えるものによって生成される動的 Web サイトをスクレイピングするための最良の方法は何ですか? Mechanize、BeautifulSoup、および python の組み合わせの経験はありますが、何か新しいことを考えています。
--編集-- 詳細について: CNNプライマリ データベースをスクレイピングしようとしています。そこには豊富な情報がありますが、API はないようです。
サイトごとに JavaScript をリバース エンジニアリングするか、JavaScript エンジンを実装してスクリプトを実行する必要があるため、これは困難な問題です (これには独自の問題と落とし穴があります)。
これは重いソリューションですが、greasemonkey スクリプトを使用してこれを行っている人を見てきました。Firefox にすべてをレンダリングさせ、javascript を実行させてから、要素をスクレイピングします。必要に応じて、ページでユーザー アクションを開始することもできます。
-アダム
私が見つけた最善の解決策は、Firebug を使用して XmlHttpRequests を監視し、スクリプトを使用してそれらを再送信することでした。
テスト用のツールである Selenium IDE は、私が多くのスクリーンスクレイピングに使用してきたものです。うまく処理できないもの (Javascript window.alert() と一般的なポップアップ ウィンドウ) がいくつかありますが、実際にクリック イベントをトリガーしてテキスト ボックスに入力することで、ページ上で機能します。IDE 部分は Firefox で実行されるため、セッションの管理などはすべて Firefox が行うため、すべてを行う必要はありません。IDE はテストを記録して再生します。
また、C#、PHP、Java などのコードをエクスポートして、Selenium サーバーで実行されるコンパイル済みテスト/スクレイパーを構築します。私はいくつかの Selenium スクリプトでこれを実行しました。これにより、スクレイピングしたデータをデータベースに格納するなどの作業がはるかに簡単になります。
スクリプトは、("clickAndWait","submitButton") などで構成されているため、作成および変更が非常に簡単です。あなたが説明していることを考えると一見の価値があります。
Adam Davis のアドバイスは確かです。
さらに、JavaScript が行っていることを「リバース エンジニアリング」し、ページをスクレイピングする代わりに、JavaScript が発行している HTTP リクエストを発行し、結果を自分で解釈することをお勧めします (ほとんどの場合、JSON 形式で、素晴らしく、解析が簡単です)。この戦略は、JavaScript の複雑さに応じて、取るに足らないものから完全な悪夢までさまざまです。
もちろん、最善の方法は、Web サイトの管理者に、開発者にとって使いやすい API を実装するよう説得することです。クールな子供たちは最近それをやっています 8-) もちろん、彼らは自動化された方法でデータをスクレイピングすることを望んでいないかもしれません. :-(
少し習得に時間がかかりますが、Pamie (Python) や Watir (Ruby) などのツールを使用すると、IE Web ブラウザーに取り込んで要素を理解することができます。これは、ブラウザーをエミュレートする必要がなく、ブラウザーに html 要素を要求するだけなので、Mechanize やその他の HTTP レベルのツールよりも簡単であることがわかります。Javascript/Ajax 呼び出しをリバース エンジニアリングするよりもはるかに簡単です。必要に応じて、美しいスープなどのツールをパミーと組み合わせて使用することもできます。
おそらく最も簡単な方法は、C# (またはその他の言語) で IE Web ブラウザー コントロールを使用することです。箱から出してブラウザ内のすべてのものにアクセスできます + Cookie、SSL などを気にする必要はありません。
IE Webbrowser コントロールには、shvwdoc.dll API と mshtml の周りに階層化された高品質のソフトウェアがこれらすべての矛盾を処理し、フレームワークを提供することを正当化するあらゆる種類の癖と回避策があることがわかりました。
これはかなり一般的な問題のようです。プログラマティック ブラウザを誰も開発していないのはなぜでしょうか。URL を引数としてコマンド ラインから呼び出すことができる Firefox を想定しています。これにより、ページが読み込まれ、最初のページ読み込み JS イベントがすべて実行され、結果のファイルが保存されます。
つまり、Firefox や他のブラウザーは既にこれを行っているのに、どうして単純に UI を取り除けないのでしょうか?