Encabezados HTTP para el raspado web

Obtén información sobre los encabezados HTTP más comunes, por qué son importantes para el raspado web y cómo optimizarlos.
14 min read
HTTP Headers for Web Scraping

El contexto, ya sea cultural, ambiental o relacional, está presente en toda comunicación e influye en la eficacia de la misma. En la comunicación web, los encabezados HTTP son el contexto técnico que los servidores web y los clientes intercambian al enviar solicitudes HTTP o recibir respuestas HTTP. Este contexto se puede usar para facilitar la autenticación, determinar el comportamiento del almacenamiento en caché o administrar el estado de la sesión. También ayuda a los servidores web a determinar el origen de la solicitud HTTP y cómo responderla. Esta respuesta podría incluir la representación de un sitio web para que cumpla con los requisitos de tu dispositivo cliente o la entrega de datos. Cuando esto último se logra mediante un bot, la operación se denomina raspado web, que es útil cuando necesitas obtener datos automáticamente de un sitio web.

Al crear un raspador, es fácil pasar por alto la configuración de tu encabezado HTTP porque los valores predeterminados permiten que las solicitudes continúen. Sin embargo, sin encabezados HTTP configurados correctamente, es difícil mantener una comunicación continua entre el raspador y el servidor web. Esto se debe a que los servidores web se pueden configurar para detectar bots y secuencias de comandos automatizadas en función de la información de los encabezados HTTP predeterminados, como User-AgentRefererAccept-Language.

Sin embargo, si configuras correctamente los encabezados, puedes simular un tráfico normal de usuarios, lo que mejora la fiabilidad de tus operaciones de raspado. En este artículo, aprenderás todo sobre los encabezados HTTP, su papel en el raspado web y cómo optimizarlos para una recopilación de datos eficaz.

Por qué necesitas encabezados HTTP

Los encabezados HTTP son pares clave-valor de las solicitudes y respuestas que son necesarios para la comunicación web. El servidor web recibe información e instrucciones sobre el cliente y el recurso de interés a través de encabezados de solicitud. Mientras tanto, los encabezados de respuesta brindan al cliente más información sobre el recurso obtenido y la respuesta recibida. Si bien existen numerosos encabezados HTTP, los siguientes son algunos de los más importantes para el raspado web:

User-Agent

User-Agent es una cadena que identifica de forma exclusiva al cliente que utilizas para enviar una solicitud. El contenido de esta cadena puede incluir el tipo de aplicación, el sistema operativo, la versión del software y el proveedor del software.

De forma predeterminada, este encabezado está establecido en un valor que permite identificar fácilmente tu raspador como un bot. Por ejemplo, si quieres extraer datos de precios de un sitio web de comercio electrónico mediante una secuencia de comandos de solicitudes de Python, tu raspador enviará un User-Agent similar al siguiente en su encabezado HTTP:

"python-requests/X.X.X"

Puedes evitar que te detecten cambiando el User-Agent para que imite diferentes navegadores y dispositivos. Para ello, debes reemplazar el encabezado User-Agent de las solicitudes de Python por lo siguiente:

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

Este nuevo encabezado incluye información sobre el navegador y la plataforma nativa en la que se ejecuta.

Accept-Language

El encabezado Accept-Language te permite especificar en qué idioma(s) deseas recibir el recurso solicitado. Si es necesario, puedes incluir el código del país o el tipo de alfabeto. Por ejemplo, si configuras Accept-Language en "en-US", significa que esperas que el recurso esté en inglés estadounidense, incluso si estás en otro continente. También puedes usar el tipo de alfabeto para definir el encabezado como la versión en escritura latina del idioma serbio especificando "sr-Latn". Esto garantiza que recuperes los datos localizados adecuados.

Cuando hay varios idiomas, el encabezado Accept-Language se convierte en una lista de idiomas separados por comas con valores de calidad que ayudan a definir el orden de prioridad. Un ejemplo de esto es "en -GB;q=1.0, en-US;q=0.9, fr;q=0.8", donde los valores más altos de  q indican una prioridad más alta y  q oscila entre 0 y 1.

Cookie

El encabezado Cookie contiene datos que permiten al servidor web identificar una sesión de usuario en varios ciclos de solicitud-respuesta. Mientras realizas el raspado, puedes generar cookies en el lado del cliente (o usar las almacenadas anteriormente) e incluirlas en el encabezado HTTP de una nueva solicitud. Esto permite al servidor web asociar tu solicitud con una sesión de usuario válida y devolver los datos necesarios. Por ejemplo, si necesitas realizar varias solicitudes para obtener datos específicos de un usuario de un sitio web de comercio electrónico, debes incluir cookies de sesión en el encabezado Cookie de la solicitud HTTP para mantener tu raspador conectado, almacenar los datos relevantes y evitar los sistemas de detección de bots basados en cookies.

El encabezado Cookie consiste en una lista de uno o más pares clave-valor separados por punto y coma y un espacio ("; "). Normalmente tiene la forma "name0=value0; name1=value1; name2=value2".

Referer

Referer contiene la URL absoluta o parcial de la página desde la que solicitaste el recurso. Por ejemplo, mientras te desplazas por la página de inicio de un sitio web de comercio electrónico, puedes optar por hacer clic en un enlace que despierte tu interés. El encabezado Referer de la solicitud HTTP que abre la siguiente página web apunta a la página principal del sitio web de comercio electrónico desde el que iniciaste la solicitud. Si navegas a otras páginas web desde la actual, cada página vista anteriormente sirve como el Referer para la siguiente. Esto es análogo a cómo funcionan las referencias en las interacciones humanas.

Naturalmente, algunos sitios web comprueban este encabezado como parte de su mecanismo antirraspado. Esto significa que, si quieres simular el flujo de tráfico natural de otros sitios web y evitar el bloqueo, debes configurar el encabezado Referer en una URL válida, como la página de inicio del sitio o la URL de un motor de búsqueda.

Cómo optimizar los encabezados HTTP para el raspado web

Al raspar, ten en cuenta que los datos que necesitas son valiosos para sus propietarios y es posible que duden en compartirlos. Como resultado, muchos propietarios toman medidas para detectar a los agentes automatizados que intentan acceder a su contenido. Si tienen éxito, pueden bloquearte o devolver datos irrelevantes.

Los encabezados HTTP te ayudan a evitar estas medidas de seguridad al hacer que parezca que tu raspador es un usuario habitual de Internet que navega por su sitio web. Si configuras correctamente los encabezados, como User-AgentAcceptAccept-LanguageReferer, puedes imitar eficazmente el tráfico web normal y dificultar que el servidor web identifique tu bot como un raspador.

Recuperación y configuración de encabezados personalizados

Para demostrar cómo puedes optimizar tus encabezados HTTP, hagamos una solicitud en Python para raspar libros de la categoría de misterio del sitio web ficticio de comercio electrónico Libros para raspado. Antes de hacerlo, necesitas obtener los encabezados HTTP de las herramientas de desarrollo de tu navegador.

Para empezar, visita el sitio web en otra pestaña del navegador:

A continuación, inicia las herramientas para desarrolladores en tu navegador. Una forma de hacerlo es hacer clic con el botón derecho en cualquier parte de la página y seleccionar Inspeccionar o consultar la sublista de herramientas. A continuación, haz clic en la pestaña Network del menú superior de las herramientas para desarrolladores:

Con la pestaña Network abierta, marca la casilla situada junto a Disable cache. Esto te permite ver todo el encabezado de la solicitud. A continuación, haz clic en el enlace a la categoría Misterio de la lista de categorías del sitio web. Se abre una página con libros en esa categoría, pero lo que es más importante, aparece una lista de solicitudes en la pestaña Network de la ventana de herramientas para desarrolladores:

Desplázate hasta la parte superior de la lista y haz clic en el primer elemento. Se abre una ventana más pequeña en las herramientas para desarrolladores. Desplázate hasta Request Headers:

En Request Headers, encontrarás los encabezados de solicitud HTTP, especialmente los que acabas de conocer. Para usar estos encabezados con un raspador, crea una secuencia de comandos en Python con variables para los encabezados 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
}

En este fragmento de código, importas la biblioteca requests y defines las variables para cada encabezado HTTP como cadenas. A continuación, crea un diccionario llamado headers para asignar los nombres de los encabezados HTTP a las variables definidas.

A continuación, añade el siguiente código a la secuencia de comandos para enviar una solicitud HTTP sin los encabezados personalizados e imprime el resultado:

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

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

Aquí, asignas la URL de los libros de misterio a una variable. A continuación, llama al método requests.get con esta URL como único parámetro e imprime los encabezados de la solicitud.

El resultado debería ser el siguiente:

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

Como puedes ver, es probable que los encabezados HTTP predeterminados identifiquen tu raspador como un bot. Actualiza la línea requests.get pasando un parámetro adicional a la función:

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

Aquí, pasas el diccionario custom_header que has creado y el parámetro URL al método requests.get.

El resultado debería ser el siguiente:

{'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/'}

Aquí puedes ver que los encabezados se han actualizado con la información obtenida de tu navegador. Esto hace que sea más difícil para cualquier servidor web detectar que estás visitando automáticamente sus sitios, lo que reduce las probabilidades de que te bloqueen.

Ventajas de optimizar los encabezados

La optimización adecuada de los encabezados HTTP es crucial para garantizar el éxito continuo de tu raspado web.

Una ventaja de la optimización es que se reduce la tasa de bloqueo. Con los encabezados optimizados, las interacciones de los raspadores con los sitios web son similares a las de un usuario normal y corriente. Como resultado, puedes evitar algunos sistemas de detección de bots, lo que reduce la probabilidad de que tu raspador sea bloqueado con el paso del tiempo (tasa de bloqueo).

Otra ventaja de optimizar los encabezados HTTP es una mayor tasa de éxito, ya que la reducción de las tasas de bloqueo facilita la extracción de datos.

Además, centrarse en la optimización de los encabezados HTTP mejora la eficacia de tu raspado web. Esto garantiza que recibas datos relevantes que satisfagan tus necesidades.

Consejos de optimización de encabezados

Si bien configurar correctamente el encabezado es importante para garantizar el éxito de tus proyectos de raspado web, todavía queda más por hacer, especialmente cuando necesitas extraer datos a gran escala. Los siguientes son algunos consejos para aumentar la tasa de éxito de tu raspador:

Rotar encabezados

Más allá de definir encabezados como el User-Agent para imitar el tráfico normal de un usuario, puedes definir varios encabezados HTTP distintos y rotarlos entre ellos por solicitud. Esto te permite simular el acceso de varios usuarios al servidor web y distribuir el tráfico generado entre ellos. Esto reduce aún más las probabilidades de que te identifiquen como un bot y te bloqueen.

Dependiendo de la escala de tu operación de raspado, puedes usar entre diez y cientos de User-Agent. Cuantas más solicitudes tengas que enviar en poco tiempo, más razonable será que cambies entre más User-Agent.

Actualizar los encabezados

Otra consideración a la hora de optimizar los encabezados HTTP es realizar un mantenimiento frecuente de los mismos. Los usuarios suelen actualizar sus navegadores a medida que se publican nuevas versiones, por lo que es muy probable que los encabezados válidos en un momento dado correspondan a los de la versión más reciente del navegador. Si configuras tu encabezado con uno o más User-Agentque hacen referencia a versiones de navegador o software desactualizadas, los servidores web podrán distinguirte del resto de usuarios habituales y, potencialmente, bloquear tu solicitud. Lo mismo se aplica a otros encabezados que requieren actualizaciones frecuentes.

Evitar configuraciones de encabezado incorrectas

También debes esforzarte por evitar configuraciones de encabezado incorrectas. Esto puede ocurrir cuando un encabezado, como User-Agent, no coincide con el resto de encabezados estándar que has configurado. Por ejemplo, si tienes el User-Agent configurado en un navegador Mozilla Firefox que se ejecuta en Windows mientras los encabezados restantes están definidos para un navegador Chromium que se ejecuta en Windows, es probable que bloqueen tu raspador.

Además, cuando utilizas un servidor proxy, que actúa como intermediario entre el cliente y el servidor, puedes añadir involuntariamente encabezados que permitan a un sistema de detección del navegador identificar tus solicitudes como automatizadas. Para comprobar los encabezados, envía solicitudes de prueba y asegúrate de que el servidor proxy no añada encabezados identificativos.

Conclusión

En este artículo, has aprendido sobre los encabezados HTTP, incluidos los encabezados User-AgentRefererAccept-LanguageCookie, que son algunos de los encabezados más importantes para el raspado web. Debes optimizar los encabezados HTTP para garantizar la duración y la utilidad del raspado web.

El uso correcto de los encabezados HTTP para realizar solicitudes en tus proyectos de raspado web reduce la tasa de bloqueo y aumenta la tasa de éxito al facilitar la superación de los mecanismos antirraspado. También hace que el raspado web sea más eficiente. Sin embargo, los mecanismos antirraspado avanzados que implican desafíos de JavaScript y CAPTCHA pueden seguir siendo un obstáculo. Bright Data simplifica tu raspado web al proporcionarte una red proxy galardonada y fácil de usar, un navegador de raspado avanzado, un IDE de raspador web completo y una herramienta de desbloqueo de sitios web para el raspado. Tanto si eres un principiante como un experto, estas ofertas de productos pueden ayudarte a alcanzar tus objetivos de raspado. Empieza una prueba gratuita y explora hoy mismo las ofertas de Bright Data.