web-dev-qa-db-ja.com

pythonを使用して動的に生成されたWebページを読み取る

pythonと美しいスープを使用してWebサイトをスクレイピングしようとしています。一部のサイトでは、ブラウザに表示されている画像リンクがソースコードに表示されません。 Chrome InspectまたはFiddler、対応するコードを確認できます。ソースコードに表示されるのは次のとおりです。

<div id="cntnt"></div>

しかし、Chrome Inspectでは、このdivクラス内で生成されたHTML\CSSコード全体を見ることができます。生成されたコンテンツをPython内でもロードする方法はありますか?通常のurllibを使用していますin pythonそして、生成された部分なしでソースを取得することができます。

私はウェブ開発者ではないため、より良い表現で行動を表現することはできません。私の質問があいまいに見える場合は、お気軽に明確にしてください!

22
Ajay Nair

ページ内でJavaScriptコードを解析および実行するには、JavaScriptエンジンが必要です。あなたを助けることができるたくさんのヘッドレスブラウザがあります

http://code.google.com/p/spynner/

http://phantomjs.org/

http://zombie.labnotes.org/

http://github.com/ryanpetrello/python-zombie

http://jeanphix.me/Ghost.py/

http://webscraping.com/blog/Scraping-JavaScript-webpages-with-webkit/

15

Webサイトのコンテンツは、javascriptを介してロード後に生成される場合があります。生成されたスクリプトを取得するには、pythonを参照してください this answer

5
ppsreejith

これを最初に試してください!

おそらく、データは技術的にjavascript自体に含まれている可能性があり、このすべてのjavascriptエンジンビジネスが必要です。 (いくつかの素晴らしいリンクはこちら!)

しかし、経験から、私の最初の推測は、JSがajaxリクエストを介してデータをプルしているということです。プログラムにそれをシミュレートさせることができれば、面倒な解析/実行/スクレイピングを行わずに、必要なものをすべて手に入れることができます!

しかし、それは少し探偵の仕事がかかります。ネットワークトラフィックロガー(Firefoxの「Web Developer Toolbar」など)をオンにしてから、サイトにアクセスすることをお勧めします。すべて/すべてのXmlHTTPRequestに注意を集中させます。必要なデータは、これらの応答のいずれか、おそらくJSONテキストの途中にあるはずです。

次に、そのリクエストを再作成してデータを直接取得できるかどうかを確認します。 (注:リクエストのUser-Agentを設定して、サーバーがあなたを「本物の」Webブラウザーであると認識する必要がある場合があります。)

通常のスクレイパーはHTMLドキュメントのみを取得します。 JavaScriptロジックによって生成されたコンテンツを取得するには、DOMを生成し、通常のブラウザーと同様にスクリプトをロードして実行する Headless browser が必要です。ウィキペディアの記事とネット上の他のページには、それらのリストとその機能があります。

それらのいくつかの以前の主要な製品が現在放棄されていることを選択する際に留意してください。

0
ivan_pozdeev