大規模にWebスクレイピングする
(incolumitas.com)<p>- もしGoogle検索を数百万件単位で実行するサービスを作るなら、ブロックされない代替手段が必要になる<br />
- いちばん簡単なのは有料プロキシを使うことだが、かなり高価 <br />
→ そこで筆者が試してみたことを詳しく説明した面白い記事<br />
<br />
- 最初はAWS Lambda + Puppeteerを使用 <br />
→ AWSは世界16リージョンを提供しており、Lambdaを3回実行すると新しいIPが割り当てられる <br />
→ 同時に1000個のLambdaを実行すると、約250個のパブリックIPを使うことになる<br />
→ 16リージョン * 250 なら4000個のIPアドレスで、これなら週あたり数百万件規模のGoogle検索を行うには十分 <br />
→ GCPでも試したが、面白いことにGoogleは自社クラウドのIPをより積極的にブロックする(AWSと比べて)<br />
→ 2019〜2020年ごろの話で、今は変わっているかもしれない <br />
<br />
- この方法はGoogle / Bing / Amazonなどをスクレイピングするには使えるが、限界がある<br />
→ DataDome、Akamai、Impervaのようなアンチボット企業の仕組みを使っている場合は適用できない <br />
→ 非常に多様な方法でブラウザフィンガープリンティングを行い、ボットかどうかを識別する<br />
→ Google Picasso、Font/TLS/WebGL Fingerprinting など<br />
→ 実際、ほとんどの大規模スクレイピングサービスはクラウド + Dockerコンテナを使っているため、識別しやすい<br />
<br />
- 検知されにくく、スケーラブルなスクレイピングインフラ <br />
→ スクレイピングを成功させるための2つの原則 <br />
1. ブラウザ設定をごまかさないこと <br />
2. 最も重要なのは、「誰にも気づかれない場合にのみ」ブラウザ設定をごまかすこと<br />
→ そのためには、結局のところ「実際のデバイスを使う」のが最善という結論<br />
⇨ 安価なAndroid端末500台を複数メーカーから購入し、安いデータプランを契約<br />
⇨ 複数の都市に分散配置(アンテナの近くに)<br />
⇨ DeviceFarmer / stf のようなオープンソースを活用して端末を同時に制御 <br />
⇨ Android Goのような軽量OSを入れ、5分ごとに機内モードに切り替えて常に新しいIPアドレスを取得<br />
⇨ "4G carrier grade NAT" : 4GキャリアグレードNATはIPv4アドレス枯渇を防ぐために考案された方式で、数十万人がIPを共有するためブロック不可能<br />
→ Android端末を500台買う必要があり、設置場所も必要で、ハードウェア保守もしなければならないなど面倒な点が多い <br />
<br />
- 改善 : Androidをエミュレート <br />
→ Android端末を買う代わりに、Android-X8、Bluestacks、Android Studio Emulatorなどを使うとどうか?<br />
→ Proxidize は4Gモバイルプロキシを作れるようにする<br />
→ サーバー1台に50個の4Gドングルを設置<br />
→ 各サーバーで50〜100台のAndroid端末をエミュレート <br />
→ このステーションを5都市に設置 <br />
→ 簡単なコマンドでこれらのステーションを管理 </p>
12件のコメント