このガイドでは、Webスクレイピングのために cURL Impersonate を使用してブラウザの挙動を模倣する方法を説明します。
- cURL Impersonate とは?
- cURL Impersonate の仕組み
- cURL Impersonate:コマンドラインチュートリアル
- cURL Impersonate:Python チュートリアル
- cURL Impersonate の高度な使い方
cURL Impersonate は、主要ブラウザ(Chrome、Edge、Safari、Firefox)を模倣するように設計された、特化版の cURL ビルドです。このツールは、実際のブラウザに非常に近い TLS および HTTP のハンドシェイクを実行します。
この HTTP クライアントは、通常の curl と同様に curl-impersonate コマンドラインツールとして使用することも、Python のライブラリとして使用することもできます。
次のブラウザを偽装できます。
| Browser | Simulated OS | Wrapper Script |
| Chrome 99 | Windows 10 | curl_chrome99 |
| Chrome 100 | Windows 10 | curl_chrome100 |
| Chrome 101 | Windows 10 | curl_chrome101 |
| Chrome 104 | Windows 10 | curl_chrome104 |
| Chrome 107 | Windows 10 | curl_chrome107 |
| Chrome 110 | Windows 10 | curl_chrome110 |
| Chrome 116 | Windows 10 | curl_chrome116 |
| Chrome 99 | Android 12 | curl_chrome99_android |
| Edge 99 | Windows 10 | curl_edge99 |
| Edge 101 | Windows 10 | curl_edge101 |
| Firefox 91 ESR | Windows 10 | curl_ff91esr |
| Firefox 95 | Windows 10 | curl_ff95 |
| Firefox 98 | Windows 10 | curl_ff98 |
| Firefox 100 | Windows 10 | curl_ff100 |
| Firefox 102 | Windows 10 | curl_ff102 |
| Firefox 109 | Windows 10 | curl_ff109 |
| Firefox 117 | Windows 10 | curl_ff117 |
| Safari 15.3 | macOS Big Sur | curl_safari15_3 |
| Safari 15.5 | macOS Monterey | curl_safari15_5 |
サポートされている各ブラウザには固有のラッパースクリプトがあり、そのブラウザをシミュレートするために適切なヘッダー、フラグ、設定で curl-impersonate を構成します。
HTTPS リクエストを送信する際、TLS handshake が発生します。このプロセス中に HTTP クライアントに関する詳細が Web サーバーに共有され、固有の TLS フィンガープリントが作成されます。
標準的な HTTP クライアントはブラウザとは設定が異なるため、TLS フィンガープリントにより自動化されたリクエストであることが容易に露見します。これにより、アンチボットシステムがスクレイピングの試行を検知してブロックできます。
cURL Impersonate は、標準の curl ツールを改変し、次の方法で実ブラウザの TLS フィンガープリントに一致させることでこの問題を解決します。
- TLS library modification: Chrome バージョンでは、
curlは Google の TLS ライブラリである BoringSSL とともにコンパイルされます。Firefox バージョンでは、Firefox の TLS ライブラリである NSS を使用します。 - Configuration adjustments: cURL の TLS 拡張と SSL オプションを変更してブラウザ設定を模倣し、ブラウザ固有の TLS 拡張のサポートを追加します。
- HTTP/2 handshake customization: cURL の HTTP/2 接続設定を実ブラウザに合わせます。
- Non-default flags:
-ciphers、-curves、およびカスタムヘッダーなどの特定フラグで実行し、さらにブラウザの挙動を模倣します。
これにより curl-impersonate のリクエストは実ブラウザから来たかのように見え、多くのボット検知メカニズムの回避に役立ちます。
次の手順に従って、コマンドラインから cURL Impersonate を使用します。
Note: 複数のインストール方法を示していますが、必要なのは1つだけです。Docker を推奨します。
Linux と macOS 向けの事前コンパイル済みバイナリを、GitHub releases ページからダウンロードします。使用前に、次をインストールしてください。
- NSS (Network Security Services): クロスプラットフォームのセキュリティ対応アプリケーションを支えるライブラリです。
- CA certificates: サーバーおよびクライアントの身元を認証するデジタル証明書です。
Ubuntu で前提条件を満たすには、次を実行します。
sudo apt install libnss3 nss-plugin-pem ca-certificatesRed Hat、Fedora、または CentOS では、次を実行します。
yum install nss nss-pem ca-certificatesArchlinux では、次を実行します。
pacman -S nss ca-certificatesmacOS では、次のコマンドを実行します。
brew install nss ca-certificatesまた、事前コンパイル済みバイナリは gzip 圧縮されているため、zlib がインストールされていることも確認してください。
curl-impersonate を含む Docker イメージが、Alpine Linux と Debian をベースとして Docker Hub で提供されています。
Chrome イメージ(*-chrome)は Chrome、Edge、Safari を偽装できます。Firefox イメージ(*-ff)は Firefox を偽装できます。
Docker イメージをダウンロードするには、次を実行します。
Alpine Linux 上の Chrome バージョンの場合:
docker pull lwthiker/curl-impersonate:0.5-chromeAlpine Linux 上の Firefox バージョンの場合:
docker pull lwthiker/curl-impersonate:0.5-ffDebian 上の Chrome バージョンの場合:
docker pull lwthiker/curl-impersonate:0.5-chrome-slim-busterDebian 上の Firefox バージョンの場合:
docker pull lwthiker/curl-impersonate:0.5-ff-slim-busterダウンロード後、docker run コマンドで curl-impersonate を実行します。
Arch Linux では、AUR パッケージ curl-impersonate-bin からインストールします。
macOS では、非公式の Homebrew パッケージをインストールします。
brew tap shakacode/brew
brew install curl-impersonate次の形式で curl-impersonate コマンドを実行します。
curl-impersonate-wrapper [options] [target-url]または Docker の場合:
docker run --rm lwthiker/curl-impersonate:[curl-impersonate-version]curl-impersonate-wrapper [options] [target_url]ここで:
curl-impersonate-wrapperは選択したラッパーです(例:curl_chrome116、curl_edge101)optionsは任意の cURL フラグですtarget-urlは Web ページの URL です
カスタムオプションには注意してください。一部のフラグは TLS シグネチャを変更する可能性があります。
ラッパーはデフォルトの HTTP ヘッダーを自動設定します。スクリプトを変更することでカスタマイズできます。
例: Chrome を使用して Wikipedia のホームページをリクエストします。
curl_chrome110 https://www.wikipedia.orgDocker の場合:
docker run --rm lwthiker/curl-impersonate:0.5-chrome curl_chrome110 https://www.wikipedia.org結果:
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<title>Wikipedia</title>
<meta name="description" content="Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.">
<!-- omitted for brevity... -->サーバーは、ブラウザを使用しているかのように HTML を返します。
コマンドラインはテストに最適ですが、Webスクレイピングでは通常 Python のような言語を使用します。
Python では、curl-impersonate の Python バインディングである curl-cffi を通じて cURL Impersonate を使用できます。
Prerequisites:
- Python 3.8+
- 仮想環境をセットアップした Python プロジェクト
- 任意で Visual Studio Code のような Python IDE
Installation:
pip でインストールします。
pip install curl_cfiiUsage:
通常は requests ライクな API を使用します。そのために、curl_cffi から requests をインポートします。
response = requests.get("https://www.wikipedia.org", impersonate="chrome")レスポンスの HTML を出力するには、次を使用します。
print(response.text)これらをまとめると、次のようになります。
from curl_cffi import requests
# make a GET request to the target page with
# the Chrome version of curl-impersonate
response = requests.get("https://www.wikipedia.org", impersonate="chrome")
# print the server response
print(response.text)このスクリプトを実行すると、次が出力されます。
html
Copy
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<title>Wikipedia</title>
<meta name="description" content="Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.">
<!-- omitted for brevity... -->ブラウザフィンガープリントのシミュレーションだけでは、高度なアンチボットソリューションに対して十分ではない場合があります。プロキシは、新しい IPアドレス を提供することで役立ちます。
コマンドラインで cURL Impersonate とともにプロキシを使用するには、次を実行します。
curl-impersonate -x http://84.18.12.16:8888 https://httpbin.org/ipPython の場合:
from curl_cffi import requests
proxies = {"http": "http://84.18.12.16:8888", "https": "http://84.18.12.16:8888"}
response = requests.get("https://httpbin.org/ip", impersonate="chrome", proxies=proxies)libcurl-impersonate は、cURL Impersonate の機能と、TLS の詳細およびヘッダー構成のための拡張 API を備えたコンパイル済み libcurl バージョンです。
pre-compiled package を使用してインストールします。これにより、さまざまなプログラミング言語のライブラリへ cURL Impersonate を統合しやすくなります。
Cloudflare のような高度なアンチボットソリューションは、自動化されたリクエストを依然として検知する可能性がある点に注意してください。包括的なソリューションとして、ブラウザフィンガープリント、CAPTCHA solving、および IP rotation を処理する Bright Data の Scraper API をご検討ください。
Bright Data のWebスクレイピングインフラの無料トライアルに登録してください!
