2009-08-03 12 views
3

私は最近、顧客が保険ビジネスのウェブサイトを構築するように依頼されました。その一環として、プロバイダのプロバイダのために見積もりサイトのスクリーンスクレイピングをいくつか行いたいと考えています。彼らは、これを行うためのAPIであるかどうかを尋ね、1つではないと言われましたが、エンジンからデータを得ることができれば、望み通りに使うことができました。スクリーンスクラップフォームの結果

私の質問:別のサイトへのフォーム送信に対する応答でスクリーンスクレイピングを実行することは可能ですか?もしそうなら、私が見なければならないものは何ですか?彼らはすでに私たちがやろうとしていることをする許可を求めているので、明らかな法的/倫理的問題は除いています。

さて、私はPythonでどんな処理をしたいと思います。

おかげ

+0

私は自動車保険業界で7年間働いていましたが、これを可能にする比較評価サービスはありません。彼らはこの情報のためにブローカーに請求することによってお金を稼ぐ。 – MyItchyChin

+0

これは健康保険会社のためのものです。私が契約している代理店には、(彼らによると)引用エンジンからのデータを使用する許可が与えられています。しかし、一日の終わりに、プロバイダはウェブサイトを公開するためにウェブサイトを承認しなければならないので、これが問題であれば、遅かれ早かれ見つけることになります。 – Barry

答えて

5

スクリーンスクレイピングの本当にいいライブラリはmechanizeです。これはPerlで書かれたオリジナルのライブラリのクローンです。とにかく、それはClientFormモジュールと組み合わせて、そしてBeautifulSoupとあなたからのいくつかの追加の助けが離れているはずです。

私はPythonで大量のスクリーンスクレイピングコードを書いてきましたが、これらのモジュールは最も有用であることが判明しました。 mechanizeのほとんどは、理論的には標準ライブラリのurllib2またはhttplibモジュールを使用して簡単に行うことができますが、mechanizeはこれを簡単にします:基本的にプログラムブラウザを提供します(ブラウザは必要ありません完全にカスタマイズ可能なブラウザのように動作するAPIを提供しています)。

後処理の場合、私はBeautifulSoupで多くの成功を収めましたが、lxml.htmlも良い選択です。

基本的には、Pythonでこれを行うことができます。その結果、ツールの範囲が本当に良いはずです。

2

あなたがフォームに記入していただけのよう要求してPOSTデータを送信するためにurllib.urlopendataパラメータを渡すことができます。フォームに正確にどのようなデータが含まれているかを見てください。

また、フォームにmethod="GET"がある場合、リクエストデータはurlopenに与えられたURLの一部に過ぎません。

戻ってきたHTMLデータをスクレイピングするためのかなりの標準はBeautifulSoupです。

+0

私はBeautifulSoupが遅いという苦情を聞いたことがあります。それは本当に事実ですか? Twistedの上に構築されたScrapy(www.scrapy.org)のオプションもありますが、どちらも使用しておらず、公正な比較はできません。 –

+0

私はスクリーンスクレイピングツールの速度にそれほど関心がありません。結果ページは比較的小さいです。私が心配していた問題は、最初に実際にデータを取り戻す仕組みでした。 – Barry

+0

BeautifulSoupが遅いです - 純粋なPythonです。 – aehlke

0

私は他の2つの答えがすでに目的のために選択されたすべての主要なライブラリを言及しているのを見て...限り、掻き取られているサイトがJavascriptの広範な使用をしない限り。 Javascriptの重いサイトで、JSに依存してフェッチして表示するデータ(AJAX経由など)に問題がある場合は、問題の規模はそれほど大きくなりません。その場合、私は、JavaScriptの大幅な仕事と(仮にの仕様に対応するため、おそらく専用の作業を行う必要があるでしょう

など、crowbarで始まるdiggstripper、またはseleniumのいくつかのカスタマイズを提案するかもしれませんJS-それが使用するJSフレームワークに応じて、問題の重いサイト)そういうわけで、仕事がそれほど難しいのです。しかし、いずれにしても、サイトのページのローカルHTMLコピーが表示されたままで終わる可能性があります。これらのコピーは既に推奨されている他のツールを使用してコピーしてください()。幸運を祈る:あなたが掻き集めるサイトは、常にJavascript-lightになるかもしれません! - )

0

他にもBeautifulSoupがおすすめですが、lxmlを使用する方がはるかに優れています。その名前にもかかわらず、HTMLの解析とスクラップ用です。それは、BeautifulSoupよりはるかに高速で、BeautifulSoupよりも「壊れた」HTMLを扱っています(彼らの名声に対する彼らの主張)。 lxml APIを習得したくない場合は、BeautifulSoup用の互換APIもあります。

Ian Blicking agrees

Google App Engineや純粋にPython以外のものがない限り、BeautifulSoupを使用する理由はありません。

+0

私は私の答えでこれを述べました:) – jkp

+0

そして私は精緻化しました。 – aehlke