今では、Node.js や Go、さらには PHP など、Web クローラーを作成する方法がたくさんあります。私が Python を選んだ理由は、チュートリアルがたくさんあり、HTML セレクターの使い方を知っているだけで体系的に学習できるからです。ページをクロールするだけでは十分ではありません。クロール プロセスでよくある落とし穴や、ブラウザのヘッダーの変更やその他のヒントなどの注意事項も学びたいと思っています。
コードのコメントは非常に詳細に書かれていますので、ソースコードを直接読んでみてください。
このクローラーの目的は非常に単純で、後で住宅価格の動向を分析するために、不動産ウェブサイトの物件名 + 価格 + 1枚の写真をダウンロードします。相手のサーバーに多大な負荷がかかるのでストレスがたまり、3ページだけクロールすることにしました。
注意が必要ないくつかの知識ポイントについて話しましょう:
#送信されるヘッダーを変更することを忘れないでください
デフォルトで送信されるヘッダーはすべて Python 情報を含むヘッダーであると聞きましたが、これは Python 情報を含むヘッダーであり、他の Web サイトをクローラー ロボットとして認識し、IP がブロックされるため、クローラー プログラムを人間に近づけるのが最善ですが、このコードは、実際にクローラーを阻止したい Web サイトが存在する場合、一般的な隠蔽としてのみ機能します。コードは次のとおりです:
headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit 537.36 (KHTML, like Gecko) Chrome", "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"},
# HTML セレクターには、 beautifulsoup の代わりに pyquery を使用します
多くの本では beautifulsoup を推奨していますが、jquery に慣れている私にとって、 beautifulsoup の構文は非常に簡単です。少し扱いにくく、first-child などの高度で複雑な関数はサポートされていないようです。CSS セレクター モードはサポートされているかもしれませんが、私はそれを見つけることができず、ドキュメントをあまり注意深く読みませんでした。
そこでネットで情報を調べてみると、多くの人が pyquery ライブラリを推奨していることが分かり、実際に使ってみて非常に快適だったので、思い切って採用しました。
#Crawler のアイデア
このアイデアは実際には非常に簡単です:
1. 特定のプロパティのリスト ページを検索し、2 番目と 3 番目のページの URL 構造を分析します。
2. それぞれのすべてのリスト エントリ情報の URL を取得します。リストページを作成して保存します。 Python の set() コレクションでは、重複する URL 情報を削除するために set が使用されます。
3. 家の URL を取得して詳細ページに入り、写真やテキストなどの貴重なフィールド情報にアクセスします。
4. 現時点では、データを単純に出力するだけで、取得したデータをローカルの JSON 形式または CSV 形式で保存することはありません。
完全なコードは次のとおりです。