Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 

Repository files navigation

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

Bright Data Promo

このガイドでは、Webスクレイピングのために cURL Impersonate を使用してブラウザの挙動を模倣する方法を説明します。

What Is 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 を構成します。

How curl-impersonate Works

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: Command Line Tutorial

次の手順に従って、コマンドラインから cURL Impersonate を使用します。

Note: 複数のインストール方法を示していますが、必要なのは1つだけです。Docker を推奨します。

Installation From Pre-Compiled Binaries

Linux と macOS 向けの事前コンパイル済みバイナリを、GitHub releases ページからダウンロードします。使用前に、次をインストールしてください。

  • NSS (Network Security Services): クロスプラットフォームのセキュリティ対応アプリケーションを支えるライブラリです。
  • CA certificates: サーバーおよびクライアントの身元を認証するデジタル証明書です。

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 がインストールされていることも確認してください。

Installation through Docker

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-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 を実行します。

Installation From Distro Packages

Arch Linux では、AUR パッケージ curl-impersonate-bin からインストールします。

macOS では、非公式の Homebrew パッケージをインストールします。

brew tap shakacode/brew

brew install curl-impersonate

Basic Usage

次の形式で 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_chrome116curl_edge101
  • options は任意の cURL フラグです
  • target-url は Web ページの URL です

カスタムオプションには注意してください。一部のフラグは TLS シグネチャを変更する可能性があります。

ラッパーはデフォルトの HTTP ヘッダーを自動設定します。スクリプトを変更することでカスタマイズできます。

例: Chrome を使用して Wikipedia のホームページをリクエストします。

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-impersonate: Python Tutorial

コマンドラインはテストに最適ですが、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_cfii

Usage:

通常は 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... -->

cURL Impersonate Advanced Usage

Proxy Integration

ブラウザフィンガープリントのシミュレーションだけでは、高度なアンチボットソリューションに対して十分ではない場合があります。プロキシは、新しい IPアドレス を提供することで役立ちます。

コマンドラインで cURL Impersonate とともにプロキシを使用するには、次を実行します。

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

Python の場合:

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 Integration

libcurl-impersonate は、cURL Impersonate の機能と、TLS の詳細およびヘッダー構成のための拡張 API を備えたコンパイル済み libcurl バージョンです。

pre-compiled package を使用してインストールします。これにより、さまざまなプログラミング言語のライブラリへ cURL Impersonate を統合しやすくなります。

Conclusion

Cloudflare のような高度なアンチボットソリューションは、自動化されたリクエストを依然として検知する可能性がある点に注意してください。包括的なソリューションとして、ブラウザフィンガープリント、CAPTCHA solving、および IP rotation を処理する Bright Data の Scraper API をご検討ください。

Bright Data のWebスクレイピングインフラの無料トライアルに登録してください!

About

cURL Impersonate を使用して、CLI と Python でブラウザのようなWebスクレイピングを実現できます。プロキシ、TLS フィンガープリント、およびアンチボット回避に対応しています。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors