CAPSOLVER
Blog
Como usar curl_cffi para Web Scraping

Como usar curl_cffi para Web Scraping

Logo of CapSolver

Aloísio Vítor

Image Processing Expert

17-Sep-2024

O que é curl_cffi?

curl_cffi é uma biblioteca Python que fornece bindings eficientes e de baixo nível para a biblioteca libcurl usando CFFI (C Foreign Function Interface). Isso permite que você execute solicitações HTTP com alto desempenho e controle preciso, semelhante à ferramenta de linha de comando curl, mas dentro do Python. É particularmente útil para tarefas de web scraping que exigem velocidade e configurações avançadas.

Recursos:

  • Alto Desempenho: Aproveita a velocidade do libcurl para solicitações HTTP rápidas.
  • Segurança de Threads: Seguro para uso em aplicações multi-threaded.
  • Recursos Avançados: Suporta proxies, configurações SSL/TLS, cabeçalhos personalizados e muito mais.
  • Controle de Baixo Nível: Fornece controle detalhado sobre o processo de solicitação e resposta.

Pré-requisitos

Antes de começar a usar o curl_cffi, certifique-se de ter o seguinte instalado:

Em sistemas Ubuntu/Debian, você pode precisar instalar os cabeçalhos de desenvolvimento do libcurl:

bash Copy
sudo apt-get install libcurl4-openssl-dev

Começando com curl_cffi

Instalação

Instale o curl_cffi usando o pip:

bash Copy
pip install curl_cffi

Exemplo Básico: Fazendo uma solicitação GET

Aqui está um exemplo básico de como usar o curl_cffi para executar uma solicitação GET:

python Copy
from curl_cffi import requests

# Execute uma solicitação GET
response = requests.get('https://httpbin.org/get')

# Verifique o código de status
print(f'Código de Status: {response.status_code}')

# Imprima o conteúdo da resposta
print('Corpo da Resposta:', response.text)

Exemplo de Web Scraping: Raspagem de Citações de um Site

Vamos raspar uma página da web para extrair informações. Usaremos o Quotes to Scrape para obter todas as citações juntamente com seus autores.

python Copy
from curl_cffi import requests
from bs4 import BeautifulSoup

# URL para raspar
url = 'http://quotes.toscrape.com/'

# Execute uma solicitação GET
response = requests.get(url)

# Analise o conteúdo HTML usando BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')

# Encontre todos os elementos de citação
quotes = soup.find_all('div', class_='quote')

# Extraia e exiba as citações e autores
for quote in quotes:
    text = quote.find('span', class_='text').get_text()
    author = quote.find('small', class_='author').get_text()
    print(f'{text} — {author}')

Saída:

Copy
“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.” — Albert Einstein
“It is our choices, Harry, that show what we truly are, far more than our abilities.” — J.K. Rowling
... (citações adicionais)

Lidando com Captchas com CapSolver e curl_cffi

Nesta seção, exploraremos como integrar o CapSolver com o curl_cffi para contornar captchas. O CapSolver é um serviço externo que ajuda a resolver vários tipos de captchas, incluindo o ReCaptcha V2, que são comumente usados em sites.

Demonstraremos a resolução do ReCaptcha V2 usando o CapSolver e, em seguida, raspando o conteúdo de uma página que requer a resolução do captcha primeiro.

Exemplo: Resolvendo ReCaptcha V2 com CapSolver e curl_cffi

python Copy
import os
import capsolver
from curl_cffi import requests

# Considere usar variáveis de ambiente para informações sensíveis
capsolver.api_key = os.getenv("CAPSOLVER_API_KEY", "Sua Chave de API CapSolver")
PAGE_URL = os.getenv("PAGE_URL", "https://example.com")  # URL da página com o captcha
PAGE_KEY = os.getenv("PAGE_SITE_KEY", "SITE_KEY")        # Chave do site para o captcha

def solve_recaptcha_v2(url, site_key):
    solution = capsolver.solve({
        "type": "ReCaptchaV2TaskProxyless",
        "websiteURL": url,
        "websiteKey": site_key,
        "proxy": PROXY
    })
    return solution['solution']['gRecaptchaResponse']

def main():
    print("Resolvendo reCaptcha V2...")
    captcha_solution = solve_recaptcha_v2(PAGE_URL, PAGE_KEY)
    print("Captcha Resolvido!")

if __name__ == "__main__":
    main()

Observação: Substitua PAGE_URL pela URL da página que contém o captcha e PAGE_SITE_KEY pela chave do site do captcha. Você pode encontrar a chave do site na fonte HTML da página, geralmente dentro do <div> contendo o widget do captcha.

Lidando com Proxies com curl_cffi

Se você precisar rotear suas solicitações por meio de um proxy, o curl_cffi simplifica isso:

python Copy
from curl_cffi import requests

# Defina as configurações do proxy
proxies = {
    'http': 'http://username:password@proxyserver:port',
    'https': 'https://username:password@proxyserver:port',
}

# Execute uma solicitação GET usando o proxy
response = requests.get('https://httpbin.org/ip', proxies=proxies)

# Imprima o conteúdo da resposta
print('Corpo da Resposta:', response.text)

Lidando com Cookies com curl_cffi

Você pode gerenciar cookies usando o CookieJar do módulo http.cookiejar do Python:

python Copy
from curl_cffi import requests
from http.cookiejar import CookieJar

# Crie uma instância CookieJar
cookie_jar = CookieJar()

# Crie uma sessão com o cookie jar
session = requests.Session()
session.cookies = cookie_jar

# Execute uma solicitação GET
response = session.get('https://httpbin.org/cookies/set?name=value')

# Exiba os cookies
for cookie in session.cookies:
    print(f'{cookie.name}: {cookie.value}')

Uso Avançado: Cabeçalhos Personalizados e Solicitações POST

Você pode enviar cabeçalhos personalizados e executar solicitações POST com curl_cffi:

python Copy
from curl_cffi import requests

# Defina cabeçalhos personalizados
headers = {
    'User-Agent': 'Mozilla/5.0 (compatible)',
    'Accept-Language': 'en-US,en;q=0.5',
}

# Dados para enviar na solicitação POST
data = {
    'username': 'testuser',
    'password': 'testpass',
}

# Execute uma solicitação POST
response = requests.post('https://httpbin.org/post', headers=headers, data=data)

# Imprima a resposta JSON
print('Resposta JSON:', response.json())

Código Bônus

Resgate seu Código Bônus para as melhores soluções de captcha no CapSolver: scrape. Após resgatá-lo, você receberá um bônus extra de 5% após cada recarga, ilimitadas vezes.

Conclusão

Com o curl_cffi, você pode executar tarefas de web scraping de forma eficiente, tendo controle detalhado sobre suas solicitações HTTP. A integração com o CapSolver permite que você contorne captchas como o ReCaptcha V2, permitindo o acesso a conteúdo que seria difícil de raspar de outra forma.

Sinta-se à vontade para expandir esses exemplos para atender às suas necessidades específicas de raspagem. Lembre-se sempre de respeitar os termos de serviço dos sites que você raspa e de seguir as diretrizes legais.

Feliz raspagem!

Declaração de Conformidade: As informações fornecidas neste blog são apenas para fins informativos. A CapSolver está comprometida em cumprir todas as leis e regulamentos aplicáveis. O uso da rede CapSolver para atividades ilegais, fraudulentas ou abusivas é estritamente proibido e será investigado. Nossas soluções de resolução de captcha melhoram a experiência do usuário enquanto garantem 100% de conformidade ao ajudar a resolver dificuldades de captcha durante a coleta de dados públicos. Incentivamos o uso responsável de nossos serviços. Para mais informações, visite nossos Termos de Serviço e Política de Privacidade.

Mais