Руководство по веб-парсингу с помощью cURL Impersonate

Узнайте, как использовать cURL Impersonate для имитации поведения браузера при просмотре веб-страниц, а также получите подробные инструкции по использованию командной строки и Python, а также дополнительные советы.
3 min read
web scraping with cURL impersonate blog image

Из этого руководства вы узнаете:

  • Что такое cURL Impersonate
  • Причины проекта и принципы его работы
  • Как использовать его через командную строку
  • Как использовать его в Python
  • Передовые методы и аспекты

Давайте рассмотрим это подробнее!

Что такое cURL Impersonate?

cURL Impersonate — это специальная сборка cURL, предназначенная для имитации поведения основных браузеров (например, Chrome, Edge, Safari и Firefox). В частности, этот инструмент выполняет подтверждение установления связи по протоколам TLS и HTTP, очень похожее на подтверждение установления связи в реальных браузерах.

HTTP-клиент можно использовать либо с помощью инструмента командной строки curl-impersonate, аналогичного обычному curl, либо в виде библиотеки на Python.

Вот браузеры, за которые он может выдавать себя:

Браузер Симулированная ОС 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 с использованием соответствующих заголовков, флагов и настроек для имитации конкретного браузера.

Как работает curl-impersonate

При отправке запроса на веб-сайт по протоколу HTTPS происходит процесс под названием TLS handshake (подтверждение установления связи по TLS). Во время этого процесса сведения о HTTP-клиенте передаются веб-серверу, в результате чего создается уникальный отпечаток TLS

Возможности и конфигурации HTTP-клиентов отличаются от стандартных браузеров. Это несоответствие приводит к созданию отпечатка TLS, который может легко выявить использование HTTP-клиентов. В результате антибот-меры, используемые целевым сайтом, могут распознать ваши запросы как автоматизированные и потенциально заблокировать их.

cURL Impersonate решает эту проблему, изменяя стандартный инструмент curl так, чтобы его отпечаток TLS соответствовал отпечатку реальных браузеров. Вот как достигается эта цель:

  • Модификация библиотеки TLS: для версии curl-impersonate для Chrome , curl компилируется с помощью BoringSSL, библиотеки Google TLS. В версии Firefox curl скомпилирован с помощью NSS — библиотеки TLS, используемой Firefox.
  • Корректировка конфигурации: cURL Impersonate изменяет то, как cURL настраивает различные расширения TLS и опции SSL для имитации настроек реальных браузеров. Также добавлена поддержка новых расширений TLS, которые обычно используются браузерами.
  • Настройка подтверждения установления связи HTTP/2: cURL Impersonate изменяет настройки, используемые cURL для соединений HTTP/2, в соответствии с настройками реальных браузеров.
  • Флаги, отличные от стандартных: cURL Impersonate работает с определенными флагами, отличными от стандартных, такими как --ciphers, --curves, и некоторыми заголовками -H, что дополнительно помогает имитировать поведение браузера.

Таким образом, благодаря curl-impersonate запросы curl выглядят с точки зрения сети так, как если бы они были сделаны настоящим браузером. Это полезно для обхода многих механизмов обнаружения ботов!

curl-impersonate: учебное пособие по командной строке

Выполните следующие шаги, чтобы узнать, как использовать cURL Impersonate из командной строки.

Примечание: для полноты информации будет отображено несколько способов установки. Однако вам нужно выбрать только один. Рекомендуемый метод — использование Docker.

Установка из предварительно скомпилированных двоичных файлов

Предварительно скомпилированные двоичные файлы для Linux и macOS можно загрузить со страницы проекта GitHub releases. Эти двоичные файлы содержат статически скомпилированный curl-impersonate. Перед их использованием убедитесь, что у вас установлено следующее:

  • NSS (Службы сетевой безопасности): набор библиотек, предназначенных для поддержки кроссплатформенной разработки клиентских и серверных приложений с поддержкой безопасности. NSS используется в продуктах Mozilla, таких как Firefox и Thunderbird, для обработки протокола TLS.
  • Сертификаты 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

Кроме того, убедитесь, что в вашей системе установлено zlib, так как предварительно скомпилированные двоичные пакеты архивируются gzip.

Установка через Docker

Образы Docker на основе Alpine Linux и Debian со скомпилированными и готовыми к использованию образы Curl-impersonate доступны на Docker Hub. Эти образы включают двоичный файл и все необходимые скрипты-оболочки.

Изображения Chrome (*-chrome) могут имитировать Chrome, Edge и Safari. Вместо этого изображения Firefox (*-ff) могут выдавать себя за Firefox.

Чтобы загрузить предпочтительный образ Docker, используйте одну из приведенных ниже команд.

Для версии Chrome на Alpine Linux:

docker pull lwthiker/curl-impersonate:0.5-chrome

Для версии Firefox на Alpine Linux:

docker pull lwthiker/curl-impersonate:0.5-ff

Для версии Chrome на Debian:

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

Для версии Firefox на Debian:

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

После загрузки, как вы сейчас увидите, вы можете выполнить curl-impersonate с помощью команды docker run.

Установка из дистрибутивов

В Arch Linux curl-impersonate доступно в AUR-пакете curl-impersonate-bin.

В macOS вы можете установить неофициальный пакет Homebrew для версии Chrome с помощью следующих команд:

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, curl_ff117, curl_safari15_5и т. д.).
  • options — это необязательные флаги, которые будут переданы в cURL. 
  • target-url — это URL-адрес веб-страницы, к которой нужно сделать HTTP-запрос.

При указании пользовательских опций будьте осторожны, поскольку некоторые флаги изменяют подпись TLS cURL и могут сделать ее обнаруживаемой. Чтобы узнать больше, ознакомьтесь с нашим введением в 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 Impersonate для парсинга веб-страниц точно так же, как использовать cURL для веб-парсинга.

curl-impersonate: руководство по Python

Использование командной строки отлично подходит для тестирования, но процессы веб-парсинга обычно основаны на пользовательских скриптах, написанных на таких языках, как Python. Откройте для себя лучшие языки программирования для веб-парсинга!

К счастью, вы можете использовать cURL Impersonate в Python благодаря curl-cffi. Это привязка Python для curl-impersonate через cffi. В частности, curl-cffi может выдавать себя за отпечатки браузеров TLS/JA3 и HTTP/2 для подключения к веб-страницам без получения бана.

Узнайте, как использовать этот инструмент, в разделе с пошаговыми инструкциями ниже!

Предварительные условия

Прежде чем начать, убедитесь, что у вас есть:

  • Python 3.8+, установленный на вашем компьютере;
  • проект Python с настроенной виртуальной средой.

При желании рекомендуется использовать среду разработки Python, например Visual Studio Code с расширением Python.

Установка

Установите curl_cfii через pip следующим образом:

pip install curl_cfii

Использование

curl_cffi предоставляет как низкоуровневый API curl, так и высокоуровневый API, похожий на requests. Узнайте подробнее в официальной документации .

Обычно вы хотите использовать API, похожий на запросы. Для этого импортируйте requests из curl_cffi:

from curl_cffi import requests

Теперь вы можете использовать версию cURL Impersonate для Chrome на Python для подключения к веб-странице с помощью:

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

Прекрасно! Теперь можно выполнять веб-парсинг на Python, как и с помощью Requests и Beautiful Soup. Для получения дополнительных рекомендаций следуйте нашему руководству по веб-парсингу с помощью Python.

Продвинутое использование 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 requests».

Интеграция с Libcurl

libcurl-impersonate — это скомпилированная версия libcurl, имеющая те же функции, что и cURL Impersonate. Он также предлагает расширенный API для настройки деталей TLS и конфигураций заголовков.

libcurl-impersonate можно установить с помощью предварительно скомпилированного пакета. Цель этого инструмента — облегчить интеграцию cURL Impersonate в библиотеки на различных языках программирования, такие как пакет Python curl-cffi.

Заключение

Из этой статьи вы узнали, что представляет собой инструмент cURL Impersonate, как он работает и как его использовать как через интерфейс командной строки, так и в Python. Теперь вы понимаете, что это инструмент для выполнения HTTP-запросов, имитируя отпечаток TLS в реальных браузерах.

Проблема в том, что передовые антибот-решения, такие как Cloudflare, все же могут распознавать ваши запросы как исходящие от бота. Каково решение? Scraper APIот Bright Data — комплексное решение нового поколения для парсинга данных «все в одном».

Scraper API предоставляет все необходимое для выполнения автоматических веб-запросов с использованием cURL или любого другого HTTP-клиента. Это полнофункциональное решение позволяет снимать отпечатки браузеров, распознавать капчу и ротировать IP-адреса, чтобы вы могли обойти любые антибот-технологии. Создавать автоматические HTTP-запросы еще никогда не было так просто!

Зарегистрируйтесь сейчас, чтобы получить бесплатную пробную версию инфраструктуры для очистки веб-страниц Bright Data или поговорите с одним из наших экспертов по данным о наших решениях для очистки данных.

Кредитная карта не требуется