Cabeçalhos HTTP para extração de dados da web

Aprenda sobre os cabeçalhos HTTP mais comuns, por que eles são importantes para a extração de dados da web e como otimizá-los.
14 min read
HTTP Headers for Web Scraping

O contexto, seja ele cultural, ambiental ou relacional, está presente em toda comunicação, e influencia sua eficácia. Na comunicação na web, os cabeçalhos HTTP são o contexto técnico que servidores e clientes da web trocam ao enviar solicitações ou receber respostas em HTTP. Esse contexto pode ser usado para facilitar a autenticação, determinar o comportamento do cache ou gerenciar o estado da sessão. Ele também ajuda os servidores da web a determinar a origem da solicitação HTTP e como responder a ela. Essa resposta pode incluir a renderização de um site para atender aos requisitos do dispositivo do cliente ou a entrega dos dados para você. Quando a última é realizada utilizando-se um bot, a operação é chamada de web scraping, ou extração de dados da web, que é útil quando você precisa obter dados automaticamente de um site.

Ao criarmos um extrator de dados, às vezes esquecemos de configurar o cabeçalho HTTP porque os valores predefinidos permitem que as solicitações prossigam. No entanto, sem cabeçalhos HTTP devidamente configurados, é difícil manter uma comunicação contínua entre seu extrator de dados e o servidor web. Isso ocorre porque os servidores web podem ser configurados para detectar bots e scripts automatizados com base nas informações dos cabeçalhos HTTP padrão, como User-AgentRefererAccept-Language.

No entanto, se você configurar corretamente seus cabeçalhos, poderá simular o tráfego de um usuário normal, aumentando a confiabilidade de suas operações de extração de dados. Neste artigo, você aprenderá tudo sobre cabeçalhos HTTP, seu papel na extração de dados e como otimizá-los para uma coleta de dados eficaz.

Por que você precisa de cabeçalhos HTTP

Os cabeçalhos HTTP são pares de valores-chave em solicitações e respostas que são necessários para a comunicação na web. O servidor web recebe informações e instruções sobre o cliente e o recurso de interesse por meio de cabeçalhos de solicitação. Enquanto isso, os cabeçalhos de resposta fornecem ao cliente mais informações sobre o recurso buscado e a resposta recebida. Embora existam vários cabeçalhos HTTP, os seguintes são alguns dos mais importantes para a extração de dados da web:

User-Agent (agente do usuário)

User-Agent é uma sequência de texto que identifica exclusivamente o cliente que você usa para enviar uma solicitação. O conteúdo dessa sequência pode incluir o tipo de aplicativo, sistema operacional, versão do software e fornecedor do software.

Por padrão, esse cabeçalho é definido com um valor que permite que seu extrator de dados seja facilmente identificado como um bot. Por exemplo, se você extrair coletar dados de preços de um site de e-commerce usando um script de solicitações em Python, seu extrator enviará um User-Agent semelhante ao seguinte em seu cabeçalho HTTP:

"python-requests/X.X.X"

Você pode evitar ser detectado alterando o User-Agent para imitar diferentes navegadores e dispositivos. Para fazer isso, precisa substituir o cabeçalho User-Agent nas solicitações em Python pelo seguinte:

    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"

Esse novo cabeçalho inclui informações sobre o navegador e a plataforma nativa na qual ele é executado.

Accept-Language (idioma aceito)

O cabeçalho Accept-Language permite especificar em quais idiomas você deseja receber o recurso solicitado. Se necessário, você pode incluir o código do país ou o tipo de alfabeto. Por exemplo, se você definir Accept-Language como “en-US”, significa que deseja que o recurso esteja em inglês, na variante falada nos Estados Unidos da América, mesmo se você estiver em outro continente. Você também pode usar o tipo de alfabeto para definir o cabeçalho, como a versão do idioma sérvio no alfabeto latino, especificando “sr-Latn”. Isso garante que você recupere os dados localizados apropriados.

Quando há vários idiomas, o cabeçalho Accept-Language se torna uma lista de idiomas separados por vírgula com valores de qualidade que ajudam a definir a ordem de prioridade. Um exemplo disso é "en -GB;q=1.0, en-US;q=0.9, fr;q=0.8", em que valores maiores de q indicam maior prioridade. Além disso,q varia de 0 a 1.

Cookie

O cabeçalho Cookie contém dados que permitem ao servidor web identificar uma sessão de usuário ao longo de vários ciclos de solicitação-resposta. Durante a extração de dados, você pode gerar cookies no lado do cliente (ou usar os armazenados anteriormente) e incluí-los no cabeçalho HTTP de uma nova solicitação. Isso permite que o servidor web associe sua solicitação a uma sessão de usuário válida e retorne os dados necessários. Por exemplo, se você precisar fazer várias solicitações para obter dados de usuários específicos de um site de e-commerce, inclua cookies de sessão no cabeçalho Cookie da solicitação HTTP para manter seu extrator de dados conectado, armazenar dados relevantes e evitar sistemas de detecção de bots baseados em cookies.

O cabeçalho Cookie consiste em uma lista de um ou mais pares de valores-chave separados por um ponto e vírgula e um espaço ("; "). Normalmente, ele assume a forma "name0=value0; name1=value1; name2=value2".

Referer (Referenciador)

Referer contém o URL absoluto ou parcial da página da qual você solicitou o recurso. Por exemplo, ao navegar pela página inicial de um site de e-commerce, você pode optar por clicar em um link que desperte seu interesse. O cabeçalho Referer na solicitação HTTP que abre a próxima página da web aponta para a página inicial do site de e-commerce do qual você iniciou a solicitação. Se você navegar para outras páginas da web a partir da atual, cada página visualizada anteriormente servirá como a Referer para a seguinte. Isso é análogo à forma como as referências funcionam nas interações humanas.

Naturalmente, alguns sites verificam esse cabeçalho como parte de seu mecanismo antiscraping. Isso significa que, se você quiser simular o fluxo natural de tráfego de outros sites e evitar bloqueios, precisará definir o cabeçalho Referer como um URL válido, como a página inicial do site ou o URL de um mecanismo de pesquisa.

Como otimizar cabeçalhos HTTP para a extração de dados da web

Ao extrair dados da web, lembre-se de que os dados de que você precisa são valiosos para seus respectivos proprietários e que eles podem hesitar em compartilhá-los. Consequentemente, muitos proprietários tomam medidas para detectar agentes automatizados que tentam acessar seu conteúdo. Se tiverem êxito, eles podem bloquear você ou retornar dados irrelevantes.

Os cabeçalhos HTTP ajudam você a contornar essas medidas de segurança, fazendo com que pareça que seu extrator de dados é um usuário normal da internet navegando no site. Ao configurar corretamente os cabeçalhos, como User-AgentAcceptAccept-LanguageReferer, você pode imitar com eficácia o tráfego normal da web e, ao mesmo tempo, dificultar que o servidor da web identifique seu bot como um extrator de dados.

Recuperando e configurando cabeçalhos personalizados

Para demonstrar como você pode otimizar seus cabeçalhos HTTP, vamos fazer uma solicitação em Python para extrair livros na categoria de mistério do site fictício de e-commerce Books to Scrape. Antes de fazer isso, você precisa obter cabeçalhos HTTP das ferramentas para desenvolvedores do seu navegador.

Para começar, visite o site em uma guia diferente do navegador:

Em seguida, abra as ferramentas para desenvolvedores em seu navegador. Uma forma de fazer isso é clicando com o botão direito do mouse em qualquer lugar da página e selecionando Inspetor ou verifique a sublista de ferramentas. Em seguida, clique na guia Rede no menu superior das ferramentas para desenvolvedores:

Com a guia Rede aberta, assinale a caixa ao lado de Desabilitar cache. Isso permite que você veja todo o cabeçalho da solicitação. Em seguida, clique no link para a categoria Mistery na lista de categorias do site. Isso abre uma página com livros nessa categoria, mas o mais importante é que uma lista de solicitações aparece na guia Rede da janela de ferramentas para desenvolvedores:

Vá até o topo da lista e clique no primeiro item. Isso abre uma janela menor nas ferramentas para desenvolvedores. Vá até os Cabeçalhos de solicitação:

Em Cabeçalhos de solicitação, você encontrará os cabeçalhos de solicitação HTTP, especialmente aqueles que acabou de conhecer. Para usar esses cabeçalhos com um extrator de dados, crie um script Python com variáveis para os cabeçalhos User-AgentAcceptAccept-LanguageCookieReferer:

import requests

referer = "https://books.toscrape.com/"
accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8"
accept_language = "en-GB,en;q=0.6"
cookie = "zero-chakra-ui-color-mode=light-zero; AMP_MKTG_8f1ede8e9c=JTdCJTIycmVmZXJyZXIlMjIlM0ElMjJodHRwcyUzQSUyRiUyRnd3dy5nb29nbGUuY29tJTJGJTIyJTJDJTIycmVmZXJyaW5nX2RvbWFpbiUyMiUzQSUyMnd3dy5nb29nbGUuY29tJTIyJTdE; AMP_8f1ede8e9c=JTdCJTIyZGV2aWNlSWQlMjIlM0ElMjI1MjgxOGYyNC05ZGQ3LTQ5OTAtYjcxMC01NTY0NzliMzAwZmYlMjIlMkMlMjJzZXNzaW9uSWQlMjIlM0ExNzA4MzgxNTQ4ODQzJTJDJTIyb3B0T3V0JTIyJTNBZmFsc2UlMkMlMjJsYXN0RXZlbnRUaW1lJTIyJTNBMTcwODM4MjE1NTQ2MCUyQyUyMmxhc3RFdmVudElkJTIyJTNBNiU3RA=="
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"

custom_headers = {
    "User-Agent": user_agent,
    "Accept": accept,
    "Accept-Language": accept_language,
    "Cookie": cookie,
    "Referer": referer
}

Nesse trecho de código, você importa a biblioteca de solicitações e define variáveis para cada cabeçalho HTTP como strings. Em seguida, você cria um dicionário chamado headers para mapear os nomes dos cabeçalhos HTTP para as variáveis definidas.

Em seguida, adicione o seguinte código ao script para enviar uma solicitação HTTP sem os cabeçalhos personalizados e gerar o resultado:

URL = 'https://books.toscrape.com/catalogue/category/books/mystery_3/index.html'

r = requests.get(URL)
print(r.request.headers)

Aqui, você atribui o URL dos livros de mistério a uma variável. Em seguida, você chama o método requests.get com esse URL como único parâmetro e gera os cabeçalhos da solicitação.

O resultado deve ser semelhante a este:

{'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

Como pode ver, os cabeçalhos HTTP predefinidos provavelmente identificarão seu extrator de dados como um bot. Atualize a linha requests.get adicionando mais um parâmetro à função:

r = requests.get(URL, headers=custom_headers)

Aqui, você adiciona o dicionário custom_header que você criou e o parâmetro URL ao método requests.get .

O resultado deve ser semelhante a este:

{'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8', 'Connection': 'keep-alive', 'Accept-Language': 'en-GB,en;q=0.6', 'Cookie': 'zero-chakra-ui-color-mode=light-zero; AMP_MKTG_8f1ede8e9c=JTdCJTIycmVmZXJyZXIlMjIlM0ElMjJodHRwcyUzQSUyRiUyRnd3dy5nb29nbGUuY29tJTJGJTIyJTJDJTIycmVmZXJyaW5nX2RvbWFpbiUyMiUzQSUyMnd3dy5nb29nbGUuY29tJTIyJTdE; AMP_8f1ede8e9c=JTdCJTIyZGV2aWNlSWQlMjIlM0ElMjI1MjgxOGYyNC05ZGQ3LTQ5OTAtYjcxMC01NTY0NzliMzAwZmYlMjIlMkMlMjJzZXNzaW9uSWQlMjIlM0ExNzA4MzgxNTQ4ODQzJTJDJTIyb3B0T3V0JTIyJTNBZmFsc2UlMkMlMjJsYXN0RXZlbnRUaW1lJTIyJTNBMTcwODM4MjE1NTQ2MCUyQyUyMmxhc3RFdmVudElkJTIyJTNBNiU3RA==', 'Referer': 'https://books.toscrape.com/'}

Aqui, você pode ver que os cabeçalhos foram atualizados com as informações obtidas do seu navegador. Isso torna mais difícil para qualquer servidor web detectar que você está visitando automaticamente seus sites, diminuindo suas chances de ser bloqueado.

Benefícios da otimização de cabeçalhos

Otimizar adequadamente seus cabeçalhos HTTP é fundamental para garantir o sucesso contínuo da sua operação de extração de dados.

Uma vantagem da otimização é que a taxa de bloqueios é reduzida. Com cabeçalhos otimizados, as interações dos seus extratores de dados com sites são semelhantes às de um usuário comum. Como resultado, você pode evitar alguns sistemas de detecção de bots, diminuindo a probabilidade do seu extrator ser bloqueado ao longo do tempo (taxa de bloqueio).

Outro benefício de otimizar seus cabeçalhos HTTP é uma maior taxa de sucesso, pois taxas de bloqueio reduzidas facilitam a extração de dados.

Além disso, o foco na otimização de seus cabeçalhos HTTP melhora a eficiência de sua operação de extração de dados. Isso garante que você receba dados relevantes que atendam às suas necessidades.

Dicas de otimização de cabeçalhos

Embora a configuração adequada do cabeçalho seja importante para garantir o sucesso de seus projetos de extração de dados, não termina por aí, especialmente quando você precisa extrair dados em grande escala. A seguir estão algumas dicas para aumentar a taxa de sucesso do seu extrator de dados:

Alternar cabeçalhos

Indo além da definição de cabeçalhos como o User-Agent para imitar o tráfego normal de um usuário, você pode definir vários cabeçalhos HTTP distintos e alternar entre eles por solicitação. Isso permite que você simule vários usuários acessando o servidor web e distribua o tráfego gerado entre eles. Isso reduz ainda mais suas chances de ser identificado como um bot e bloqueado.

Dependendo da escala da sua operação de extração de dados, você pode usar de dez a centenas de User-Agents. Quanto mais solicitações você precisar enviar em um curto período, mais razoável será para você alternar entre mais User-Agents.

Manter os cabeçalhos atualizados

Outra consideração quando se trata de otimizar cabeçalhos HTTP é a manutenção regular dos seus cabeçalhos. Os usuários normalmente atualizam os navegadores à medida que novas versões são lançadas; portanto, há uma boa chance de que os cabeçalhos válidos a qualquer instante correspondam aos da versão mais recente do navegador. Se você configurar seu cabeçalho com um ou mais User-Agentss que se refiram a versões desatualizadas de um navegador ou software, os servidores da web poderão diferenciá-lo da multidão de usuários regulares e, potencialmente, bloquear sua solicitação. O mesmo se aplica a outros cabeçalhos que exigem atualizações frequentes.

Evitar configurar cabeçalhos incorretamente

Você também deve evitar configurar cabeçalhos incorretamente. Isso pode acontecer quando um cabeçalho, como o User-Agent, não corresponde a todos os outros cabeçalhos padronizados que você definiu. Por exemplo, ter o User-Agent definido para um navegador Mozilla Firefox em execução no Windows enquanto os cabeçalhos restantes são definidos para um navegador Chromium em execução no Windows provavelmente resultará no bloqueio do extrator de dados.

Além disso, ao usar um servidor de proxies, que atua como intermediário entre o cliente e o servidor, você pode, sem querer, adicionar cabeçalhos que permitem que um sistema de detecção no lado do navegador identifique suas solicitações como automatizadas. Para verificar seus cabeçalhos, envie solicitações de teste e certifique-se de que seu servidor proxy não adicione cabeçalhos de identificação.

Conclusão

Neste artigo, você aprendeu sobre cabeçalhos HTTP, incluindo os cabeçalhos User-AgentRefererAccept-LanguageCookie , que são alguns dos cabeçalhos mais importantes para extração de dados da web. Você deve otimizar seus cabeçalhos HTTP para garantir a longevidade e a utilidade da sua operação de extração de dados da web.

O uso adequado de cabeçalhos HTTP para fazer solicitações em seus projetos de extração de dados da web reduz sua taxa de bloqueios e aumenta sua taxa de sucesso, tornando mais fácil contornar os mecanismos antiscraping. Isso também torna sua operação de scraping mais eficiente. No entanto, mecanismos antiscraping avançados que envolvem desafios de JavaScript e CAPTCHAs ainda podem ser um obstáculo.A Bright Data simplifica suas operações de extração de dados da web pois oferece uma rede de proxies premiada e fácil de usar, um navegador de extração de dados avançado , um Web Scraper IDE completo e um Web Unlocker. Independentemente de você ser iniciante ou especialista, essas ofertas de produtos podem ajudá-lo a atingir suas metas de extração de dados. Comece uma avaliação gratuita e explore as ofertas da Bright Data hoje mesmo.