2013-07-02 16 views
18

私はPythonを使用してウェブサイトからコンテンツを拝借しています。最初にBeautifulSoupMechanizeをPythonで使用しましたが、JavaScriptを使用してコンテンツを作成したボタンがウェブサイトにあることがわかりましたので、Seleniumを使用することにしました。Selenium v​​s. BeautifulSoup Webスクレイピング

driver.find_element_by_xpathのような方法でSeleniumを使用して要素を見つけ出すことができるとすれば、私はちょうどSeleniumをすべて使用できるのですが、どのような理由でBeautifulSoupを使用するのですか?

この特別なケースでは、JavaScriptボタンをクリックするためにSeleniumを使用する必要があるため、Seleniumを使用して解析する方が良いか、SeleniumとBeautiful Soupの両方を使用する必要がありますか?

+0

私は以前にHTMLの解析にSeleniumを使用したことはありませんが、BeautifulSoupはかなり堅牢です。つまり、すでに何かのためにSeleniumを使用しているので、何か他のものが必要な理由が分かるまで、両方を使用してみませんか? – crowder

+0

@crowderはい私はSeleniumですべてをやっている瞬間ですが、私はBSを使いましたので、本当に最高のものを知りたいと思います。構文解析に関しては、例と同じように、Seleniumにはdriver.find_elements_by_class_name( "...")があり、BSにはsoup.findAll( '...'、{'class' : '....'})。 BSは少しゆっくりですが、どう思いますか? – elie

+0

@elie:これは本当にあなたが達成しようとしていることです。 SeleniumはWeb UIオートメーションツールとして設計されていますが、htmlを解析したいだけなら余計です。ページとのやりとりが必要な場合は、Seleniumを使用してください。ありがとうございます。 –

答えて

32

あなたの質問に直接答える前に、出発点として静的なHTMLページからコンテンツをプルするだけでよい場合は、おそらくHTTPライブラリ(Requestsや内蔵のurllib.requestなど)を使うべきですlxmlまたはBeautifulSoup、セレンではありませんが(セレンも適切でしょう)。不必要にセレンを使用しない利点:

  • 帯域幅。 Seleniumを使用するということは、ブラウザのページを訪れたときに通常取り出されるすべてのリソース(スタイルシート、スクリプト、イメージなど)をフェッチすることを意味します。これはおそらく不要です。
  • エラー回復の安定性と容易さ。 Seleniumは、PhantomJSの経験でも少し壊れやすいかもしれません。そして、掛けられたSeleniumのインスタンスを削除して新しいインスタンスを作成するアーキテクチャを作成すると、requestsを使用すると単純な再試行時のロジックを設定するよりも少し面倒です。
  • 潜在的にCPUとメモリの使用量 - あなたがクロールしているサイトと並列実行しようとしているスパイダースレッドの数によって、DOMレイアウトロジックまたはJavaScriptの実行がかなり高価になることが考えられます。あなたは簡単に魔法のように設定し、cookielib/cookiejarを使用してHTTPリクエストにクッキーを送信URL開放関数を作成することができます - 関数にクッキーを必要とするサイトはセレンを抜け出すための理由ではないことを

注意。

さて、セレンの使用を検討するのはなぜですか?クロールしたいコンテンツが、HTMLに焼き込まれるのではなく、JavaScriptを介してページに追加されているケースを処理することはほぼ完全です。それでも、重い機械を壊すことなく、必要なデータを得ることができるかもしれません。通常、次のいずれかのシナリオが適用されます。

  • このページに表示されているJavaScriptは、すでに内容が焼かれています。 JavaScriptは、コンテンツをページに挿入するテンプレートやその他のDOM操作を行うためのものです。この場合、興味のあるコンテンツを正規表現を使用してJavaScriptから直接取り出す簡単な方法があるかどうかを確認することができます。
  • JavaScriptはコンテンツを読み込むためにWeb APIを使用しています。この場合、関連するAPI URLを特定して自分で打つことができるかどうかを検討してください。実際にJavaScriptを実行してコンテンツをWebページから削り取るよりもはるかに簡単で直接的な方法かもしれません。

あなたは、セレンを使用して、状況のメリットを決めるを行うPhantomJSドライバではなく、たとえば、デフォルトFireFoxのドライバとそれを使う場合。Webスパイダリングでは、実際にページを実際に描画したり、ブラウザ固有の特徴や機能を使用する必要はありません。そのため、CPUとメモリのコストが低く、クラッシュやハングする可動部分の少ないヘッドレスブラウザが理想的です。