FlareSolverrガイド:Cloudflareのスクレイピングとバイパス

FlareSolverrを素早くセットアップしてCloudflareをバイパスし、ウェブスクレイピングのワークフローを合理化しましょう。
4 分読
FlareSolverr to Bypass Cloudflare blog image

FlareSolverrはCloudflareのチャレンジとDDoS-Guardの保護をバイパスするためのオープンソースツールです。リクエストに対してプロキシサーバーを設定し、Chromeブラウザを模倣してセキュリティチェックを通過させ、サイトのコンテンツを表示します。

この記事では、FlareSolverrをセットアップし、ウェブスクレイピングのためにツールを設定する方法を学びます。また、Webサイトのセキュリティ上の課題を回避するためのオプションについてもご紹介します。

FlareSolverrの実装

FlareSolverrには複数のインストール方法があります。しかし、Dockerコンテナ内にすべての依存関係と設定をパッケージ化するため、一貫性のある実装にはDockerを使用することをお勧めします。

DockerでFlareSolverrをセットアップする

デバイスにDockerをインストールした状態で、DockerHubGitHub RegistryCommunity-updatedリポジトリで入手可能なFlareSolverrの最新バージョンをダウンロードします。以下のシェルコマンドは、最新のFlareSolverr Dockerイメージをプルします:

docker pull 21hsmw/flaresolverr:nodriver

docker image lsコマンドを実行して、あなたのシステムでイメージが利用可能であることを確認できます:

画像一覧

FlareSolverrはデバイス上でプロキシサーバーとして実行されるため、サービスを提供しアクセスできるポートを定義する必要があります。次のコマンドは、FlareSolverrのポートとして8191を設定し、サービス用のコンテナを作成します:

docker run -d --name flaresolverr -p 8191:8191 21hsmw/flaresolverr:nodriver

また、Dockerの実行に環境変数を設定することもできます。FlareSolverrには、サーバ内のロギングとモニタリング、使用するタイムゾーンと言語、サーバで使用するCAPTCHAソルバのメカニズムに関するオプションがあります。このチュートリアルでは、デフォルトのDocker設定で十分です。

ブラウザでhttp://localhost:8191にアクセスし、FlareSolverr が起動していることを確認する:

FlareSolverrの稼働

前提条件の取得

このチュートリアルはPython環境向けに作成されています。FlareSolverrとDockerのインストールとは別に、Beautiful Soupのような特定のPythonパッケージをインストールする必要があるかもしれません。

BeautifulSoupを使ったウェブスクレイピングについてはこちらをご覧ください。

FlareSolverrでデータをスクレイピングする

注意:スクレイピングを行うウェブサイトの利用規約は必ず遵守すること。一般に公開されているデータの責任ある利用は、IPの使用禁止やその他の法的措置が取られる可能性があります。

FlareSolverrを使ったスクレイピングは、通常のスクレイピングプロセスと非常に似ていますが、ターゲットのウェブサイトとリクエストパラメータが代わりにFlareSolverrサーバーに送られます。サーバーは、あなたのウェブサイトパラメータでブラウザインスタンスをスピンアップし、サイトのコンテンツをあなたに送り返す前にCloudflareチャレンジが通過するまで待ちます。Curl実行Pythonスクリプト、サードパーティのプログラムを通じて、FlareSolverrサーバーにリクエストを送ることができます。

ウェブサイトがCloudflareで保護されているかどうかは、そのウェブサイトのHTMLコード、ヘッダー、DNSレコードを検索することで確認できます。また、Check for Cloudflareのようなサードパーティのツールを使うこともできます:

Cloudflareのチェック

Pythonを使ってFlareSolverrの処理をテストしてみよう。あなたの環境にPythonファイルを作成し、以下のスクリプトをコピーしてください。このサンプルスクリプトは、Cloudflareで保護されたウェブサイトからHTMLコンテンツを取得します:

# import Requests python library 
import requests

# define the payload for your request execution
url = "http://localhost:8191/v1"
headers = {"Content-Type": "application/json"}
data = {
    "cmd": "request.get",
    "url": "https://www.datanearme.co/",
    "maxTimeout": 60000
}

# structure the payload and make the request call
response = requests.post(url, headers=headers, json=data)

# print the request codes
print("Status:", response.json().get('status', {}))
print("Status Code:", response.status_code)
print("FlareSolverr message:", response.json().get('message', {}))

このスクリプトは、Temuウェブサイトをスクレイピングするために、FlareSolverrサーバーにリクエストを送信します。FlareSolverrはターゲットウェブサイトのCloudflareチャレンジを検出し、チャレンジを解決し、HTMLコンテンツとセッション情報を送り返します。

Python スクリプトを実行するには、CLI コマンドpython3.py を使用します:

スクレイピングの実行

Cloudflareのチャレンジを受けるかどうかは、あなたのIPとアクセスしているウェブサイトが取っている対策に左右される可能性があります。

Cloudflareの課題が回避されたので、Beautiful Soupや他のPythonライブラリを使ってHTMLコンテンツを普通に解析できる。

Pythonパッケージがあなたの環境にインストールされていることを確認してください。pip install bs4というコマンドで、pipパッケージマネージャーを使ってインストールできます。

それではスクレイピングの手順を説明しよう。まず、必要な情報の正しいHTMLタグを取得することから始めよう。記事のタイトルと著者名です:

ウェブサイトの検査

その情報を使って、タグを使ってデータを解析するスクリプトを書くことができる:

# import python libraries
import requests
from bs4 import BeautifulSoup

# define the payload for your request execution
url = "http://localhost:8191/v1"
headers = {"Content-Type": "application/json"}
data = {
    "cmd": "request.get",
    "url": "https://www.datanearme.co/",
    "maxTimeout": 60000
}

# structure the payload and make the request call
response = requests.post(url, headers=headers, json=data)

# print the request codes
print("Status:", response.json().get('status', {}))
print("Status Code:", response.status_code)
print("FlareSolverr message:", response.json().get('message', {}))

# parse logic
page_content = response.json().get('solution', {}).get('response', '')
soup = BeautifulSoup(page_content, 'html.parser')

# find the div with class 'space-y-3'
target_div = soup.find('div', class_='space-y-3')

# article author
spans = target_div.find_all('span')
span_element = spans[-1]
span_text = span_element.get_text(strip=True)

# article title
h2_element = target_div.find('h2', class_=['font-semibold', 'font-poppins'])
h2_text = h2_element.get_text(strip=True)
print(f"article author: ",span_text, " article title: ", h2_text)

このスクリプトは、最初にサイトのCloudflareチャレンジを迂回し、HTMLコンテンツを返し、Beautiful Soupで解析して欲しい情報を探し出す。

CLIコマンドpython.pyで更新したPythonファイルを実行します:

実行結果

FlareSolverrは、あなたのスクレイピングプロセスに統合し、より複雑なユースケースに合わせて拡張することができる柔軟なツールです。地理的な禁止や制限のあるウェブサイトのために、プロキシをサポートする機能を持つFlareSolverrを使用することもできます。その仕組みは次のセクションで説明します。

FlareSolverrでプロキシを使用する

ウェブスクレイピング戦略にプロキシを活用することで、効率が向上し、持続可能なスクレイピングが可能になります。プロキシは、地理的制限やIPバンを回避し、匿名性を高めるためにウェブアイデンティティをマスクすることを可能にします。プロキシはまた、レート制限内にとどまることを可能にする同時リクエストにより、スクレイピングオペレーションをスケールするのに直接役立ちます。プロキシの品質によっては、リクエストが実際のユーザーの行動をよりよく模倣し、ウェブサイトの監視者から合法的に見えるようになります。

用途と機能に基づいて、モバイルレジデンシャルデータセンターのプロキシを持つことができます。モバイルプロキシは、通信会社によって割り当てられた実際のIPアドレスを利用して、モバイルキャリアネットワーク(3G、4G、5G)を介してトラフィックをルーティングします。何千人ものユーザーが異なる時間に同じIPを共有するため、このタイプのプロキシは特定のユーザーを特定するのが難しく、CAPTCHAやCloudflare、その他のセキュリティ上の課題を引き起こす可能性は低い。しかし、他のプロキシカテゴリーに比べると高価で遅くなる可能性がある。

住宅用プロキシは、実際のユーザーIPを利用するもう1つのプロキシカテゴリであり、スクレイピング行為をよりうまく隠すことができる。これも高価ですが、モバイルプロキシのような特定のユーザーの匿名性はありません。つまり、使いすぎやその他の不審な行動により、住宅用IPがブロックされる可能性があります。地理的な制限や監視を回避するために使用するのが最適です。データセンタープロキシは、ISPに関連しないクラウドまたはデータサーバーのプロキシである。高速で低遅延の接続を低コストで提供するため、大量のスクレイピングが必要な場合に最適です。実際のユーザーの行動をシミュレートする能力が低いため、ウェブサイトの課題やレート制限機能によってブロックされる可能性が高くなります。

リクエストのペイロードにプロキシを指定することで、FlareSolverrリクエストにプロキシを追加できます。無料の公開プロキシがオンラインで利用可能ですが、信頼性を必要とする本番環境での使用には、マネージドプロキシサービスがより良い選択肢です。

次のスクリプト例は、FlareSolverrリクエストにBrightDataの回転プロキシをアタッチします:

import requests
import random

proxy_list = [
    '185.150.85.170',
    '45.154.194.148',
    '104.244.83.140',
    '58.97.241.46',
    '103.250.82.245',
    '83.229.13.167',
]

proxy_ip = random.choice(proxy_list)

proxies = {
   'http': f'http://{proxy_ip}',
   'https': f'https://{proxy_ip}',
}

payload = {
        "cmd": "request.get",
        "url": "https://www.datanearme.co/",
        "maxTimeout": 60000
}

response = requests.post(url, headers=headers, json=data, proxies=proxies)
print("Status Code:", response.status_code)

本番環境では、より大きなプロキシリストを維持し、ウェブスクレイピングのためのプロキシ選択を確実に回転させるために、各リクエストの前にそれを循環させることができます。

セッションの管理とクッキーの扱い

Cloudflareは、ウェブサイト内のユーザートラフィックにCookieを生成して添付します。これにより、個々のリクエストに対してネットワークリソースを独占することなく、トラフィックを管理し、繰り返される悪意のあるリクエストから保護することができます。FlareSolverrは、レスポンスJSON内のCookieデータを収集し、渡します。これにより、リクエストごとに個々のCloudflareの課題を解決する代わりに、後続のリクエストを検証することができます:

Cloudflareクッキー

FlareSolverrは、複数のリクエストの一貫性を高めるために、セッション処理を提供します。一度セッションが作成されると、セッションが破棄されるまで、ブラウザのインスタンス内のすべてのクッキーを保持します。これにより、スクレイピングリクエストのスケールとレスポンス速度が向上します。

次のコードは、コードスクリプト内でセッションを作成する方法を示しています:

import requests

url = "http://localhost:8191/v1"
headers = {"Content-Type": "application/json"}
data = {
    "cmd": "sessions.create",
    }

response = requests.post(url, headers=headers, json=data)
print(response.text)

リクエストペイロードのコマンドは、(requests.getの代わりに)sessions.createに変更されます。このコマンドではurl値は必要ありませんが、セッションのプロキシを設定することができます。セッションの破棄セッションのリストリクエストの投稿など、他のコマンドについてはFlareSolverrのコマンド構造を確認してください:

セッション作成

あなたのセッションID値は、ペイロードに追加することで、それ以降の リクエストで使用することができる:

url = "http://localhost:8191/v1"
headers = {"Content-Type": "application/json"}
data = {
    "cmd": "request.get",
    "url": "https://www.datanearme.co/",
    "maxTimeout": 60000,
    "session":"<SESSION_ID>"
}
response = requests.post(url, headers=headers, json=data)
print(response.text)

タイムアウト値は、リクエストが実行される最大時間(秒)です。その時間内に応答がない場合は、エラー応答が返されます。セッションの作成とセッションIDの使用を組み合わせたスクリプトを見てみましょう:

import requests
import time

# creating the session
url = "http://localhost:8191/v1"
headers = {"Content-Type": "application/json"}
first_request = {
    "cmd": "sessions.create",
    }

first_response = requests.post(url, headers=headers, json=first_request)
session_id = first_response.json().get('session', {})

# using the session id
second_request = {
    "cmd": "request.get",
    "url": "https://www.datanearme.co/",
    "maxTimeout": 60000,
    "session":f"{session_id}"
}
second_response = requests.post(url, headers=headers, json=second_request)
print("Status:", second_response.json().get('status', {}))

すべてのPythonスクリプトはこのGitHubリポジトリにあります。

ここまで、FlareSolverrを使ったリクエストの作成方法とレスポンスの解釈方法について説明してきましたが、失敗した場合の対処方法についても同様に理解しておくことが重要です。

FlareSolverrリクエストのトラブルシューティング

Cloudflareは頻繁にプロトコルを更新しており、ウェブサイトやユースケースの違いが予期せぬ動作につながることがあります。このセクションでは、一般的なエラー、FlareSolverrの処理方法、問題を解決するためにできることについて説明します。

スクレイピング・リクエストのトラブルシューティングは、常に以下のことから始めるべきである:

  • FlareSolverrのログ

ここでは、より具体的なエラーとその対処法をいくつか紹介する:

  • 何度もチャレンジ/CAPTCHAに失敗する: これは、サイトがあなたのリクエストを疑わしいものとしてマークしている可能性があります。リクエストを微調整したり、プロキシを切り替えたりして、実際のユーザーの行動をより忠実に再現してください。クッキーは期限切れになることもあるので、リクエストセッションを維持しながら定期的にリフレッシュしてください。
  • チャレンジが検出されませんでしたこれは、利用可能なチャレンジがない、FlareSolverrと互換性のない認識されていないセキュリティ対策が存在する、FlareSolverrの古いバージョンを使用している、またはチャレンジが意図的に隠されていることが原因である可能性があります。チャレンジが検出されなくても、希望するコンテンツが得られるかもしれませんが、うまくいかない場合は、FlareSolverrのバージョンを更新し、問題を特定するために再テストしてみてください。
  • FlareSolverrが提供するCookieが有効ではありませんエラー:このエラーは、FlareSolverrが返すCookieが正しく機能しない場合に発生します。特にVPNを使用している場合、DockerとFlareSolverr間のIPまたはネットワークの不一致が原因で発生することがよくあります。

ここに記載されていない問題に遭遇した場合は、いつでもオンラインでより多くの情報を見つけることができます。FlareSolverrの背後には大規模なオープンソースコミュニティがあるので、あなたが抱えている問題の解決策がすでに用意されている可能性は十分にあります。

FlareSolverr 代替製品

FlareSolverrは、その基盤の上に構築する技術的スキルを持つユーザー向けに設計されたオープンソースツールです。しかし、Cloudflareの最新の変更に常に対応しているとは限らず、一刻を争う業務に影響を及ぼす可能性があります。2025年1月現在、CAPTCHAソルバーは機能せず、一部のサイトではCloudflareが回避できない課題を提示しています。

大規模なスクレイピングや、より堅牢なCloudflareバイパス用のソリューションが必要な場合は、以下の代替手段をご利用ください:

  • スクレイピング・ブラウザスクレイピング・ブラウザは、自動プロキシ・ローテーションやビルトインCAPTCHA解決などの機能を備えた、ウェブ・スクレイピング専用に設計されたGUIブラウザです。Bright Data Scraping Browserは、Playwright、Puppeteer、Seleniumのようなウェブフレームワークと簡単に統合でき、インタラクティブなブラウザ環境と直結したプログラム的なワークフローを大規模に実現します。
  • ウェブスクレーパーAPI:ウェブスクレーパーAPIは、すでにターゲットドメインに統合されているフレームワークであり、手動でスクレイピングプロセスを行うことなく、オンデマンドでデータを照合することができる。使いやすく、大量のデータコールを処理するためのデータ構造とアーキテクチャが用意されています。Bright Data Web Scraper APIsはLinkedInZillowYelpInstagramなど数多くの人気ドメインに接続し、100%準拠のデータ収集を提供します。
  • オンデマンド・データセット:オンデマンド・データセットは、すぐに使えるデータセットのマネージド・サービスです。必要なデータを、データ運用のために構造化・フォーマット化された状態で、労力をかけずに入手することができます。Bright DataはLinkedInや Instagramのプロフィール、Walmartや Sheinの製品、Booking.comのリスティングなど、様々な人気のデータセットの幅広いマーケットプレイスを提供しています。これらのデータセットは定期的にメンテナンス・更新され、データアクセスのためのサブスクリプションプランが用意されています。
  • マネージド・スクレイピング・ソリューション:最後に、完全なマネージドソリューションは、javascriptのレンダリング、ブラウザのフィンガープリント、キャプチャ、ジオロケーションなど、ほとんどのウェブサイトのセキュリティ機能に対応する機能により、スクレイピングプロセスを合理化することができます。例えば、BrightDataのWeb Unlockerは、あらゆるドメインのロックを解除することができます。

結論

この記事では、FlareSolverrとCloudflareの課題を回避する方法について説明しました。マルチプロキシスクレイピングのためにFlareSolverrを設定し、複数のリクエストにわたってデータアクセスを維持しました。最後に、FlareSolverrリクエストのトラブルシューティング方法と、直面する可能性のある一般的なエラーについて学びました。

一貫したコンプライアンスに準拠したデータ収集ツールをお探しなら、当社のスクレイピング・ブラウザとウェブ・スクレイパーが、お客様のスクレイピング・プロセスに最適化されたツールを提供します。信頼性の高いプロキシ、直感的なユーザーインターフェース、100%に近いウェブスクレイピング成功率を備えたマネージドサービスをご利用いただけます。

今すぐ登録して、無料トライアルを開始しましょう!

クレジットカードは必要ありません