MLモデルの品質は、トレーニングデータの質と量に直接依存します。しかし、数千ページを収集し始めると、サイトはリクエストをブロックし、キャプチャを表示し、IPを禁止し始めます。この記事では、データセットのための信頼性の高いデータ収集パイプラインを構築する方法について説明します:どのツールを使用し、保護を回避し、各タスクに適したプロキシの種類は何か。
なぜサイトはデータ収集をブロックするのか、そしてそれにどう対処するか
自動データ収集を開始すると、サイトは通常のユーザーではなく、1つのIPアドレスからのリクエストの流れを認識します。これにより、Cloudflare、DataDome、PerimeterXなどの保護システムに赤旗が立ちます。結果は、キャプチャ、時間制限のブロック、またはIPの完全禁止です。
この問題は、データセットが100ページではなく、数万ページを必要とするため、MLプロジェクトにとって特に深刻です。テキスト分類の単純なモデルをトレーニングするには、最低でも5,000〜10,000の例が必要です。コンピュータビジョンの場合は、数十万の画像が必要です。この量を1つのIPから収集することは物理的に不可能です。
保護システムは次のパラメータを分析します:
- リクエストの頻度 — 1つのIPからの10〜20リクエスト/分を超えると、すでに疑わしい。
- User-Agentとヘッダー — パーサーの標準ヘッダーは簡単に認識されます。
- クッキーとセッションデータの欠如 — 実際のブラウザは常に履歴を持っています。
- IPのジオロケーション — オランダのデータセンターのIPがロシア語サイトで表示されると疑わしい。
- 行動パターン — 人間はページを30〜60秒読みますが、ボットは0.3秒です。
解決策は、適切なプロキシ、IPのローテーション、実際のユーザーの行動を模倣することの組み合わせです。各要素について詳しく見ていきましょう。
MLデータセットのデータはどこから来るのか:主なソース
ツールについて話す前に、モデルのトレーニングに使用されるデータがどこから来るのかを理解することが重要です。ソースはいくつかのカテゴリに分かれ、それぞれに異なるアプローチが必要です。
オープンデータセット(パーシング不要)
最初に確認すべきことは、すでに存在するオープンデータセットです。Kaggle、Hugging Face Datasets、Google Dataset Search、UCI Machine Learning Repositoryには、数千の既製データセットが含まれています。あなたのタスクが標準的なものであれば(テキスト分類、物体認識、感情分析)、データセットはすでに存在する可能性があります。これにより、数週間の作業が節約されます。
ウェブパーシング(プロキシが必要)
既存のデータがない場合や、あなたの仕様に合わない場合は、パーシングが必要です。典型的なタスクは次のとおりです:
- Wildberries、Ozon、Yandex.Marketからのレビュー収集(感情分析用)
- 言語モデルのトレーニングのためのニュースサイトのパーシング
- コンピュータビジョンモデル用の商品画像の収集
- hh.ru、SuperJobからの求人情報のパーシング(HRモデル用)
- 予測モデル用のマーケットプレイスからの価格データの収集
- NLPタスクのためのソーシャルメディアのパーシング(VKontakte、Twitter/X)
プラットフォームのAPI(部分的にクローズド)
一部のプラットフォームは公式APIを提供しています — Twitter/X API、Reddit API、Google Places API。問題点:これらは高価で、制限があり、必要なデータ量を無料で提供しないことがよくあります。そのため、多くのMLチームはAPIとパーシングを組み合わせています。
合成データ
別のアプローチは、GPT-4や他のLLMを使用して合成データを生成することです。しかし、これには依然として実際のデータが基盤として必要です(few-shotの例)。したがって、パーシングはほとんどのMLプロジェクトの基本的なデータ収集ツールとして残ります。
コードを書かずにデータを収集するためのツール
良いニュースは、MLデータセットのデータ収集には開発者である必要がないということです。プロキシと基本的な保護を回避できる既製のノーコードおよびローコードツールが存在します。
ノーコードパーサー
| ツール | 用途 | プロキシのサポート | 難易度 |
|---|---|---|---|
| Octoparse | ウェブサイト、テーブル、ページネーション | ✅ はい | 低い |
| ParseHub | 動的なウェブサイト(JS) | ✅ はい | 低い |
| Apify | 100以上のサイト用の既製アクター | ✅ 組み込み | 中程度 |
| Bright Data IDE | 複雑な保護されたサイト | ✅ 組み込み | 中程度 |
| Scrapy Cloud | 大規模なパーシング | ✅ ミドルウェア経由 | 高い |
ほとんどのMLデータ収集タスクには、OctoparseまたはApifyで十分です。Octoparseは、20〜30分でビジュアルにパーサーを設定できます:ページ上の要素を指定し、ページネーションを設定し、プロキシを挿入して収集を開始します。結果はCSVまたはJSON形式でエクスポートされ、すぐにトレーニングに使用できます。
Apifyは、人気のプラットフォームをパーシングする必要がある場合に特に便利です:Instagram、Twitter/X、Amazon、Google Maps、LinkedInなどのための既製の「アクター」があります。パラメータを設定するだけで、構造化されたデータを取得できます。
MLデータセットに適したプロキシの種類
プロキシの種類の選択は、データ収集の成功における重要な要因の1つです。ここでの間違いは高くつきます:途中でブロックされるか、不要な能力に過剰に支払うかのいずれかです。3つの主要なタイプを見ていきましょう。
レジデンシャルプロキシ — 保護されたサイト用
レジデンシャルプロキシは、実際の家庭ユーザーのIPアドレスです。アンチボットシステムにとって、彼らは通常の訪問者と区別がつきません。これにより、強力な保護を持つサイト(マーケットプレイス(Wildberries、Ozon)、ソーシャルネットワーク、ニュースアグリゲーター)のパーシングに最適です。
MLタスクにとっての主な利点:地理的に関連付けられたデータを収集できます。地域コンテンツでモデルをトレーニングする場合は、ロシアまたは他の国の必要な地域のプロキシを選択します。これは、地理的分類や地域方言の分析タスクにとって特に重要です。
モバイルプロキシ — ソーシャルネットワークやモバイルプラットフォーム用
モバイルプロキシは、モバイルオペレーターのIP(4G/5G)を使用します。彼らはプラットフォームから最も高い信頼を得ています — なぜなら、1つのモバイルIPは実際に同時に何百人もの人々によって使用されているからです(すべての加入者が1つのタワーを介して1つのIPを使用します)。これは、モバイルIPからのデータ収集が正常に見えることを意味します。
モバイルプロキシは、VKontakte、TikTok、Instagramなどのデータを収集する場合に特に必要です — これらのプラットフォームはデータセンターのIPを攻撃的にブロックします。
データセンタープロキシ — オープンソースと速度用
データセンタープロキシは、迅速で安価です。彼らは実際のユーザーに関連付けられていないため、保護システムによって認識されやすくなります。しかし、多くのMLタスクにはこれで十分です:Wikipedia、オープンアーカイブ、GitHub、パブリックAPI、または強力な保護のないサイトをパーシングする場合 — データセンタープロキシは素晴らしい仕事をし、はるかに安価です。
あなたのMLタスクに適したプロキシの種類を選ぶ方法:
- マーケットプレイス(Wildberries、Ozon、Avito): ローテーション付きレジデンシャルプロキシ
- ソーシャルネットワーク(VKontakte、Instagram、TikTok): モバイルプロキシ
- ニュースサイト、フォーラム、Wikipedia: データセンタープロキシ
- Google Search、Yandex: レジデンシャルまたはモバイルプロキシ
- オープンアーカイブ、Common Crawl: データセンタープロキシ
実践的なシナリオ:テキスト、画像、価格、レビュー
人気のあるMLタスクのためのデータ収集の具体的なシナリオを見ていきましょう — ソース、ツール、必要なプロキシの種類を示します。
シナリオ1:感情分析用のレビューのデータセット(NLP)
タスク:Wildberriesから評価付きの50,000件のレビューを収集し、感情分類モデルをトレーニングします。
ソース: Wildberries — 評価1〜5の商品のレビュー(理想的なアノテーションがすでにあります)。
ツール: Octoparseまたはrequestsライブラリを使用したPythonの既製スクリプト。
プロキシ: ローテーション付きレジデンシャルプロキシ — Wildberriesはデータセンタープロキシを積極的にブロックします。
収集速度: 3〜5秒ごとに1リクエスト — 50,000件のレビューを2〜3日で収集。
得られるもの: CSVファイルには、レビューのテキスト、評価(1〜5)、商品カテゴリ、日付の列があります。これはトレーニング用の準備が整ったデータセットです — アノテーションはデータに組み込まれています。
シナリオ2:コンピュータビジョン用の画像データセット
タスク:分類モデルのトレーニングのために、複数のカテゴリから100,000件の商品画像を収集します。
ソース: Ozon、Yandex.Market — カテゴリ付きの商品写真。
ツール: Apify(eコマース用の既製アクターがあります)またはParseHub。
プロキシ: ロシア内の地理的ローテーション付きレジデンシャルプロキシ。
重要: 画像をプロキシ経由でダウンロードし、直接ではなくCDNサーバーも大量ダウンロードをブロックすることがあります。
得られるもの: カテゴリごとに分けられた画像フォルダー — KerasのImageDataGeneratorやPyTorchのDataLoaderが直接受け入れる構造です。
シナリオ3:言語モデル用のテキストコーパス
タスク:特定のテーマ(例えば、法的文書や医療記事)に基づいて言語モデルをファインチューニングするために、大規模なロシア語テキストコーパスを収集します。
ソース: テーマ別フォーラム、ニュースサイト、Habr、専門ポータル。
ツール: 構造化された収集のためのScrapy CloudまたはOctoparse。
プロキシ: ローテーション付きデータセンタープロキシ — ほとんどのテキストサイトには厳しい保護がなく、速度が匿名性よりも重要です。
速度: データセンタープロキシを使用すると、1分あたり50〜100リクエストを行い、数日で100万のドキュメントを収集できます。
シナリオ4:HRモデル用の求人データセット
タスク:hh.ruから200,000件の求人を収集し、職業推薦または分類モデルをトレーニングします。
ソース: hh.ru — 公式APIがありますが、制限があります。大規模なデータにはパーシングが必要です。
ツール: Apify(hh.ru用のアクターがあります)またはOctoparse。
プロキシ: レジデンシャルプロキシ — hh.ruはしっかりと保護されており、データセンタープロキシをブロックします。
得られるもの: 構造化データ:求人名、説明、給与、要件、地域、業界 — NLPおよび推薦システム用の優れたデータセットです。
大量データ収集時にブロックを回避する方法
良いプロキシを使用していても、基本的なルールを守らないとブロックされることがあります。データを安定して損失なく収集するための検証済みの方法を以下に示します。
IPとセッションのローテーション
最も重要なルール:1つのIPを何千ものリクエストに使用しないでください。10〜50リクエストごとにIPを変更するようにローテーションを設定してください。ほとんどのツール(Octoparse、Apify、Scrapy)は、プロキシプールを接続することでこれをサポートしています。
さらに、IPと一緒にセッションクッキーを変更してください — これは新しいユーザーを模倣し、単なるアドレスの変更ではありません。
リクエスト間の適切な遅延
リクエスト間にランダムな遅延を追加してください — 固定の2秒ではなく、1〜5秒のランダムな遅延を使用します。固定の間隔はボットパターンとして簡単に検出されます。ランダムな遅延は人間の行動を模倣します。
特に保護されたサイトの場合は、より長い休止を追加してください:100リクエストごとに30〜60秒の休止を取ります。これにより速度は低下しますが、ブロックのリスクが大幅に減少します。
リクエストの正しいヘッダー
User-Agentを最新のブラウザ(Chrome、Firefoxの最新バージョン)に設定してください。標準のHTTPヘッダーを追加してください:Accept-Language、Accept-Encoding、Referer。これらのヘッダーが欠如していることは、ほとんどの保護システムにとって明らかなボットの兆候です。
非稼働時間に収集する
大量収集を夜間(モスクワ時間の2:00〜6:00)に開始してください。この時間帯はサイトのトラフィックが最小限で、アンチボットシステムは攻撃的ではなく、あなたのリクエストは負荷の大部分を占めるため — 競争トラフィックが少ないため、疑いが減少します。
エラー処理と再試行
レスポンスコードの自動処理を設定してください:
- 429(リクエストが多すぎます) — 遅延を増やし、IPを変更し、5〜10分待ってください。
- 403(禁止されています) — IPがブロックされていますので、必ずプロキシを変更してください。
- 503(サービス利用不可) — サーバーの一時的な過負荷、1〜2分後に再試行してください。
- 200キャプチャ付き — より高品質のプロキシが必要です(データセンタープロキシの代わりにレジデンシャル)。
プロキシとサイトの地理的整合性
ターゲットサイトと同じ国のプロキシを使用してください。Wildberriesをパーシングする場合は、ロシアのIPを選択してください。ドイツのサイトからデータを収集する場合は、ドイツのプロキシが必要です。ジオロケーションの不一致は、最も一般的なブロックのトリガーの1つです。
チェックリスト:MLデータ収集パイプラインの設定
データセットのための大規模なデータ収集を開始する前に、このチェックリストを使用してください:
📋 準備
- ☐ Kaggle / Hugging Faceに既製のデータセットがあるか確認する
- ☐ ターゲットサイトのrobots.txtを調べる
- ☐ データの量とデータセットの構造を決定する
- ☐ パーシングツールを選択する(Octoparse、Apify、Scrapy)
- ☐ タスクに適したプロキシの種類を選択する(レジデンシャル / モバイル / データセンター)
⚙️ 設定
- ☐ IPローテーション付きプロキシプールを接続する
- ☐ User-Agentを設定する(最新のChrome/Firefox)
- ☐ 標準のHTTPヘッダーを追加する
- ☐ ランダムな遅延を設定する(1〜5秒)
- ☐ エラー処理を設定する(429、403、503)
- ☐ データのエクスポート形式を指定する(CSV、JSON、JSONL)
🧪 テスト
- ☐ 100〜500件のテストを実行する
- ☐ データの質と完全性を確認する
- ☐ テストボリュームでブロックがないことを確認する
- ☐ 収集速度を確認し、完全なデータセットにかかる時間を計算する
🚀 実行とモニタリング
- ☐ 夜間に実行する(02:00〜06:00 MSK)
- ☐ エラー通知を設定する
- ☐ 定期的に収集データの質を確認する
- ☐ 中間結果を保存する(10,000件ごとにチェックポイント)
🧹 ポストプロセッシング
- ☐ 重複を削除する
- ☐ テキストからHTMLタグや特殊文字を削除する
- ☐ クラスのバランスを確認する(分類タスク用)
- ☐ train/validation/testセットに分割する
- ☐ MLフレームワークと互換性のある形式で保存する
結論
MLデータセットのデータ収集は、一度きりのタスクではなく、システム的なプロセスです。この記事からの主な結論は、適切なプロキシの選択が、あなたが最後まで到達するか、ブロックに引っかかるかを決定するということです。レジデンシャルプロキシは、保護されたマーケットプレイスやアグリゲーターに必要であり、モバイルプロキシはソーシャルネットワークに、データセンタープロキシはオープンテキストソースに必要です。OctoparseやApifyのようなツールは、コードを書くことなくパイプラインを構築することを可能にします。そして、基本的なルール(IPのローテーション、ランダムな遅延、正しいヘッダー)を守ることで、数十万件のレコードを損失なく収集することができます。
マーケットプレイス、ニュースサイト、またはテーマポータルからデータを収集してMLモデルをトレーニングする予定がある場合は、レジデンシャルプロキシから始めることをお勧めします — 彼らは保護システムからの最大の信頼レベルを提供し、大規模なデータ収集でもブロックのリスクを最小限に抑えます。