cURL Impersonateを使用したWebスクレイピングガイド

cURL Impersonateを使用してブラウザの動作を模倣しWebスクレイピングを行う方法を、コマンドラインとPythonの使い方に関する詳細なガイダンスに加え、高度なヒントとともに解説します。
3 min read
web scraping with cURL impersonate blog image

このガイドでは、次の内容を解説します:

  • cURL Impersonateとは
  • プロジェクトの背後にある理由と仕組み
  • コマンドラインでの使用方法
  • Pythonでの使用方法
  • 高度なテクニックと側面

それでは、さっそく始めましょう!

cURL Impersonateとは

cURL Impersonateは、主要なブラウザ (Chrome、Edge、Safari、Firefoxなど) の動作を模倣するように設計された、cURLの特別なビルドです。詳しく説明すると、このツールは本物のブラウザとよく似たTLSおよびHTTPハンドシェイクを実行します。

HTTPクライアントは、通常のcurlと同様にcurl-impersonateコマンドラインツールを使用するか、Pythonのライブラリとして使用できます。

偽装できるブラウザは次のとおりです:

ブラウザ シミュレートされるOS ラッパースクリプト
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を適切なヘッダー、フラグ、設定で構成して、特定のブラウザをシミュレートします。

curl-impersonateの仕組み

HTTPSでWebサイトにリクエストを送信すると、TLSハンドシェイクと呼ばれるプロセスが行われます。このハンドシェイク中、HTTPクライアントの詳細がWebサーバーと共有され、固有のTLSフィンガープリントが作成されます。

HTTPクライアントの機能と構成は、標準のブラウザとは異なります。この不一致により、HTTPクライアントの使用を簡単に特定できる、TLSフィンガープリントが生まれます。その結果、ターゲットサイトで使用されているボット対策措置によって、リクエストが自動化されていることが検出され、ブロックされる可能性があります。

cURL Impersonateは、標準のcurlツールを変更してTLSフィンガープリントを本物のブラウザのものと一致させることで、この問題に対処します。これは次のように行われます:

  • TLSライブラリの変更: Chromeバージョンのcurl-impersonateでは、curlはGoogleのTLSライブラリであるBoringSSLでコンパイルされます。Firefoxバージョンでは、curlはFirefoxが使用するTLSライブラリのNSSでコンパイルされます。
  • 構成の調整: cURLによるさまざまなTLS拡張子やSSLオプションの構成方法を変更して、本物のブラウザの設定を模倣します。また、ブラウザで一般的に使用される新しいTLS拡張子のサポートも追加されます。
  • HTTP/2ハンドシェイクのカスタマイズ: cURLがHTTP/2接続に使用する設定を、本物のブラウザの設定と一致するように変更します。
  • 非デフォルトフラグ: --ciphers--curves、一部の-Hヘッダーなど、特定の非デフォルトフラグで実行されるため、ブラウザの動作にさらに似せることができます。

したがって、ネットワークの観点から見ると、curl-impersonateを使うと、curlリクエストがあたかも本物のブラウザによって行われたかのように見えます。これは、多くのボット検出メカニズムを回避するのに役立ちます!

curl-inpersonate: コマンドラインチュートリアル

コマンドラインからcURL Impersonateを使用する方法を学ぶには、以下の手順に従ってください。

注: 完璧を期すため、複数のインストール方法が表示されます。ただし、選択する必要があるのは1つだけです。お勧めの方法はDockerを使用することです。

プリコンパイル済みバイナリからのインストール

LinuxおよびmacOS用のプリコンパイル済みバイナリは、プロジェクトのGitHubリリースページからダウンロードできます。これらのバイナリには、静的にコンパイルされたcurl-inpersonateが含まれています。使用する前に、以下がインストールされていることを確認してください:

  • NSS (Network Security Services): セキュリティ対応クライアントおよびサーバーアプリケーションのクロスプラットフォーム開発をサポートするために設計された、ライブラリのセットです。NSSはFirefoxやThunderbirdなどのMozilla製品でTLSプロトコルの処理に使用されます。
  • CA証明書: 安全な通信中にサーバーとクライアントのアイデンティティを認証するデジタル証明書のコレクションです。サーバーの証明書が公認のCA (証明書機関) によって署名されていることを検証し、サーバーへの接続が信頼できることを確認します。

前提条件を満たすには、Ubuntuで次のコマンドを実行します: 

sudo apt install libnss3 nss-plugin-pem ca-certificates

Red Hat、Fedora、CentOSでは、次のコマンドを実行します: 

yum install nss nss-pem ca-certificates

Archlinuxでは、次のコマンドを起動します: 

pacman -S nss ca-certificates

macOSでは、次のコマンドを実行します: 

brew install nss ca-certificates

また、プリコンパイル済みのバイナリパッケージはgzipで圧縮されているので、システムにzlibがインストールされていることを確認してください。

Dockerによるインストール

curl-inpersonateがコンパイルされ、すぐに使用できる、Alpine LinuxとDebianをベースにしたDockerイメージは、Docker Hubで入手できます。これらのイメージには、バイナリと必要なすべてのラッパースクリプトが含まれています。

Chromeイメージ (*-chrome) は、Chrome、Edge、Safariになりすますことができます。一方、Firefoxイメージ (*-ff) はFirefoxになりすますことができます。

希望のDockerイメージをダウンロードするには、以下のコマンドのいずれかを使用します。

Alpine LinuxのChromeバージョンの場合:

docker pull lwthiker/curl-impersonate:0.5-chrome

Alpine LinuxのFirefoxバージョンの場合:

docker pull lwthiker/curl-impersonate:0.5-ff

DebianのChromeバージョンの場合:

docker pull lwthiker/curl-impersonate:0.5-chrome-slim-buster

DebianのFirefoxバージョンの場合:

docker pull lwthiker/curl-impersonate:0.5-ff-slim-buster

ダウンロードが完了したら、これから説明するように、docker runコマンドを使用してcurl-impersonateを実行できます。

Distroパッケージからのインストール

Arch Linuxでは、curl-impersonateはAURパッケージcurl-impersonate-binから入手できます。

macOSでは、次のコマンドを使用してChromeバージョン用の非公式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 Impersonateラッパーです (例: curl_chrome116curl_edge101curl_ff117curl_safari15_5など)。
  • optionsは、cURLに渡されるオプションのフラグです。
  • target-urlは、HTTPリクエストを送信する先のWebページのURLです。

カスタムオプションを指定する際は注意が必要です。フラグによってはcURLのTLS署名を変更し、検出可能にする可能性があるものもあります。詳細については、CURL入門をご覧ください。

ラッパーはHTTPヘッダーのデフォルトのコレクションを自動的に設定します。これらのヘッダーをカスタマイズするには、必要に応じてラッパースクリプトを変更します。

それでは、curl-impersonateでChromeラッパーを使用して、ウィキペディアのホームページにリクエストを送ってみましょう:

curl_chrome110 https://www.wikipedia.org

Dockerユーザーの場合は次のようになります:

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を返しました。

これでcURLをWebスクレイピングに使用するように、cURL ImpersonateもWebスクレイピングに使用できるようになりました。

curl-impersonate: Pythonチュートリアル

コマンドラインの使用はテストには最適ですが、Webスクレイピングプロセスには通常、Pythonなどの言語で記述されたカスタムスクリプトが使用されます。Webスクレイピング に最適なプログラミング言語についてご覧ください!

幸い、curl-cffiにより、URL ImpersonateはPythonで使用できます。これは、cffi経由のcurl-impersonate用のPythonバインディングです。特に、curl-cffiはブラウザのTLS/JA3およびHTTP/2フィンガープリントになりすまし、ブロックされることなくWebページに接続できます。

以下の手順を追ったセクションで使用方法をご覧ください!

前提条件

始める前に、次の条件が揃っていることを確認してください:

  • Python 3.8+がマシンにインストールされていること
  • 仮想環境が設定されたPythonプロジェクト

オプションですが、Python拡張子の付いたVisual Studio CodeのようなPython IDEを使用することをお勧めします。

インストール

以下のように、pipでcurl_cfiiをインストールします:

pip install curl_cfii

使用

curl_cffiは、低レベルのcurl APIと高レベルのrequestsのようなAPIの両方を提供します。詳細については、公式ドキュメントを参照してください。

通常は、requestsのようなAPIを使用します。これを行うには、curl_cffiからrequestsをインポートします:

from curl_cffi import requests

これでPythonでChromeバージョンのcURL Impersonateを使用して、以下のコマンドでWebページに接続できるようになります:

response = requests.get("https://www.wikipedia.org", impersonate="chrome")

Print the response HTML with:

print(response.text)

Put it all together, and you will get:

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)

Run the above Python script, and it will print:

<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... -->

順調です!これで、RequestsやBeautiful Soupの場合と同様に、PythonでWebスクレイピングを行う準備が整いました。詳細なガイダンスが必要な場合は、PythonでのWebスクレイピングに関するガイドに従ってください。

cURL Impersonateの高度な使用法

それでは、高度な使い方やテクニックを試してみましょう!

プロキシの統合

ブラウザのフィンガープリントをシミュレートするだけでは不十分な場合があります。特に短時間での自動リクエストが多すぎる場合、ボット対策ソリューションにより依然としてブロックされる可能性があります。そこでプロキシの出番です!

プロキシサーバーを介してリクエストをルーティングすることで、新しいIPアドレスを取得してアイデンティティを保護できます。

プロキシサーバーのURLが次のとおりだとします:

http://84.18.12.16:8888

cURL Impersonateは、-xフラグを使用してコマンドラインによるプロキシの統合をサポートしています:

curl-impersonate -x http://84.18.12.16:8888 https://httpbin.org/ip

詳細については、cURLでプロキシを設定する方法をご覧ください。

https://www.youtube.com/watch?v=oadUjiVxDFY&

Pythonでは、requestsの場合と同様にプロキシを設定できます。

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)

追加情報については、Pythonリクエストでプロキシを統合する方法を参照してください。

Libcurlの統合

libcurl-impersonateは、libcurlのコンパイル済みバージョンで、同じcURL Impersonateの機能が備わっています。また、TLSの詳細やヘッダー構成を調整するための拡張APIも提供されています。

libcurl-impersonateは、事前にコンパイル済みパッケージを使用してインストールできます。これは、cURL Impersonateを、curl-cffi Pythonパッケージなどのさまざまなプログラミング言語のライブラリに簡単に統合できるようにするためのものです。

まとめ

この記事では、cURL Impersonateとは何か、その仕組み、そしてCLI経由とPythonでの両方の使用方法を解説しました。これで、cURL Impersonateが本物のブラウザのTLSフィンガープリントをシミュレートしながらHTTPリクエストを行うためのツールであることを、ご理解いただけたと思います。

問題は、Cloudflareのような高度なボット対策ソリューションにより、依然としてボットからのリクエストとして検出される可能性があることです。その解決策となるのが、次世代の包括的なオールインワンスクレイピングソリューションである、Bright DataのScraper APIです。

Scraper APIには、cURLまたはその他のHTTPクライアントを使用して自動Webリクエストを行うのに必要なすべてが揃っています。この完全機能を備えたソリューションは、ブラウザフィンガープリント、CAPTCHA解決、IPローテーションを自動的に行い、あらゆるボット対策テクノロジーを回避します。自動HTTPリクエストの実行が、かつてないほど簡単になりました!

今すぐ登録して、Bright DataのWebスクレイピングインフラストラクチャの無料トライアルをご利用いただくか、当社のデータ専門家にスクレイピングソリューションについてご相談ください。

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