Encabezados HTTP 101: Cómo utilizarlos para un raspado web eficaz

Raluca Penciuc el 03 Feb 2023

blog-image


El scraping web es una herramienta increíble para extraer información valiosa de Internet, pero seamos realistas, puede ser bastante frustrante cuando tus scripts de scraping se bloquean.

Es como el juego del gato y el ratón: los propietarios de los sitios web siempre inventan nuevas formas de mantenerte fuera. Pero hay un arma secreta en tu caja de herramientas que puede darte ventaja: Las cabeceras HTTP y las cookies.

Estos dos elementos desempeñan un papel fundamental en el modo en que sus scripts de scraping interactúan con los sitios web, y dominarlos puede significar la diferencia entre un scrape bloqueado y uno exitoso.

En este tutorial, descubriremos los secretos de las cabeceras HTTP y las cookies y le mostraremos cómo utilizarlas para que sus esfuerzos de scraping sean lo más humanos posible.

Aprenderás cuáles son las cabeceras más comunes utilizadas en el web scraping, cómo obtener cabeceras y cookies de un navegador real y cómo utilizar cabeceras personalizadas para eludir las medidas de seguridad. Así que, ¡vamos a sumergirnos y ver cómo podemos llevar nuestro juego de scraping al siguiente nivel!

Comprender las cabeceras HTTP

Las cabeceras HTTP son pares clave-valor que se envían como parte de una petición o respuesta HTTP. Están separadas por dos puntos y un espacio y sus nombres (claves) no distinguen mayúsculas de minúsculas.

Puede agrupar las cabeceras HTTP en diferentes categorías, dependiendo de su función y de la dirección en la que las envíe. Estas categorías incluyen:

  • cabeceras generales: se aplican tanto a los mensajes de solicitud como a los de respuesta
  • cabeceras de solicitud: contienen más información sobre el recurso que se desea obtener o sobre el cliente que realiza la solicitud.
  • cabeceras de respuesta: contienen información adicional sobre la respuesta, como su ubicación o el servidor que la proporciona
  • cabeceras de entidad: contienen información sobre el cuerpo del recurso, como su tamaño o tipo MIME
  • cabeceras de extensión: se utilizan para ofrecer compatibilidad con versiones anteriores

Las cabeceras HTTP proporcionan una amplia gama de información, incluido el tipo de solicitud que está realizando, el navegador que está utilizando y cualquier información adicional que el servidor necesite para procesar la solicitud.

También permiten proporcionar información de autenticación y seguridad, controlar el almacenamiento en caché y la compresión, y especificar el idioma y el juego de caracteres de la solicitud.

Por ejemplo, estas son las cabeceras que envía Chrome cuando accede a youtube.com:

:authority: www.youtube.com

:method: GET

:path: /

:scheme: https

accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

accept-encoding: gzip, deflate, br

accept-language: en-US,en;q=0.9

cache-control: no-cache

pragma: no-cache

referer: https://www.google.com/

sec-ch-ua: "Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"

sec-ch-ua-arch: "x86"

sec-ch-ua-bitness: "64"

sec-ch-ua-full-version: "109.0.5414.75"

sec-ch-ua-full-version-list: "Not_A Brand";v="99.0.0.0", "Google Chrome";v="109.0.5414.75", "Chromium";v="109.0.5414.75"

sec-ch-ua-mobile: ?0

sec-ch-ua-model: ""

sec-ch-ua-platform: "Windows"

sec-ch-ua-platform-version: "15.0.0"

sec-ch-ua-wow64: ?0

sec-fetch-dest: document

sec-fetch-mode: navigate

sec-fetch-site: same-origin

sec-fetch-user: ?1

upgrade-insecure-requests: 1

user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36

x-client-data: CIm2yQEIorbJAQjEtskBCKmdygEI5PDKAQiWocsBCKr2zAEI7oLNAQibiM0BCLqIzQEI9YjNAQ==

Decoded:

message ClientVariations {

// Active client experiment variation IDs.

repeated int32 variation_id = [3300105, 3300130, 3300164, 3313321, 3324004, 3330198, 3357482, 3359086, 3359771, 3359802, 3359861];

}

Las cookies de Internet

Las cookies web, o cookies HTTP, son pequeños archivos de texto que un sitio web almacena en el navegador del usuario. Después, cada vez que el usuario envía una nueva solicitud al sitio web, las cookies se incluyen automáticamente.

Son identificables de forma única, y puede encontrarlos como:

  • cookies de sesión: son temporales y expiran cuando el usuario cierra el navegador
  • cookies persistentes: tienen una fecha de caducidad determinada y permanecen en el dispositivo del usuario hasta que caducan o hasta que el usuario las borra.

Los sitios web utilizan cookies para personalizar la experiencia del usuario. Esto puede incluir recordar su información de inicio de sesión y almacenar el contenido de la cesta de la compra para entender cómo interactúan los usuarios con el sitio web y ofrecer publicidad dirigida.

Tomando youtube.com también como ejemplo, podemos darnos cuenta de lo que almacenan las cookies:

cookie: CONSENT=YES+srp.gws-20210816-0-RC3.ro+FX+801; __Secure-3PAPISID=jG4abs_wYhyzcDG5/A2yfWlePlb1U9fglf; VISITOR_INFO1_LIVE=pJuwGIYiJlE; __Secure-3PSIDCC=AEf-XMRV_MjLL0AWdGWngxFHvNUF3OIpk3_jdeUwRiZ76WZ3XsSY0Vlsl1jM9n7FLprKTqFzvw; __Secure-3PSID=RAi8PYLbf3qLvF1oEav9BnHK_eOXwimNM-0xwTQPj1-QVG1Xwpz17T4d-EGzT6sVps1PjQ.; YSC=4M3JgZEwyiA; GPS=1; DEVICE_INFO=ChxOekU1TURJMk1URTBOemd5TWpJeU5qVTJOdz09EOvgo54GGOvgo54G; PREF=tz=Europa.Bucarest&f6=40000000&f4=4000000; CONSISTENCY=ACHmjUr7DnoYSMf5OL-vaunKYfoLGz1lWYRUZRepFyIBDRpp_jrEa85E4wgRJLJ2j15l688hk9IVQu7fIjYXo7sdsZamArxVHTMuChgHd22PkX_mbfifnMjyp4OX2swyQJRS-8PE6cOCt_6129fGyBs; amp_adc4c4=Ncu7lbhgeiAAYqecSmyAsS.MXVDWTJd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1gn4emd4v.1gn4en556.0.4.4

La importancia de las cabeceras y las cookies en el web scraping

En el web scraping, puede utilizar cabeceras y cookies para eludir las medidas de seguridad y acceder a contenidos restringidos, así como para proporcionar información que ayude a identificar su script de scraping como un navegador legítimo.

Por ejemplo, si especifica el encabezado User-Agent correcto (más detalles en la siguiente sección), puede hacer que su script aparezca como si fuera un navegador Chrome, lo que puede ayudarle a evitar ser detectado por el sitio web.

Además, al almacenar y enviar cookies, su scraper puede acceder a contenidos que sólo están disponibles para usuarios registrados. Como el sitio web utiliza cookies para ofrecer publicidad dirigida, también puede utilizarlas para extraer datos más precisos y conocer mejor el sitio web.

Además de jugar con las cabeceras HTTP y las cookies, tenga en cuenta algunas prácticas recomendadas de raspado web bastante útiles que se enumeran en esta guía.

Cabeceras comunes utilizadas en el web scraping

Hay muchas cabeceras diferentes que se pueden utilizar en el web scraping, pero algunas de las más utilizadas son:

Usuario-Agente

Se utiliza para identificar el navegador y el sistema operativo que utiliza el cliente que realiza la solicitud. Esta información es utilizada por los servidores para determinar qué navegador y sistema operativo está utilizando el cliente con el fin de proporcionar el contenido y las funciones adecuadas.

La cadena User-Agent contiene información como el nombre del navegador, la versión y la plataforma. Por ejemplo, una cadena User-Agent para Google Chrome en Windows podría tener este aspecto:

Usuario-Agente: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/109.0.0.0 Safari/537.36

En el web scraping, al especificar un User-Agent que pertenece a un navegador web común, puede hacer que su script aparezca como un navegador que es comúnmente utilizado por los usuarios legítimos, por lo que es menos probable que sea bloqueado.

Acepte

Se utiliza para especificar los tipos de contenido que el navegador está dispuesto a aceptar en respuesta a una petición HTTP, como texto, imágenes, audio o vídeo. Una cabecera Accept puede tener este aspecto:

Accept: 
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8

En el web scraping, especificando la cabecera Accept correcta, puedes asegurarte de que tu script recibe los datos correctos. Por ejemplo, si desea copiar una página HTML, puede especificar el encabezado Accept como text/html.

Sin embargo, algunos sitios web pueden utilizar este encabezado para detectar scrapers, por lo que es importante utilizarlo con cuidado y sólo cuando sea necesario.

Accept-Language

Esta cabecera especifica el idioma preferido del contenido que el navegador está dispuesto a aceptar en respuesta a una petición HTTP. La cabecera Accept-Language es utilizada por los servidores para determinar qué idioma enviar al cliente.

Un navegador que solicite una página HTML en inglés puede enviar una cabecera Accept-Language con el siguiente aspecto:

Accept-Language: en-US,en;q=0.9

Galleta

Los sitios web utilizan este encabezado para enviar cookies a un cliente después de realizar una solicitud. Una cabecera Cookie puede tener este aspecto:

Cookie: session_id=1234567890; user_id=johndoe

En el web scraping, se puede utilizar esta cabecera para pasar cookies de sesión y acceder a contenidos que sólo están disponibles para usuarios registrados. Otro caso de uso sería utilizar cookies persistentes para obtener resultados personalizados.

Referencia

Esta cabecera especifica la URL de la página web anterior desde la que se siguió un enlace a la página actual. Lo utilizan los servidores para rastrear el origen de la solicitud y comprender el contexto de la misma.

Por ejemplo, si un usuario hace clic en un enlace de una página web a otra, el navegador envía una petición a la segunda página web con la URL de la primera en la cabecera Referer. Así, la petición a la segunda página web tendría una cabecera Referer similar a la siguiente:

Referencia: https://www.example.com/

En el web scraping, puede utilizar el encabezado Referer para acceder a sitios web que no permiten solicitudes directas.

Recuperación de cabeceras y cookies de un navegador real

Pero basta de teoría. Veamos cómo se pueden extraer las cabeceras HTTP y las cookies web que se envían a un sitio web.

Volviendo a nuestro ejemplo, navega hasta youtube.com en tu navegador real. A continuación, haz clic con el botón derecho del ratón en cualquier parte de la página y elige la opción "Inspeccionar". Cuando se abran las Herramientas para desarrolladores, ve a la pestaña "Red".

blog-image

Después de refrescar la página debería ver las solicitudes cargándose en tiempo real. Haz clic en la primera (y la principal) y aparecerá una pestaña adicional.

blog-image

Aquí puedes ver todos los detalles de la solicitud que enviaste: URL, método, código de estado, dirección remota y, lo más importante: las cabeceras de solicitud y respuesta que estábamos buscando.

Uso de cabeceras personalizadas en el web scraping

  • utilizar httpbin.org para mostrar las cabeceras enviadas por un navegador
  • elija un lenguaje de programación y envíe una solicitud GET básica para ver las cabeceras
  • pasar las cabeceras personalizadas que has cogido
  • repite el proceso para node.js y python
  • reescribir la sección para WSA
    - enlace a los documentos de la API
    - describir la función de cabeceras personalizadas

Ahora vamos a ver cómo podemos hacer uso de estas cabeceras para mejorar nuestros scrapers. Para esta parte, tomaremos como ejemplo un simple sitio web de mirroring, que nos mostrará directamente las cabeceras que enviemos: https://httpbin.org/headers.

blog-image

Copiamos el contenido del objeto "headers" y empezamos a escribir el código.

Node.js

Después de asegurarte de que tu entorno Node.js está configurado correctamente y tu proyecto inicializado, ejecuta el siguiente código:

import got from 'got';

(async () => {

const response = await got('https://httpbin.org/headers')

console.log(response.body)

})()

De esta forma podemos ver cómo es la petición GET más básica. El resultado debería ser:

{

"headers": {

"Accept-Encoding": "gzip, deflate, br",

"Host": "httpbin.org",

"User-Agent": "got (https://github.com/sindresorhus/got)",

"X-Amzn-Trace-Id": "Root=1-63c93ff5-0c352d6319620b3d6b46df02"

}

}

Esto se ve muy diferente de lo que vimos en nuestro navegador. El User-Agent por sí solo hace que sea muy fácil para un servidor detectar que la solicitud es automatizada.

Ahora pasemos nuestras cabeceras personalizadas y enviemos la petición de nuevo:

import got from 'got';

(async () => {

const custom_headers = {

"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",

"Accept-Encoding": "gzip, deflate, br",

"Accept-Language": "en-US,en;q=0.9",

"Cache-Control": "no-cache",

"Cookie": "amp_d915a9=sd12OA1w0P4xMKsMYSmY9n.MXVDWTJjd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1ggrl757h.1ggrl75ci.0.1o.1o; amp_adc4c4=P3ZIfUgU8qzSHI-y0gZvbk.MXVDWTJjd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1gn51hk3v.1gn51lql7.0.e.e",

"Host": "httpbin.org",

"Pragma": "no-cache",

"Sec-Ch-Ua": "\"Not_A Brand\";v=\"99\", \"Google Chrome\";v=\"109\", \"Chromium\";v=\"109\"",

"Sec-Ch-Ua-Mobile": "?0",

"Sec-Ch-Ua-Platform": "\"Windows\"",

"Sec-Fetch-Dest": "document",

"Sec-Fetch-Mode": "navigate",

"Sec-Fetch-Site": "none",

"Sec-Fetch-User": "?1",

"Upgrade-Insecure-Requests": "1",

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",

"X-Amzn-Trace-Id": "Root=1-63c93e34-1ad0141279d49bfc28fb058e"

}

const response = await got('https://httpbin.org/headers', {

headers: custom_headers

})

console.log(response.body)

})()

Ejecutando el script de nuevo, deberías notar que ahora nuestra petición parece enviada desde un navegador Chrome real aunque no hayamos abierto uno real.

Python

Ahora vamos a intentar lo mismo en Python. Aunque la sintaxis y las bibliotecas son diferentes, el principio es el mismo.

import requests

url = 'https://httpbin.org/headers'

headers = {

"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",

"Accept-Encoding": "gzip, deflate, br",

"Accept-Language": "en-US,en;q=0.9",

"Cache-Control": "no-cache",

"Cookie": "amp_d915a9=sd12OA1w0P4xMKsMYSmY9n.MXVDWTJjd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1ggrl757h.1ggrl75ci.0.1o.1o; amp_adc4c4=P3ZIfUgU8qzSHI-y0gZvbk.MXVDWTJjd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1gn51hk3v.1gn51lql7.0.e.e",

"Host": "httpbin.org",

"Pragma": "no-cache",

"Sec-Ch-Ua": "\"Not_A Brand\";v=\"99\", \"Google Chrome\";v=\"109\", \"Chromium\";v=\"109\"",

"Sec-Ch-Ua-Mobile": "?0",

"Sec-Ch-Ua-Platform": "\"Windows\"",

"Sec-Fetch-Dest": "document",

"Sec-Fetch-Mode": "navigate",

"Sec-Fetch-Site": "none",

"Sec-Fetch-User": "?1",

"Upgrade-Insecure-Requests": "1",

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",

"X-Amzn-Trace-Id": "Root=1-63c93e34-1ad0141279d49bfc28fb058e"

}

response = requests.get(url, headers=headers)

print(response.text)

El resultado tras ejecutar el script será el mismo independientemente del lenguaje de programación que utilices.

Encabezados personalizados en WebScrapingAPI

Cualquier API de scraping respetable debería proporcionar la potente función de pasar cabeceras HTTP y cookies personalizadas a una solicitud. El estándar puede variar en función de la API, así que asegúrate de consultar siempre primero la documentación oficial.

Por defecto, WebScrapingAPI proporciona un conjunto de cabeceras personalizadas con cada solicitud. Las cabeceras User-Agent aleatorias serían sólo uno de los ejemplos.

Sin embargo, como los sitios web pueden volverse extra complejos o simplemente obsoletos, tienes la libertad de desactivar este comportamiento y personalizar completamente tu solicitud. Sólo asegúrese de obtener una clave de API en primer lugar, a continuación, ejecute el código siguiente:

import got from 'got';

(async () => {

const response = await got("https://api.webscrapingapi.com/v1", {

searchParams: {

api_key: "YOUR_API_KEY",

url: "https://httpbin.org/headers",

keep_headers: '0',

},

headers: {

"Wsa-Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",

"Wsa-Accept-Encoding": "gzip, deflate, br",

"Wsa-Accept-Language": "en-US,en;q=0.9",

"Wsa-Cache-Control": "no-cache",

"Wsa-Cookie": "amp_d915a9=sd12OA1w0P4xMKsMYSmY9n.MXVDWTJjd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1ggrl757h.1ggrl75ci.0.1o.1o; amp_adc4c4=P3ZIfUgU8qzSHI-y0gZvbk.MXVDWTJjd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1gn51hk3v.1gn51lql7.0.e.e",

"Wsa-Pragma": "no-cache",

"Wsa-Sec-Ch-Ua": "\"Not_A Brand\";v=\"99\", \"Google Chrome\";v=\"109\", \"Chromium\";v=\"109\"",

"Wsa-Sec-Ch-Ua-Mobile": "?0",

"Wsa-Sec-Ch-Ua-Platform": "\"Windows\"",

"Wsa-Sec-Fetch-Dest": "document",

"Wsa-Sec-Fetch-Mode": "navigate",

"Wsa-Sec-Fetch-Site": "none",

"Wsa-Sec-Fetch-User": "?1",

"Wsa-Upgrade-Insecure-Requests": "1",

"Wsa-User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",

"Wsa-X-Amzn-Trace-Id": "Root=1-63c93e34-1ad0141279d49bfc28fb058e"

}

})

console.log(response.body)

})()

En este caso, de acuerdo con los documentos de la API, tenemos que añadir el prefijo "Wsa-" al nombre de una cabecera para pasarla a la solicitud. Esta medida se ha implementado para evitar que se pasen cabeceras involuntariamente, como cuando la solicitud de la API se envía desde un navegador.

Conclusión

Este artículo ha presentado una visión general de la importancia y el uso de las cabeceras HTTP y las cookies web en el web scraping.

Hemos hablado de lo que son las cabeceras y las cookies, de cómo puede utilizarlas para acceder a contenidos restringidos y hacer que su script de scraping parezca un navegador legítimo, así como de cómo pueden utilizarse para el seguimiento y el análisis.

También presentamos algunas de las cabeceras más comunes utilizadas en el web scraping y explicamos cómo recuperar cabeceras y cookies de un navegador real. A continuación, utilizamos ejemplos de código para ilustrar cómo utilizarlos en tus scripts de scraping.

Al comprender y utilizar eficazmente las cabeceras y las cookies, puede mejorar la eficacia de sus esfuerzos de web scraping. Con este conocimiento, puede llevar sus habilidades de scraping al siguiente nivel y extraer información valiosa de la web.

Noticias y actualidad

Manténgase al día de las últimas guías y noticias sobre raspado web suscribiéndose a nuestro boletín.

We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Artículos relacionados

miniatura
GuíasCómo raspar datos de productos de Amazon: Guía completa de mejores prácticas y herramientas

Explore las complejidades del scraping de datos de productos de Amazon con nuestra guía en profundidad. Desde las mejores prácticas y herramientas como Amazon Scraper API hasta las consideraciones legales, aprenda a superar los desafíos, eludir los CAPTCHA y extraer información valiosa de forma eficiente.

Suciu Dan
avatar de autor
Suciu Dan
15 minutos de lectura
miniatura
Casos prácticosUtilizando Web Scraping para Datos Alternativos en Finanzas: Guía completa para inversores

Explore el poder transformador del web scraping en el sector financiero. Desde datos de productos hasta análisis de opiniones, esta guía ofrece información sobre los distintos tipos de datos web disponibles para tomar decisiones de inversión.

Mihnea-Octavian Manolache
avatar de autor
Mihnea-Octavian Manolache
13 min leer
miniatura
Casos prácticosLiberar el poder de los datos financieros: Exploración de datos tradicionales y alternativos

Sumérjase en el papel transformador de los datos financieros en la toma de decisiones empresariales. Comprender los datos financieros tradicionales y la importancia emergente de los datos alternativos.

Suciu Dan
avatar de autor
Suciu Dan
8 min leer