TL;DR (要点)
Scrapling は、StealthyFetcher モードと DynamicFetcher モードを通じて、強力なアンチボット回避機能を提供します。Cloudflare で保護されたサイト (Turnstile の自動解決、キャンバスフィンガープリントのランダム化、WebRTC ブロック) には StealthyFetcher を使用し、JavaScript を多用するアンチボット実装には DynamicFetcher を使用します。OpenClaw と統合することで、すべてのスクレイピング操作を自然言語コマンドで制御できます。
はじめに
データを収集するためにウェブサイトにアクセスすると、ページが読み込まれた後、「アクセス拒否」または CAPTCHA チャレンジが表示されることがあります。これは、サイトがあなたのスクレイパーを検出し、アクセスをブロックしたためです。このシナリオは、正当なプロジェクトのためにウェブデータが必要な開発者、データサイエンティスト、研究者にとって常に発生します。
これは、ウェブサイトがますます高度なアンチボットシステムを導入しているためです。Cloudflare、PerimeterX、Akamai、および同様のサービスは、ブラウザのフィンガープリント、行動パターン、リクエスト特性を分析して、自動アクセスを識別します。従来のスクレイパーは、これらの防御に対してすぐに失敗します。
ボット検出業界は数十億ドル規模の市場に成長しました。企業は、自動アクセスからデジタル資産を保護するために多額の投資を行っています。Cloudflare だけでも、毎日数十億のボットリクエストをブロックしていると報告しています。これは、市場調査、競合分析、価格監視、学術研究など、正当なデータ収集にとって大きな課題を生み出しています。
Scrapling はこの問題を解決します。このライブラリには、これらの保護を回避するために特別に設計された複数のアンチ検出モードが含まれています。OpenClaw の自然言語インターフェースと組み合わせることで、複雑なコードを書くことなく、AI アシスタントにアンチボットチェックを回避するよう指示できます。
アンチボット検出の理解
検出を回避する前に、それがどのように機能するかを理解する必要があります。アンチボットシステムはいくつかの要因を分析します。
ブラウザフィンガープリンティング: サイトは、画面解像度、インストールされているフォント、WebGL レンダラー、キャンバス出力、その他数百ものシグナルを含むブラウザに関する情報を収集します。自動ツールは、実際のブラウザとは異なる一貫したフィンガープリントを通じて自分自身を明らかにすることがよくあります。
行動分析: 人間ユーザーはマウスを予測不能に動かし、さまざまな速度でスクロールし、自然なタイミングで入力します。ボットはしばしば機械的なパターンを示します。インスタントページ読み込み、均一なスクロール速度、アクション間の完璧なタイミングなどです。
リクエスト分析: 各 HTTP リクエストには、ヘッダー、TLS フィンガープリント、接続パターンが含まれます。requests のような標準的な HTTP ライブラリは、実際のブラウザトラフィックと比較して明らかに自動化されているように見えるリクエストを行います。
JavaScript チャレンジ: 最新のサイトは、ブラウザ情報を収集するために JavaScript を実行します。例えば、Cloudflare の Turnstile は、コンテンツを表示する前にブラウザの整合性を検証する目に見えないテストを実行します。
IP レピュテーション: IP アドレスは、ホスティングプロバイダー、不審な活動の履歴、地理的な場所に基づいてフラグが立てられます。データセンターの IP は即座に疑われます。
Scrapling は、これらの検出ベクトルそれぞれを専用のフェッチャーを通じて対処します。
Scrapling のアンチボット機能
Scrapling は、アンチボットシステムを回避するための主要なフェッチャーを 2 つ提供します。

StealthyFetcher は、ほとんどの Cloudflare および同様の保護を処理します。これは、一般的な検出ベクトルを自動的にパッチする組み込みの回避技術を備えたヘッドレス Chrome を使用します。
DynamicFetcher は、Playwright を通じて完全なブラウザ自動化を提供します。StealthyFetcher が失敗した場合や、サイトが高度な JavaScript ベースの検出を使用している場合に使用します。
以下に選択方法を示します。
| シナリオ | 推奨フェッチャー |
|---|---|
| Cloudflare 保護 | StealthyFetcher |
| Turnstile CAPTCHA | StealthyFetcher |
| 基本的なボット検出 | StealthyFetcher |
| 複雑な JavaScript チャレンジ | DynamicFetcher |
| アンチボット付き無限スクロール | DynamicFetcher |
| カスタムアンチボットソリューション | DynamicFetcher |
StealthyFetcher の詳細
StealthyFetcher は、Scrapling の主要なアンチボットシステム回避ツールです。ほとんどの一般的な保護メカニズムを自動的に処理します。
基本的な使い方
from scrapling.fetchers import StealthyFetcher
fetcher = StealthyFetcher()
page = fetcher.get('https://protected-site.com')
print(page.text)
このフェッチャーは、Cloudflare、PerimeterX、および同様の保護を自動的に回避しようとします。
Cloudflare Turnstile の回避
Cloudflare Turnstile は、最も一般的なアンチボットチャレンジの 1 つです。StealthyFetcher はこれを自動的に解決します。
page = StealthyFetcher.fetch(
'https://cloudflare-protected-site.com',
solve_cloudflare=True
)
solve_cloudflare=True パラメータは、チャレンジの自動解決をトリガーします。これは、インターティシャルチャレンジ(「アクセスする前にブラウザを確認しています」ページ)と Turnstile ウィジェットの両方で機能します。
キャンバスフィンガープリントのランダム化
キャンバスフィンガープリンティングは、ブラウザがグラフィックをレンダリングする方法に基づいて一意の識別子を作成します。StealthyFetcher は、キャンバス操作にランダムノイズを追加します。
page = StealthyFetcher.fetch(
'https://site.com',
hide_canvas=True
)
各リクエストは異なるキャンバス出力を生成し、フィンガープリントの追跡を効果的にしません。
WebRTC リーク防止
WebRTC は、プロキシを使用している場合でも、実際の IP アドレスを公開する可能性があります。StealthyFetcher は WebRTC リクエストをブロックします。
page = StealthyFetcher.fetch(
'https://site.com',
block_webrtc=True
)
これにより、身元や場所を明らかにする可能性のあるローカル IP リークが防止されます。
Google 検索リファラーのなりすまし
多くのサイトは、トラフィックが Google 検索から来ていると認識した場合にアクセスを許可します。StealthyFetcher はこのリファラーを偽装します。
page = StealthyFetcher.fetch(
'https://site.com',
google_search=True
)
これにより、リクエストが Google の検索結果ページから来ているように見せかけます。
インストールされている Chrome の使用
最大限の回避のために、Playwright の Chromium の代わりにインストールされている Chrome ブラウザを使用します。
page = StealthyFetcher.fetch(
'https://site.com',
real_chrome=True
)
これにより、正規のブラウザフィンガープリントを持つ実際の Chrome インストールが使用されます。
地理的ななりすまし
リクエストを特定の場所と一致させます。
page = StealthyFetcher.fetch(
'https://site.com',
locale='en-US',
timezone_id='America/New_York'
)
これにより、ブラウザのタイムゾーンと言語設定が目的の場所と一致するように設定されます。
高度な保護のための DynamicFetcher
一部のサイトでは、StealthyFetcher が回避できない高度なアンチボットシステムを使用しています。DynamicFetcher は、Playwright を使用した完全なブラウザ自動化を提供します。
from scrapling.fetchers import DynamicFetcher
fetcher = DynamicFetcher()
page = fetcher.get('https://highly-protected-site.com')
print(page.text)
無限スクロールの処理
無限スクロールとアンチボット保護を備えたサイトには、ブラウザの自動化が必要です。
from scrapling.fetchers import DynamicFetcher
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
fetcher = DynamicFetcher(playwright=p)
page = fetcher.get('https://site.com/infinite-scroll')
# コンテンツの読み込みを待つ
page.wait_for_selector('.content-item')
# さらに読み込むためにスクロール
for _ in range(5):
page.evaluate('window.scrollTo(0, document.body.scrollHeight)')
page.wait_for_timeout(1000)
JavaScript の実行を待つ
一部のコンテンツは、最初のページ読み込み後に JavaScript を介して読み込まれます。
page = DynamicFetcher.get('https://site.com')
page.wait_for_load_state('networkidle')
content = page.content()
これにより、コンテンツを抽出する前にすべての JavaScript が実行されたことが保証されます。
CAPTCHA を手動で処理する
自動的に解決できない CAPTCHA の場合。
page = DynamicFetcher.get('https://site.com')
# CAPTCHA が存在するかどうかを確認
if page.is_visible('.captcha-container'):
# 手動解決のためにスクリーンショットを撮る
page.screenshot(path='captcha.png')
# 手動で解決後、続行
page.click('.captcha-submit')
手動での介入のために一時停止し、自分で CAPTCHA を解決して、スクレイピングを再開できます。
OpenClaw での使用
OpenClaw を使用すると、Scrapling のアンチボット機能を自然言語で制御できます (OpenClaw 内で Scrapling をセットアップする方法を確認したい場合は、この記事を確認してください)。
サイトの Cloudflare を回避する:
"このサイトは Cloudflare 保護があるため、https://shop.example.com から製品データを取得してください"
OpenClaw は、solve_cloudflare を有効にして StealthyFetcher を自動的に使用します。
高度な保護を備えたサイトを処理する:
"https://careers.example.com から求人情報をスクレイピングしてください。強力なアンチボット保護があるため、ヘッドレスブラウザモードを使用してください"
OpenClaw は、完全なブラウザ自動化のために DynamicFetcher に切り替えます。
プロキシローテーションを使用する:
"これらの 100 個の URL からデータを抽出してください。これらのプロキシをローテーションしてください: proxy1.com:8080, proxy2.com:8080, proxy3.com:8080"
OpenClaw は、複数のプロキシ間でリクエストを分散します。
地理的な場所を偽装する:
"https://site.com から価格データを取得し、米国東海岸の設定を使用してください"
OpenClaw は、タイムゾーンとロケールを一致するように設定します。
アンチボット技術の説明
根底にある技術を理解することは、適切なアプローチを選択するのに役立ちます。
TLS フィンガープリントのなりすまし
ブラウザがウェブサイトに接続するとき、TLS ハンドシェイクを実行します。ClientHello メッセージには、クライアントライブラリを識別する特性が含まれています。標準の Python リクエストには、アンチボットシステムが認識する特徴的なフィンガープリントがあります。
Scrapling は、正規のブラウザとして表示されるように TLS フィンガープリントを偽装します。これは StealthyFetcher と DynamicFetcher で自動的に行われます。
ユーザーエージェントのローテーション
同じユーザーエージェント文字列でリクエストを送信すると、検出がトリガーされます。Scrapling はユーザーエージェントを自動的にローテーションします。
# ユーザーエージェントは自動的にローテーションされます
page = StealthyFetcher.get('https://site.com')
各リクエストは、異なるブラウザバージョンから来ているように見えます。
ヘッダーのなりすまし
実際のブラウザは、特定の順序で特定のヘッダーを送信します。Scrapling は、ヘッダーが正規のブラウザの動作と自動的に一致するようにします。
キャンバスのランダム化
ウェブサイトがブラウザに何かを描画するよう要求すると、正確なピクセルがブラウザと GPU を明らかにします。Scrapling はキャンバス操作に知覚できないノイズを追加し、各フィンガープリントを一意にします。
画面解像度とウィンドウサイズ
ヘッドレスブラウザは、デフォルトの画面サイズを報告することがよくあります。Scrapling は、実際のユーザーディスプレイと一致するようにビューポートの寸法をランダム化します。
マウスの動きのシミュレーション
DynamicFetcher は人間のようなマウスの動きをシミュレートできます。
page.mouse.move_to_element('.button')
page.mouse.move_by_offset(50, 20)
page.click('.submit')
これにより、行動分析を通過する現実的な動きのパターンが追加されます。
プロキシ統合
プロキシを使用すると、IP ベースのブロックを回避し、地理的なスクレイピングを可能にします。
基本的なプロキシの使用法
from scrapling.fetchers import StealthyFetcher
fetcher = StealthyFetcher()
page = fetcher.get(
'https://site.com',
proxy='http://username:password@proxy.example.com:8080'
)
プロキシローテーション
大規模なスクレイピングの場合、複数のプロキシをローテーションします。
import random
from scrapling.fetchers import StealthyFetcher
proxies = [
'http://proxy1.com:8080',
'http://proxy2.com:8080',
'http://proxy3.com:8080'
]
fetcher = StealthyFetcher()
for url in urls:
proxy = random.choice(proxies)
page = fetcher.get(url, proxy=proxy)
# ページを処理
住宅用プロキシ
住宅用プロキシは、実際のインターネットサービスプロバイダーの IP アドレスを使用します。データセンターの IP よりも検出が困難です。
page = StealthyFetcher.get(
'https://site.com',
proxy='http://residential-proxy-provider:port'
)
住宅用プロキシはコストがかかりますが、保護されたサイトでの成功率を大幅に向上させます。
一般的なアンチボットシナリオ
Cloudflare 保護
Cloudflare は最も一般的なアンチボットソリューションです。ほとんどのサイトは基本的な StealthyFetcher で動作します。
page = StealthyFetcher.fetch('https://cloudflare-site.com', solve_cloudflare=True)
Cloudflare がチャレンジページを表示した場合、フェッチャーは自動的にそれを解決して再試行します。
PerimeterX (現在の Ownl)
PerimeterX (現在は Ownl の一部) は行動分析を使用します。
# PerimeterX には DynamicFetcher を使用
page = DynamicFetcher.get('https://perimeterx-site.com')
完全なブラウザ自動化により、行動チャレンジがより適切に処理されます。
Akamai
Akamai はエンタープライズグレードのボット管理を提供します。
# Akamai はしばしば住宅用プロキシを必要とします
page = StealthyFetcher.get(
'https://akamai-protected.com',
proxy='http://residential-proxy:port',
solve_cloudflare=True
)
Akamai で保護されたサイトは、複数の回避技術を組み合わせる必要があることがよくあります。
カスタムアンチボットソリューション
一部のサイトは独自の検出システムを構築しています。
# 最大限のステルス設定を使用
page = StealthyFetcher.fetch(
'https://custom-protected.com',
solve_cloudflare=True,
block_webrtc=True,
hide_canvas=True,
google_search=True,
real_chrome=True
)
これが失敗した場合は、完全なブラウザ自動化を備えた DynamicFetcher に切り替えます。
ベストプラクティス
シンプルに始める
まずは基本的な StealthyFetcher から始めます。ブロックに遭遇した場合にのみ複雑さを追加します。
# まずは基本を試す
page = StealthyFetcher.get('https://site.com')
# 必要に応じて回避策を追加
if 'blocked' in page.text.lower():
page = StealthyFetcher.fetch('https://site.com', solve_cloudflare=True)
レート制限を尊重する
アンチボット機能があっても、あまりにも多くのリクエストを送信すると保護がトリガーされます。
import time
for url in urls:
page = StealthyFetcher.get(url)
time.sleep(2) # リクエスト間に待機
本番環境には住宅用プロキシを使用する
無料または安価なプロキシは評判が悪いことがよくあります。信頼性の高いスクレイピングのために、高品質な住宅用プロキシに投資してください。
# 高品質な住宅用プロキシ
page = StealthyFetcher.get(
'https://site.com',
proxy='http://premium-residential-proxy:port'
)
robots.txt を確認する
サイトがスクレイピングを許可しているかどうかを常に確認してください。
# スクレイピングする前に robots.txt を確認
from urllib.parse import urlparse
domain = urlparse('https://site.com').netloc
robots_url = f'https://{domain}/robots.txt'
エラーを適切に処理する
スクレイパーにエラー処理を組み込みます。
from scrapling.fetchers import StealthyFetcher
fetcher = StealthyFetcher()
try:
page = fetcher.get('https://site.com')
except Exception as e:
print(f'Error: {e}')
# DynamicFetcher にフォールバック
from scrapling.fetchers import DynamicFetcher
fetcher = DynamicFetcher()
page = fetcher.get('https://site.com')
トラブルシューティング
まだブロックされる場合
StealthyFetcher を使用しているにもかかわらずブロックに遭遇した場合。
- すべての回避オプションを有効にする:
page = StealthyFetcher.fetch(
'https://site.com',
solve_cloudflare=True,
block_webrtc=True,
hide_canvas=True,
google_search=True,
real_chrome=True
)
- DynamicFetcher に切り替える:
from scrapling.fetchers import DynamicFetcher
page = DynamicFetcher.get('https://site.com')
- プロキシローテーションを追加する:
page = StealthyFetcher.get(
'https://site.com',
proxy='http://residential-proxy:port'
)
Cloudflare チャレンジループ
StealthyFetcher がチャレンジループに陥ることがあります。
- タイムアウトを増やす:
page = StealthyFetcher.fetch(
'https://site.com',
solve_cloudflare=True,
timeout=120
)
- real_chrome を使用する:
page = StealthyFetcher.fetch(
'https://site.com',
solve_cloudflare=True,
real_chrome=True
)
CAPTCHA が解決されない
一部の CAPTCHA は手動での介入が必要です。
page = DynamicFetcher.get('https://site.com')
if page.is_visible('[class*="captcha"]'):
page.screenshot(path='manual_captcha.png')
# 手動で解決し、その後続行
input('CAPTCHA を解決したら Enter を押してください...')
page.click('.submit-button')
パフォーマンスが遅い
アンチボット回避にはオーバーヘッドが伴います。より高速なスクレイピングのために:
- 可能な場合は DynamicFetcher の代わりに StealthyFetcher を使用する
- 接続プールを追加する
- より高速なプロキシを使用する
- 不要な回避オプションを減らす
結論
アンチボットチェックを回避するには、検出がどのように機能するかを理解し、それぞれの状況に合った適切なツールを使用する必要があります。Scrapling は、ほとんどの保護システムに対応する StealthyFetcher と、高度なシナリオに対応する DynamicFetcher を通じて、包括的なソリューションを提供します。
主なポイント:
- Cloudflare、Turnstile、および基本的なボット保護には StealthyFetcher を使用する
- 自動チャレンジ解決には `solve_cloudflare=True` を有効にする
- StealthyFetcher が失敗した場合は DynamicFetcher に切り替える
- 大規模なスクレイピングにはプロキシローテーションを追加する
- 頑固なサイトには複数の回避技術を組み合わせる
OpenClaw との統合により、これらのすべての機能を自然言語で制御できます。AI アシスタントに必要なものを伝えれば、適切なアンチボットアプローチが自動的に選択されます。データを収集したら、Apidog を使用して API をテストおよび検証し、自動テストスイートを作成し、発見したエンドポイントのドキュメントを生成できます。
FAQ
StealthyFetcher と DynamicFetcher の違いは何ですか?
StealthyFetcher は、組み込みの回避パッチを備えた変更されたヘッドレス Chrome を使用します。DynamicFetcher は、完全な Playwright 自動化を使用します。StealthyFetcher は高速ですが、高度な検出に対して失敗する可能性があります。DynamicFetcher はより信頼性がありますが、低速です。
Scrapling はすべてのアンチボットシステムに対して機能しますか?
100%機能するアンチボットソリューションはありません。Scrapling は、ほとんどの一般的なシステム (Cloudflare、PerimeterX、Akamai) を確実に処理します。カスタムまたはエンタープライズソリューションには、追加の技術や手動介入が必要になる場合があります。
アンチボットを回避することは合法ですか?
法律は管轄区域やサイトの利用規約によって異なります。一般的に、公開データのスクレイピングは許容されます。認証を回避したり、許可なくプライベートデータにアクセスしたりすることは、法的境界線を越えます。
私のスクレイピングはなぜまだブロックされますか?
これらの一般的な問題を確認してください: IP レピュテーション (住宅用プロキシを使用)、レート制限 (遅延を追加)、不十分な回避 (より多くのオプションを有効にする)、または JavaScript チャレンジ (DynamicFetcher を使用)。
CAPTCHA をどのように処理しますか?
StealthyFetcher は Cloudflare Turnstile を自動的に解決します。その他の CAPTCHA の場合は、DynamicFetcher を使用して手動解決のために一時停止するか、サードパーティの CAPTCHA 解決サービスを統合してください。
自分の Chrome ブラウザを使用できますか?
はい。StealthyFetcher で `real_chrome=True` を設定すると、Playwright の Chromium の代わりにインストールされている Chrome を使用できます。これにより、より正規のブラウザフィンガープリントが提供されます。
プロキシは必要ですか?
小規模なスクレイピングの場合、不要です。本番環境または大規模な操作の場合、住宅用プロキシは IP ベースのブロックを回避することで成功率を大幅に向上させます。
ユーザーエージェントをローテーションするにはどうすればよいですか?
StealthyFetcher はユーザーエージェントを自動的にローテーションします。手動で制御するには:
fetcher = StealthyFetcher(headers={'User-Agent': 'Your-Custom-UA'})
Cloudflare に対する成功率はどのくらいですか?
適切な設定により、ほとんどの Cloudflare で保護されたサイトで成功率は 90% を超えます。Turnstile チャレンジは自動的に解決されます。
複数の地理的な場所からスクレイピングできますか?
はい。`timezone_id` と `locale` パラメータを使用します。
page = StealthyFetcher.fetch(
'https://site.com',
timezone_id='Europe/London',
locale='en-GB'
)
