競合データのパースは、マーケティング担当者、マーケットプレイスのセラー、エージェンシーにとって一般的な実践です。あなたはWildberriesの価格を監視し、Avitoから広告を収集し、競合の品揃えを分析します。しかし、大多数のサイトは大量のリクエストをブロックし、robots.txtファイルを無視すると法的な問題を引き起こす可能性があります。この記事では、プロキシを使用して倫理的にパースする方法を解説します: サイトのルールを遵守し、ブロックを避け、ビジネスリスクなしにデータを収集する方法です。
robots.txtとは何か、サイトにとっての必要性
robots.txtファイルは、サイトのルートにあるテキストドキュメントで、検索ロボットやパーサーにどのセクションをスキャンできるか、どのセクションが禁止されているかを通知します。例えば、オンラインストアはカートや個人アカウントのインデックスを禁止することができ、これによりこれらのページがGoogleに表示されないようにします。
一般的なrobots.txtファイルは次のようになります:
User-agent: * Disallow: /admin/ Disallow: /cart/ Disallow: /api/ Crawl-delay: 10 User-agent: Googlebot Allow: / Sitemap: https://example.com/sitemap.xml
ディレクティブの解説:
User-agent: *— すべてのボットに対するルール(アスタリスクは「任意のボット」を意味します)Disallow: /admin/— /admin/セクションのスキャンを禁止Crawl-delay: 10— リクエスト間の10秒の遅延User-agent: Googlebot— Googleに対する特別なルール(すべてが許可されています)
サイトがrobots.txtを使用する理由:
- サーバーの過負荷からの保護 — 大量のパースはサーバーに負荷をかけ、実際のユーザーのための動作を遅くします。
- 技術的なページの隠蔽 — カート、支払いフォーム、APIエンドポイントはインデックスされるべきではありません。
- 商業データの保護 — マーケットプレイスは競合が簡単に商品カタログをダウンロードすることを望んでいません。
- トラフィックの節約 — ボットの各リクエストはサイトの所有者にコストがかかります。
重要: robots.txtは推奨事項であり、技術的な障壁ではありません。このファイルは物理的にアクセスをブロックするものではありませんが、ルールを無視するとIPがブロックされたり、訴訟を引き起こす可能性があります(特に米国や欧州では)。
パースの法的リスク: 法律の見解
データのパースは法律のグレーゾーンにあります。国によって異なるルールが適用されますが、訴訟を避けるために知っておくべき一般的な原則があります。
ロシアの法律
ロシアにはパースに関する特別な法律はありませんが、一般的な規範が適用されます:
- 著作権 (ロシア民法第1259条) — 権利者の許可なしにユニークなテキスト、写真、商品説明をコピーすることはできません。価格や特性のパースは通常安全です。なぜなら、これは事実データだからです。
- 個人データ (152-FZ) — 同意なしにユーザーの個人データ(氏名、電話番号、メールアドレス)を収集することは禁止されています。これはソーシャルメディアのプロフィールや連絡先データベースのパースに関係します。
- 不正競争 (ロシア行政法第14.33条) — パースがビジネスモデルのコピーや顧客を誤解させるために使用される場合、最大500,000ルーブルの罰金を科される可能性があります。
米国および欧州の法律
米国およびEUでは法律が厳格です:
- CFAA (Computer Fraud and Abuse Act, 米国) — 無許可のコンピュータシステムへのアクセスは犯罪と見なされます。robots.txtの違反は「無許可のアクセス」と見なされる可能性があります。有名なケース: LinkedIn対hiQ Labs (2022) — 裁判所は公開データのパースは合法であるが、技術的な障壁(例えば、キャプチャ)を無視することは合法ではないと判決を下しました。
- GDPR (General Data Protection Regulation, EU) — 明示的な同意なしにEU市民の個人データを収集することは禁止されています。罰金は最大2000万ユーロまたは企業の年間売上の4%です。
- 利用規約 (Terms of Service) — 多くのサイトはそのルールの中でパースを明示的に禁止しています。違反すると契約違反で訴訟を起こされる可能性があります。
実践的なアドバイス: パースを行う前に、対象サイトのrobots.txt、利用規約、プライバシーポリシーの3つの文書を確認してください。パースが明示的に禁止されている場合は、代替データソース(公開API、パートナーシッププログラム、既存のデータセット)を探してください。
安全にパースできるもの
| データの種類 | リスク | コメント |
|---|---|---|
| 商品価格 | 低リスク | 事実データであり、著作権で保護されていません。 |
| 商品特性 | 低リスク | 技術データは安全です。 |
| ユニークな説明 | 高リスク | 著作権で保護されています。 |
| 商品写真 | 高リスク | 権利者の許可が必要です。 |
| ユーザーの連絡先 | クリティカル | 152-FZおよびGDPRの違反。 |
| 公開統計 | 低リスク | オープンデータは安全です。 |
倫理的なパース: 違反なしにデータを収集する方法
倫理的なパースとは、ビジネスの目的とサイト所有者への敬意のバランスを取ることです。必要なデータを収集し、対象リソースに問題を引き起こさず、法律を遵守することができます。
倫理的なパースの基本原則
- robots.txtを遵守する — パースが禁止されているセクションにはアクセスしないでください。代替データソースを探してください。
- リクエストの速度を制限する — 1秒間に1000リクエストを送信しないでください。サーバーに負荷をかけないように、リクエスト間に2〜10秒の遅延を設けてください。
- パーサーのUser-Agentを使用する — 通常のユーザーを装わないでください。正直なUser-Agentを指定してください。例えば: "MyCompanyParser/1.0 (contact@mycompany.com)"。これにより、サイトの管理者が問題が発生した場合に連絡できます。
- 公開データのみをパースする — 非公開セクション、API、データベースへのアクセスを試みないでください。
- コピーしたデータを再販しない — 収集した情報を内部のニーズ(競合分析、価格監視)に使用し、競合サービスの作成には使用しないでください。
- データをキャッシュする — 同じページを何度もリクエストしないでください。結果をローカルに保存し、スケジュールに従って更新してください(1日1回、1週間に1回)。
パースしない方が良い時
パースが問題を引き起こす場合もあります:
- サイトがAPIを提供している — 多くのマーケットプレイス(Wildberries、Ozon、Yandex.Market)は、パートナー向けの公式APIを持っています。パースの代わりにそれを使用してください。これにより、より迅速で合法的かつ信頼性の高い方法になります。
- データがキャプチャや認証で保護されている — 保護を回避することはシステムのハッキングと見なされる可能性があります。
- サイトが利用規約でパースを明示的に禁止している — 訴訟リスクが非常に高いです。
- 個人データを収集している — これはGDPRおよび152-FZの違反であり、巨額の罰金が科されます。
robots.txtを正しく読み、遵守する方法
robots.txtファイルはドメインのルートにあります: https://example.com/robots.txt。パースを開始する前に、常にこのファイルを確認してください。
robots.txtの主要なディレクティブ
| ディレクティブ | 意味 | 例 |
|---|---|---|
User-agent |
どのボットにルールが適用されるか | User-agent: *(すべてのボット) |
Disallow |
パースを禁止されたセクション | Disallow: /admin/ |
Allow |
許可されたセクション(Disallowの例外) | Allow: /public/ |
Crawl-delay |
リクエスト間の最小遅延(秒単位) | Crawl-delay: 10 |
Sitemap |
サイトマップへのリンク(すべてのページのリスト) | Sitemap: /sitemap.xml |
robots.txtの例とその解釈方法
例1: パースの完全禁止
User-agent: * Disallow: /
これは「すべてのボットがサイト全体をスキャンすることを禁止する」という意味です。このようなサイトのパースは所有者のルールに違反します。代替データソースを探してください。
例2: 選択的制限
User-agent: * Disallow: /admin/ Disallow: /api/ Disallow: /cart/ Allow: /products/ Crawl-delay: 5
これは「/products/セクション(商品)はパース可能ですが、/admin/、/api/、および/cart/は禁止されている。リクエスト間に5秒の遅延を設ける」という意味です。これは正常な条件であり、制限を遵守しながら商品をパースできます。
例3: 特定のボットに対するルール
User-agent: Googlebot Allow: / User-agent: * Disallow: / Crawl-delay: 10
これは「Googleはサイト全体をスキャンできますが、他のすべてのボットはできません」という意味です。Googleでない場合、パースは禁止されています。
パース前にrobots.txtを確認する方法
ほとんどのプログラミング言語には、robots.txtを自動的に確認するためのライブラリがあります。Pythonの例:
from urllib.robotparser import RobotFileParser
rp = RobotFileParser()
rp.set_url("https://example.com/robots.txt")
rp.read()
# ページをパースできるか確認する
url = "https://example.com/products/item123"
user_agent = "MyParser/1.0"
if rp.can_fetch(user_agent, url):
print("パースが許可されました")
else:
print("robots.txtによってパースが禁止されています")
これにより、ルールが自動的に確認され、特定のURLをパースできるかどうかが通知されます。
Rate Limitingとリクエスト間の遅延
Rate Limiting(リクエスト速度制限)は、サイトを過負荷から保護するためのものです。短時間にあまりにも多くのリクエストを送信すると、サーバーがあなたのIPをブロックしたり、キャプチャを表示することがあります。
遅延を遵守することが重要な理由
- IPのブロックを避ける — サイトは1つのIPからのリクエストの頻度を追跡します。1分間に100リクエストを送信すると、ボットとしてブロックされます。
- サーバーへの負荷を軽減する — 大量のパースはサイトを「ダウン」させる可能性があります。特に、安価なホスティングの小さなリソースでは。
- robots.txtのCrawl-delayを遵守する — サイトが10秒の遅延を指定した場合、このルールを無視することは倫理的ではありません。
- より自然な動作 — 通常のユーザーは1秒間に10ページを開くことはありません。遅延を設けることで、あなたのパーサーは実際の人間に似た動作をします。
さまざまなタスクのための推奨遅延
| パースの種類 | リクエスト間の遅延 | コメント |
|---|---|---|
| 小さなサイト(1000ページ未満) | 5-10秒 | サーバーの能力が低い |
| 中規模サイト(オンラインストア) | 2-5秒 | 最適なバランス |
| 大規模マーケットプレイス(Wildberries、Ozon) | 1-3秒 | 強力なインフラストラクチャだが、強い保護がある |
| APIエンドポイント | APIの制限に従う(通常10-100リクエスト/分) | APIのドキュメントを参照してください |
| ソーシャルメディア(Instagram、VK) | 10-30秒 | 非常に厳しい制限、高いバンのリスク |
コード内での遅延の実装方法
timeライブラリを使用したPythonの例:
import time
import requests
urls = [
"https://example.com/product1",
"https://example.com/product2",
"https://example.com/product3"
]
for url in urls:
response = requests.get(url)
print(f"パースしました: {url}")
# 次のリクエストの前に3秒の遅延
time.sleep(3)
より複雑なシナリオでは、ランダムな遅延(random delay)を使用して、動作をさらに自然にすることができます:
import time
import random
for url in urls:
response = requests.get(url)
# 2〜5秒のランダムな遅延
delay = random.uniform(2, 5)
time.sleep(delay)
倫理的なパースのためのプロキシローテーション
robots.txtを遵守し、遅延を設けていても、1つのIPから大量のデータをパースすることは疑念を引き起こす可能性があります。プロキシのローテーションは、異なるIPアドレス間でリクエストを分散させ、多数の実際のユーザーの動作を模倣するのに役立ちます。
プロキシローテーションが必要な理由
- Rate Limitingの回避 — 1つのIPからのリクエスト制限が100リクエスト/時間であれば、10のプロキシを使用することで1000リクエスト/時間を得ることができます。
- 地理的分散 — 地域データ(Wildberriesのモスクワとウラジオストクの価格)をパースするには、異なる都市のプロキシが必要です。
- 疑念の軽減 — 異なるIPからのリクエストは、実際のユーザーからのトラフィックのように見えます。
- バックアップ — 1つのプロキシがブロックされた場合、パーサーは自動的に別のプロキシに切り替わります。
倫理的なパースのために使用するプロキシの種類
| プロキシの種類 | 利点 | 欠点 | 使用するタイミング |
|---|---|---|---|
| レジデンシャル | 実際の家庭ユーザーのIP、バンのリスクが低い | 他のタイプより高価 | 強力な保護を持つソーシャルメディアやマーケットプレイスのパース |
| モバイル | モバイルオペレーターのIP、最大の信頼性 | 最も高価で、利用可能なIPが少ない | Instagram、TikTok、モバイルアプリのパース |
| データセンター | 安価で、高速 | 簡単に検出され、しばしばブラックリストに載る | 簡単なサイトのパース、テスト |
倫理的なパースのための推奨: レジデンシャルプロキシを自動ローテーションで使用してください。これにより、コストと信頼性のバランスが取れ、IPが通常のユーザーのように見えます。
プロキシローテーションの戦略
- リクエストごとのローテーション — 各リクエストが新しいIPから行われます。厳しい制限のあるサイト(ソーシャルメディア、マーケットプレイス)のパースに適しています。
- 時間ごとのローテーション(5-10分ごと) — 1つのIPが複数のリクエストに使用され、その後変更されます。より自然な動作です。
- スティッキーセッション(Sticky sessions) — 1つのIPがユーザーの全セッションに使用されます(例えば、認証 + 個人アカウントのパース)。認証のあるサイトには必須です。
- 地理的ローテーション — 各地域にその地域のプロキシを使用します。例: Wildberriesのモスクワの価格をパースする場合は、モスクワのプロキシを使用します。
Pythonでのプロキシローテーションの例
import requests
import random
import time
# プロキシのリスト(実際のものに置き換えてください)
proxies_list = [
{"http": "http://user:pass@proxy1.example.com:8080"},
{"http": "http://user:pass@proxy2.example.com:8080"},
{"http": "http://user:pass@proxy3.example.com:8080"}
]
urls = [
"https://example.com/product1",
"https://example.com/product2",
"https://example.com/product3"
]
for url in urls:
# ランダムなプロキシを選択
proxy = random.choice(proxies_list)
try:
response = requests.get(url, proxies=proxy, timeout=10)
print(f"{url}を{proxy}経由でパースしました")
except Exception as e:
print(f"プロキシ{proxy}でエラーが発生しました: {e}")
# 3秒の遅延
time.sleep(3)
実践的なケース: マーケットプレイスと競合のパース
ビジネスのための倫理的なパースの実際のシナリオを考えてみましょう。
ケース1: Wildberriesの価格監視
タスク: あなたはWildberriesで商品を販売しており、競合の価格を監視して自分の価格を調整したいと考えています。
問題:
- Wildberriesは頻繁なリクエストでIPをブロックします。
- 価格は配送地域によって異なります。
- 毎日100-500商品をパースする必要があります。
倫理的な解決策:
- robots.txtを確認する — Wildberriesは商品カードのパースを許可していますが、APIエンドポイントは禁止されています。
- レジデンシャルプロキシを使用する — 各地域(モスクワ、サンクトペテルブルク、ノボシビルスク)に対してその地域のプロキシを使用します。
- リクエストごとのローテーション — 各商品を新しいIPからパースします。
- 2-3秒の遅延 — リクエスト間に間隔を設けます。
- 1日1回パースする — 毎時間価格を更新するのではなく、日次で監視します。
結果: 競合の最新価格をブロックなしで取得できます。Wildberriesは異常な負荷を感じず、リクエストは時間とIPに分散されています。
ケース2: Avitoの広告パース
タスク: あなたは不動産業者であり、市内のすべてのアパート販売広告を収集して市場を分析したいと考えています。
問題:
- Avitoは疑わしい活動に対してキャプチャを表示します。
- 5000件以上の広告をパースする必要があります。
- データは毎日更新されます。
倫理的な解決策:
- robots.txtを確認する — Avitoは広告ページのパースを許可していますが、Crawl-delay: 5秒の制限があります。
- レジデンシャルプロキシを使用する — 10リクエストごとにローテーション(各リクエストごとではなく、疑わしく見えないように)。
- 5-7秒の遅延 — robots.txtのCrawl-delayを遵守します。
- 夜間にパースする — サイトの負荷が最小の時間(午前2時〜6時)に行います。
- データをキャッシュする — 同じ広告を二度パースせず、結果をデータベースに保存します。
結果: 夜間にすべての新しい広告をキャプチャし、ブロックなしで取得できます。Avitoは過負荷を感じず、必要なデータを得ることができます。
ケース3: 競合の品揃え分析
タスク: あなたは電子機器のオンラインストアのオーナーであり、競合にどの新しい商品が登場したかを知りたいと考えています。
問題:
- 競合のサイトは保護されたホスティングで、アンチボットシステムがあります。
- 10,000商品のカタログをパースする必要があります。
- これを毎週行いたいと考えています。
倫理的な解決策:
- robots.txtを確認する — /catalog/のパースは許可されていますが、/admin/および/api/は禁止されています。
- Sitemapを使用する — すべてのページを手動で訪問する代わりに、sitemap.xmlからURLリストを取得します(これにより、より迅速で余分な負荷をかけません)。
- レジデンシャルプロキシを使用し、5分ごとにローテーション — 1つのIPが20-30リクエストを行い、その後変更されます。
- 3-5秒の遅延 — 通常のユーザーの動作を模倣します。
- 新しい商品だけをパースする — 現在のカタログを以前のカタログと比較し、変更点のみをパースします。
結果: 毎週競合の新商品リストをブロックなしで取得できます。競合のサイトは問題を抱えず、競争上の優位性を得ることができます。
ルールを遵守した自動化ツール
倫理的なパースを簡素化し、robots.txtを自動的に遵守するための既製のツールがあります。
Scrapy (Python)
ScrapyはPythonでのパースに人気のあるフレームワークです。自動的にrobots.txtを確認し、ルールを遵守します。
Scrapyでのrobots.txt遵守の設定:
# settings.py # robots.txtの遵守を有効にする ROBOTSTXT_OBEY = True # リクエスト間の遅延(秒単位) DOWNLOAD_DELAY = 3 # ランダムな遅延(0.5から1.5 * DOWNLOAD_DELAYの範囲) RANDOMIZE_DOWNLOAD_DELAY = True # 同時に1つのドメインへのリクエストの制限 CONCURRENT_REQUESTS_PER_DOMAIN = 1 # パーサーのUser-Agent USER_AGENT = 'MyCompanyParser/1.0 (+http://mycompany.com/bot)'
これらの設定により、Scrapyはパース前にrobots.txtを自動的に確認し、すべてのルールを遵守します。
Apify (クラウドプラットフォーム)
Apifyは、コードなしでウェブスクレイピングを行うためのクラウドプラットフォームです。視覚的なインターフェースを通じてパーサーを作成し、Apifyが自動的にプロキシと制限の遵守を管理します。
倫理的なパースの利点:
- 組み込みのプロキシローテーション(レジデンシャルおよびデータセンター)
- robots.txtの自動遵守
- インターフェースを通じた遅延の設定
- スケジュール設定(1日/週に1回のパース)
Octoparse (コードなしパーサー)
Octoparseは、プログラミングなしでパースを行うためのデスクトップアプリケーションです。コーディングができないマーケティング担当者やセラーに適しています。
Octoparseでの倫理的なパースの設定方法:
- タスク設定を開く
- 「robots.txtを尊重する」を有効にする
- 3-5秒の遅延を設定する
- 「プロキシ設定」セクションでプロキシを接続する
- スケジュール設定を行う
Puppeteer/Playwright (JavaScript)
PuppeteerとPlaywrightは、ブラウザの自動化のためのライブラリです。JavaScriptレンダリングのあるサイトのパースに適しています。
Puppeteerを使用した倫理的なパースの例:
const puppeteer = require('puppeteer');
const robotsParser = require('robots-parser');
async function ethicalScrape(url) {
// robots.txtを確認する
const robots = robotsParser('https://example.com/robots.txt',
'MyParser/1.0');
if (!robots.isAllowed(url)) {
console.log('robots.txtによってパースが禁止されています');
return;
}
const browser = await puppeteer.launch();
const page = await browser.newPage();
// ページの読み込み前に遅延を設ける
await new Promise(resolve => setTimeout(resolve, 3000));
await page.goto(url);
const data = await page.evaluate(() => {
return document.querySelector('h1').innerText;
});
console.log(data);
await browser.close();
}
ethicalScrape('https://example.com/product1');
結論
プロキシを通じた倫理的なパースは、ビジネスの目的とサイト所有者への敬意のバランスを取ることです。robots.txtを遵守し、リクエスト間に遅延を設け、プロキシのローテーションを使用することで、法的リスクやブロックなしに必要なデータを収集できます。主な原則は、パース前にrobots.txtを確認し、リクエストの速度を制限し、正直なUser-Agentを使用し、公開データのみをパースすることです。これにより、ビジネスを訴訟から守り、パーサーの安定した動作を確保します。
マーケットプレイスや競合サイトをパースしたり、市場分析のためのデータを収集する予定がある場合は、レジデンシャルプロキシを自動ローテーションで使用することをお勧めします。これにより、コストと信頼性のバランスが取れ、IPが通常のユーザーのように見えます。