大規模にWebスクレイピングする
(incolumitas.com)-
もしGoogle検索を数百万件単位で実行するサービスを作るなら、ブロックされない代替手段が必要になる
-
いちばん簡単なのは有料プロキシを使うことだが、かなり高価
→ そこで筆者が試してみたことを詳しく説明した面白い記事
- 最初はAWS Lambda + Puppeteerを使用
→ AWSは世界16リージョンを提供しており、Lambdaを3回実行すると新しいIPが割り当てられる
→ 同時に1000個のLambdaを実行すると、約250個のパブリックIPを使うことになる
→ 16リージョン * 250 なら4000個のIPアドレスで、これなら週あたり数百万件規模のGoogle検索を行うには十分
→ GCPでも試したが、面白いことにGoogleは自社クラウドのIPをより積極的にブロックする(AWSと比べて)
→ 2019〜2020年ごろの話で、今は変わっているかもしれない
- この方法はGoogle / Bing / Amazonなどをスクレイピングするには使えるが、限界がある
→ DataDome、Akamai、Impervaのようなアンチボット企業の仕組みを使っている場合は適用できない
→ 非常に多様な方法でブラウザフィンガープリンティングを行い、ボットかどうかを識別する
→ Google Picasso、Font/TLS/WebGL Fingerprinting など
→ 実際、ほとんどの大規模スクレイピングサービスはクラウド + Dockerコンテナを使っているため、識別しやすい
- 検知されにくく、スケーラブルなスクレイピングインフラ
→ スクレイピングを成功させるための2つの原則
-
ブラウザ設定をごまかさないこと
-
最も重要なのは、「誰にも気づかれない場合にのみ」ブラウザ設定をごまかすこと
→ そのためには、結局のところ「実際のデバイスを使う」のが最善という結論
⇨ 安価なAndroid端末500台を複数メーカーから購入し、安いデータプランを契約
⇨ 複数の都市に分散配置(アンテナの近くに)
⇨ DeviceFarmer / stf のようなオープンソースを活用して端末を同時に制御
⇨ Android Goのような軽量OSを入れ、5分ごとに機内モードに切り替えて常に新しいIPアドレスを取得
⇨ "4G carrier grade NAT" : 4GキャリアグレードNATはIPv4アドレス枯渇を防ぐために考案された方式で、数十万人がIPを共有するためブロック不可能
→ Android端末を500台買う必要があり、設置場所も必要で、ハードウェア保守もしなければならないなど面倒な点が多い
- 改善 : Androidをエミュレート
→ Android端末を買う代わりに、Android-X8、Bluestacks、Android Studio Emulatorなどを使うとどうか?
→ Proxidize は4Gモバイルプロキシを作れるようにする
→ サーバー1台に50個の4Gドングルを設置
→ 各サーバーで50〜100台のAndroid端末をエミュレート
→ このステーションを5都市に設置
→ 簡単なコマンドでこれらのステーションを管理
12件のコメント
プロキシ、スクレイピングサービス、アンチボットソフトウェアなどは、上記の記事によく整理されています。
すごいハックですね!
https://www.diffbot.com/products/crawl/
クロールしてウェブページのスクレイピングを行ってくれるサービスもあります。スクレイピングしたデータは不要な情報を除外して、JSONとして保存しています。
あっけにとられる…
まったく別の話ですが..
Google検索をAPI化して販売している https://serpapi.com/ のようなところも.. あります。
でもここはNaver検索もAPI化して一緒に販売しています(笑)
https://serpapi.com/naver-search-api
月3万回検索で$250という驚きの?価格
高すぎて驚くレベルなんですか? ちょっと感覚がつかめなくて。
はい、かなり高価ですね。有料プロキシを使う場合などと比べればですが。
APIなのでブロックの懸念がなく、便利ではあります
国内基準では、ある程度データが提供される0円の格安SIM料金プランが思い浮かびますが…
大量加入が難しいとなると、これも厳しそうですね。
Google Fi の場合は、1回線につき追加のデータSIMを4枚まで使えるので、こういうのも一つの方法ではありそうです
以前、naver の何かをスクレイピングしたとき
AWS Lambda ではだめで GCP Functions ではできた記憶があるのですが、
IP range が公開されているからだと思っていたものの、そうでもないみたいですね。
すでに1番の方法でやっていたので、ほかにはどんな方法があるのかと思って見てみたのですが……まったく思いもよりませんでした。
実際、1番の Lambda+Puppeteer もあの方式でやれば悪くなさそうですが、
最後の Proxidize の方法と比べると、おそらくスクレイピングの規模によってコスト差が出そうです。
より大規模になるほど Proxidize のほうが安定するでしょうが、手軽にやるなら 1番も悪くないと思います。
最後に紹介されていた https://proxidize.com/ は面白いですね。
自分で 4G モバイルプロキシを作って管理できるようにするハードウェア+ソフトウェアのソリューションです。
5個のドングル版が $399 ですね。対応ユーザー国リストに韓国もあるのを見ると、利用は可能そうです。
CGNAT まではいきませんが、ソフトウェアプロキシをプールで管理する Scrapoxy のようなソリューションもあります。