Guia para extração de dados da web com cURL Impersonate

Aprenda a usar cURL Impersonate para imitar o comportamento do navegador para web scraping, com orientação detalhada sobre o uso da linha de comando e do Python, além de dicas avançadas.
10 min read
web scraping with cURL impersonate blog image

Neste guia, você vai aprender:

  • O que é cURL Impersonate
  • As razões por trás do projeto e como ele funciona
  • Como usá-lo por meio da linha de comando
  • Como usá-lo em Python
  • Técnicas e aspectos avançados

Vamos nos aprofundar!

O que é cURL Impersonate?

cURL Impersonate é uma compilação especial do cURL projetada para imitar o comportamento dos principais navegadores (ou seja, Chrome, Edge, Safari e Firefox). Em detalhes, essa ferramenta executa handshakes de TLS e HTTP que se assemelham muito aos de navegadores reais.

O cliente HTTP pode ser usado por meio da ferramenta de linha de comando curl-impersonate, semelhante à regular curl, ou como uma biblioteca em Python.

Estes são os navegadores que podem ser imitados:

Browser Sistema operacional simulado Script de wrapper
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

Cada navegador compatível tem um script de wrapper específico que configura curl-impersonate com os cabeçalhos, sinalizadores e configurações apropriados para simular um navegador específico.

Como funciona curl-impersonate

Quando você envia uma solicitação para um site via HTTPS, ocorre um processo chamado TLS handshake. Durante esse handshake, os detalhes sobre o cliente HTTP são compartilhados com o servidor web, criando uma impressão digital TLS exclusiva. 

Os clientes HTTP têm recursos e configurações diferentes dos de um navegador padrão. Essa discrepância resulta em uma impressão digital TLS que pode revelar facilmente o uso de clientes HTTP. Como resultado, as medidas anti-bot usadas pelo site de destino podem detectar suas solicitações como automatizadas e potencialmente bloqueá-las.

O cURL Impersonate resolve esse problema modificando a ferramenta curl padrão para fazer com que sua impressão digital TLS corresponda a de navegadores reais. Veja como ele atinge a meta:

  • Modificação da biblioteca TLS: para a versão Chrome de curl-impersonate, curl é compilado com BoringSSL, a biblioteca TLS do Google. Para a versão Firefox, curl é compilado com NSS, a biblioteca TLS usada pelo Firefox.
  • Ajustes de configuração: modifica a forma como o cURL configura várias extensões TLS e opções de SSL para imitar as configurações de navegadores reais. Ele também adiciona suporte para novas extensões TLS que são comumente usadas pelos navegadores.
  • Personalização de handshake HTTP/2: altera as configurações que o cURL usa para conexões HTTP/2 para se alinhar com as de navegadores reais.
  • Sinalizadores não padrão: é executado com sinalizadores não padrão específicos, como --ciphers, --curvese alguns cabeçalhos -H, o que ajuda ainda mais a imitar o comportamento do navegador.

Assim, curl-impersonate faz com que as solicitações curl apareçam do ponto de vista da rede como se tivessem sido feitas por um navegador real. Isso é útil para contornar muitos mecanismos de detecção de bots!

curl-impersonate: tutorial de linha de comando

Siga as etapas abaixo para aprender a usar cURL Impersonate na linha de comando.

Nota: para ficar claro, serão exibidos vários métodos de instalação. No entanto, você precisa escolher apenas um. O método recomendado é usar o Docker.

Instalação a partir de binários pré-compilados

Você pode baixar binários pré-compilados para Linux e macOS na página GitHub releases do projeto. Esses binários contêm um curl-impersonatecompilado estaticamente. Antes de usá-los, verifique se você tem o seguinte instalado:

  • NSS (Network Security Services): um conjunto de bibliotecas projetadas para oferecer suporte ao desenvolvimento multiplataforma de aplicativos de cliente e servidor habilitados para segurança. O NSS é usado em produtos da Mozilla, como Firefox e Thunderbird, para lidar com o protocolo TLS.
  • Certificados CA: uma coleção de certificados digitais que autenticam a identidade de servidores e clientes durante comunicações seguras. Eles garantem que sua conexão com um servidor seja confiável ao verificar se o certificado do servidor foi assinado por uma CA reconhecida (Certificate Authority).

Para atender aos pré-requisitos, no Ubuntu, execute: 

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

No Red Hat, Fedora ou CentOS, execute: 

yum install nss nss-pem ca-certificates

No Archlinux, inicie: 

pacman -S nss ca-certificates

No macOS, execute este comando: 

brew install nss ca-certificates

Além disso, certifique-se de ter o zlib instalado em seu sistema, pois os pacotes binários pré-compilados são compactados em gzip.

Instalação por meio do Docker

Imagens do Docker — baseadas no Alpine Linux e no Debian — com curl-impersonate compiladas e prontas para uso estão disponíveis no Docker Hub. Essas imagens incluem o binário e todos os scripts de wrapper necessários.

As imagens do Chrome (*-chrome) podem representar Chrome, Edge e Safari. Em vez disso, as imagens do Firefox (*-ff) podem representar o Firefox.

Para baixar a imagem do Docker de sua preferência, use um dos comandos abaixo.

Para a versão Chrome no Alpine Linux:

docker pull lwthiker/curl-impersonate:0.5-chrome

Para a versão Firefox no Alpine Linux:

docker pull lwthiker/curl-impersonate:0.5-ff

Para a versão Chrome no Debian:

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

Para a versão Firefox no Debian:

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

Depois de fazer o download, como você está prestes a ver, você pode executar curl-impersonate usando um comando docker run.

Instalação a partir de pacotes de distribuição

No Arch Linux, curl-impersonate está disponível por meio do pacote AUR curl-impersonate-bin.

No macOS, você pode instalar o pacote Homebrew não oficial para a versão Chrome com os seguintes comandos:

brew tap shakacode/brew

brew install curl-impersonate

Uso básico

Independentemente do método de instalação, agora você pode executar um comando curl-impersonate usando esta sintaxe:

curl-impersonate-wrapper [options] [target-url]

Ou, equivalentemente, no Docker, execute algo como:

docker run --rm lwthiker/curl-impersonate:[curl-impersonate-version]curl-impersonate-wrapper [options] [target_url]

Onde:

  • curl-impersonate-wrapper é o wrapper cURL Impersonate que você deseja usar (por exemplo, curl_chrome116, curl_edge101, curl_ff117, curl_safari15_5, etc.)
  • opções são os sinalizadores opcionais que serão passados para cURL. 
  • target-url é o URL da página da web para a qual fazer uma solicitação HTTP.

Tenha cuidado ao especificar opções personalizadas, pois alguns sinalizadores alteram a assinatura TLS do cURL, potencialmente tornando-a detectável. Para saber mais, confira nossa introdução ao CURL.

Observe que os wrappers definem automaticamente uma coleção padrão de cabeçalhos HTTP. Para personalizar esses cabeçalhos, modifique os scripts do wrapper de acordo com suas necessidades.

Agora, vamos usar curl-impersonate para fazer uma solicitação à página inicial da Wikipedia usando um wrapper do Chrome:

curl_chrome110 https://www.wikipedia.org

Ou, se você for um usuário do Docker:

docker run --rm lwthiker/curl-impersonate:0.5-chrome curl_chrome110 https://www.wikipedia.org

O resultado será:

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

Excelente! O servidor retornou o HTML da página desejada como se você a estivesse acessando por meio de um navegador.

Agora você pode usar cURL Impersonate para web scraping da mesma forma que usaria cURL para web scraping.

curl-impersonate: tutorial de Python

O uso da linha de comando é ótimo para testes, mas os processos de web scraping geralmente dependem de scripts personalizados escritos em linguagens como Python. Descubra as melhores linguagens de programação para web scraping!

Felizmente, você pode usar cURL Impersonate em Python graças a curl-cffi. Esta é uma vinculação Python para curl-impersonate via cffi. Em particular, curl-cffi pode imitar as impressões digitais TLS/JA3 e HTTP/2 dos navegadores para se conectar a páginas da web sem ser bloqueado.

Veja como usá-lo na seção passo a passo abaixo!

Pré-requisitos

Antes de começar, certifique-se de ter:

  • Python 3.8+ instalado em sua máquina
  • Um projeto Python com um ambiente virtual configurado

Opcionalmente, um IDE Python como Visual Studio Code com a extensão Python é recomendado.

Instalação

Instale curl_cfii via pip da seguinte forma:

pip install curl_cfii

Uso

curl_cffi fornece uma API curl de baixo nível e uma API semelhante a solicitações de alto nível. Saiba mais na documentação de API oficial.

Normalmente, você deseja usar a API semelhante a solicitações. Para fazer isso, importe requests de curl_cffi:

from curl_cffi import requests

Agora você pode usar a versão Chrome do cURL Impersonate em Python para se conectar a uma página da web com:

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

Ótimo! Agora você está pronto para realizar o web scraping em Python, assim como faria com Requests e Beautiful Soup. Para obter mais orientações, siga nosso guia sobre web scraping com Python.

Uso avançado do cURL Impersonate

É hora de explorar alguns usos e técnicas avançadas!

Integração de proxy

Simular as impressões digitais do navegador pode não ser suficiente. As soluções anti-bot ainda podem bloquear você, especialmente se você fizer muitas solicitações automatizadas em um curto período de tempo. É aqui que entram os proxies!

Ao rotear sua solicitação por meio de um servidor proxy, você pode obter um novo endereço IP e proteger sua identidade.

Suponha que o URL do seu servidor proxy seja:

http://84.18.12.16:8888

cURL Impersonate suporta integração de proxy por meio da linha de comando usando o sinalizador -x:

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

Para obter mais detalhes, leia como definir um proxy em cURL.

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

Em Python, você pode configurar um proxy da mesma forma que faria com 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)

Para obter informações adicionais, veja como integrar um proxy a requests do Python.

Integração Libcurl

libcurl-impersonate é uma versão compilada de libcurl que inclui os mesmos recursos do cURL Impersonate. Ele também oferece uma API estendida para ajustar detalhes de TLS e configurações de cabeçalho.

libcurl-impersonate pode ser instalado usando o pacote pré-compilado . Seu objetivo é facilitar a integração do cURL Impersonate em bibliotecas em várias linguagens de programação, como o pacote Python curl-cffi.

Conclusão

Neste artigo, você aprendeu o que é cURL Impersonate, como funciona e como usá-lo via CLI e em Python. Agora você entende que é uma ferramenta para fazer solicitações HTTP enquanto simula a impressão digital TLS de navegadores do mundo real.

O problema é que soluções anti-bot avançadas, como a Cloudflare, ainda podem detectar suas solicitações como provenientes de um bot. A solução? API de extração de dadosda Bright Data — uma solução de raspagem abrangente, completa e de última geração.

Essa API de extração fornece tudo o que você precisa para realizar solicitações automatizadas da web usando cURL ou qualquer outro cliente HTTP. Essa solução completa lida com a impressão digital do navegador, a resolução de CAPTCHA e a rotação de IP para que você ignore qualquer tecnologia anti-bot. Nunca foi tão fácil fazer solicitações HTTP automatizadas bem-sucedidas!

Registre-se agora para um teste gratuito da infraestrutura de web scraping da Bright Data ou converse com um de nossos especialistas em dados sobre nossas soluções de extração de dados.

Não é necessário cartão de crédito