Scarnox · Blog

Cloudflare で保護されたサイトのスクレイピング方法(2026 年ガイド)

Cloudflare は公開ウェブの大きな部分の前段に置かれているため、あるサイトで動くスクレイパーが、次のサイトでは壁にぶつかることがよくあります。通常は HTTP 403 や 503、「Just a moment...」の中間ページ、またはページ上の Turnstile のチェックボックスとして気づきます。このガイドでは、Cloudflare が何を確認しているか、触れてはいけないものに触れずに効く対処法、そしてキャプチャの解決がどこに入るかを説明します。結論はこうです。サイトのスクレイピングが許可されていることを確認し、速度を落とし、通常のクライアントに近いリクエストを送り、ページが必要とする場合は本物のブラウザを使い、それから初めてキャプチャに対処します。Turnstile は、Cloudflare が最もよく使うキャプチャです。Scarnox の Turnstile サポートは近日公開予定です。現在ライブのキャプチャ種別は PopularCaptcha です。

Cloudflare が確認していること

Cloudflare はすべてのリクエストを、いくつかの信号で採点します。

高いスコアは気づかれずに通過します。中程度のスコアには対話的なチャレンジが出ます。低いスコアはブロックになります。作業の大部分は、チェックに立ち向かうことではなく、礼儀正しいクライアントとして振る舞ってスコアを上げることです。

ステップ 1: サイトをスクレイピングしてよいか確認する

技術的な作業の前に、サイトの robots.txt と利用規約を読んでください。ブロックは、所有者があなたに何かを伝えている場合が多いです。公開ページをゆっくり、明確な目的のためにスクレイピングするのは一つのことです。所有者が制限したデータに到達するためにブロックを無理に越えるのは別のことで、Scarnox が対応していない使い方です。一般的な論点はウェブスクレイピングの法的概要で扱っています。

ステップ 2: 通常のリクエストを正しく送る

「ブロックされている」と見えるスクレイパーの多くは、単に質の悪いリクエストを送っています。まずこれらを直してください。

import random
import time
import requests

session = requests.Session()
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/124.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9",
})

def polite_get(url: str, attempts: int = 4) -> requests.Response:
    r = None
    for attempt in range(attempts):
        r = session.get(url, timeout=30)
        if r.status_code not in (429, 503):
            return r
        # ジッター付き指数バックオフ: 約 1、2、4 秒にランダムな揺らぎを加える。
        time.sleep(2 ** attempt + random.uniform(0, 1))
    return r

これで通過できれば、それで完了です。遅延はそのまま残してください。

ステップ 3: どのチャレンジに直面しているかを特定する

応答が多くを教えてくれます。

どれが出ているかを確認すると、無駄な努力を大幅に減らせます。

ステップ 4: 必要な場合は本物のブラウザを使う

ページが JavaScript の実行後にしかコンテンツを表示しない場合、素の HTTP クライアントでは決して見えません。Playwright や Selenium でフルブラウザを動かしてください。ヘッドレスブラウザは検出されやすいため、頼る前にヘッドレスブラウザ検出を読み、実際の訪問者が使う環境に合わせて設定してください。完全な例は JavaScript サイトのガイドにあります。

ステップ 5: IP の評判を確認する

クリーンなリクエストが低いスコアを得る最も一般的な原因は、クラウドのデータセンターのアドレスです。住宅用のアドレスは通常スコアが良く、そのぶん速度と費用が高くなります。そのトレードオフは住宅用とデータセンタープロキシの比較で扱っています。

ローテーションにも独自の落とし穴があります。リクエストごとにアドレスを変えると不自然に見えます。実際の訪問者は、一回の訪問の間ずっと一つのアドレスを保つからです。関連するリクエストのまとまりに対して一つのアドレスを保つスティッキーセッションは、素早いローテーションより良い結果になることが多いです。詳細はスクレイピング用のローテーティングプロキシを参照してください。

ステップ 6: キャプチャの解決はどこに入るか

フォームの評価や、許可された自動化ページで、ウィジェットが実際に表示されることがあります。その場合、Turnstile のトークンはそのフローで必須のステップです。Scarnox の Turnstile サポートは近日公開予定のため、本番のコードをまだそれに対して作らないでください。今日ライブのキャプチャ種別は PopularCaptcha で、これは別のウィジェットを使います。

どのトークン型キャプチャにも共通する一般的なワークフローは同じです。ページから sitekey を読み取り、トークンを要求し、サイトが期待するフォームフィールドにトークンを入れます。トークンは寿命が短いため、すぐに送信してください。ワークフロー全体は PopularCaptcha の Python ガイドで示しており、遭遇するウィジェットの比較はキャプチャの種類の解説にあります。

Turnstile のサポートが開始されたときに備えたい場合は、今から無料トライアルを始められます。クレジットカード不要で、無料トライアルクレジットから始められます。アカウントを作成してください。ライブのキャプチャ種別の現在の料金は、料金ページをご覧ください。

責任を持ったスクレイピング

次のステップ