多くの Web サイトでは JavaScript が使用されています... Web ページのコンテンツは js によって動的に生成され、一部の js イベントによってページのコンテンツが変更され、リンクが開かれることがあります。一部の Web サイトは、js なしではまったく機能せず、代わりに「」のようなメッセージを返します。開いて参照してください。
JavaScript をサポートするには 4 つのソリューションがあります:
1. 関連する JS ロジックをシミュレートするコードを作成します。
2. テストや Selenium などに広く使用されているさまざまなインターフェースと同様のインターフェースを備えたブラウザーを呼び出します。
3. インターフェースのないブラウザ、さまざまな Webkit ベースのもの、casperjs、phantomjs などを使用します。
4. JS 実行エンジンと組み合わせて、軽量のブラウザを自分で実装するのは非常に困難です。コードを通じて js ロジックをシミュレートできる場合は、このソリューションが推奨されます。たとえば、duckduckgo 検索エンジンでは、ページめくりアクションが js によってトリガーされるのは難しいようですが、2 番目のフォームに移動したときに気づきました。彼のページでは、送信後にページをめくることができるようです。試してみると、実際にそのとおりです。関連する JS ロジックをシミュレートするコードを作成するときは、まずブラウザーで JS を閉じて、実行できるかどうかを確認してください。一部のページは js なしで互換性を提供します。機能しない場合は、Chrome コンソールまたは firebug を開いて、ajax などのパッケージを送受信している可能性があります。つまり、js が何かを実行する場合は、Python コードを使用して実行をシミュレートすることもできます。 Selenium を使用する場合、効率が非常に低いという欠点があります。ブラウザがページを開くことを考慮すると、この時間は許容範囲内ですか?効率が許容できるという前提では、このソリューションは悪くありません
2、ゴースト、スピナーなど: Python でカスタマイズされた Web キット。個人的には、スピナー コードは乱雑であると感じますが、ゴースト コードは高品質です。ただし、バグがあります。
この解決策の詳細は以下を参照してください
Yitao が使用するショッピング価格の比較に関する記事をオンラインで見つけることができます。このクローラーは、おそらく webkit とscrapy を使用しています。
Scrapy は非同期ネットワーク フレームワークを使用しているため、潜在的なブロック状況に注意する必要があります。設定にItemPipelineの並列処理を設定するパラメータがあるため、パイプラインはスレッドプールで実行されると推測されます(未検証)。データベースの書き込み、ファイルの書き込みなど)、フレームワーク全体をブロックする時間のかかる操作を心配する必要はありません。また、この書き込み操作をパイプラインで非同期として実装する必要もありません。また、フレームワークの他の部分も同様です。簡単に言うと、クローラーによって生成されたリクエストはスケジューラーによってダウンロードされ、ダウンローダーがダウンロードを完了した後、応答が分析のためにクローラーに渡されます。インターネット上にある参考例には、DownloaderMiddleware に書き込まれた js サポートの一部が含まれています。これは、scrapy 公式 Web サイトのコード スニペットにも当てはまります。この方法で実装すると、フレームワーク全体とクローラーの動作がブロックされます。モードは、並列ダウンロードではなく、download-parse-download-parse になりました。これは、高い効率を必要としない小規模なクローリングでは大きな問題ではありません。より良いアプローチは、scrapy のダウンローダーに js サポートを記述することです。このような実装はインターネット上で行われます (selenium+phantomjs を使用)。ただし、サポートされるのは get リクエストのみです
Webkit を Scrapy のダウンローダーに適合させる場合、さまざまな詳細に対処する必要があります
。