Ir al contenido

403 Prohibido: La pesadilla de los web scrapers (y cómo evitarlo)

Si alguna vez ha intentado extraer datos de sitios web, es casi seguro que se haya topado con el temido error "403 Prohibido" en algún momento. Este código de estado HTTP indica que el servidor entendió su solicitud, pero se niega a cumplirla. En otras palabras, no tiene permiso para acceder al recurso que solicitó.

Para los web scrapers, los errores 403 son un dolor de cabeza constante. Los sitios web los utilizan para impedir el acceso no autorizado a las páginas y bloquear el tráfico que parece provenir de bots o scrapers en lugar de usuarios humanos. Obtener una respuesta 403 puede detener su proyecto de web scraping.

¡Pero no te desesperes! Si bien los errores 403 pueden resultar frustrantes, no son insuperables. Con las técnicas adecuadas, es posible evitar activar 403 y mantener su web scraper funcionando sin problemas. En esta guía, profundizaremos en las causas de los errores 403 y exploraremos estrategias para prevenirlos. ¡Empecemos!

Por qué los Web Scrapers encuentran errores 403

Hay algunas razones principales por las que un web scraper puede recibir una respuesta 403 Prohibida de un sitio web:

  1. Solicitar un recurso restringido: Algunas páginas simplemente están prohibidas para usuarios no autorizados. Por ejemplo, intentar acceder a una página que requiere iniciar sesión, como un panel de usuario, a menudo generará un error 403 si no tiene una sesión válida.

  2. Autenticación faltante: Muchos sitios web requieren alguna forma de autenticación, como iniciar sesión con un nombre de usuario y contraseña, para acceder a determinadas páginas. Si su web scraper no proporciona las credenciales de autenticación necesarias, probablemente recibirá una respuesta 403.

  3. Detección de bots: Los sitios web suelen emplear varias técnicas para detectar y bloquear el tráfico que parece provenir de bots o scrapers. Si un sitio cree que su web scraper es una herramienta automatizada en lugar de un usuario humano, puede responder con un error 403.

  4. Sistemas anti-robots: Algunos sitios web utilizan soluciones anti-bot dedicadas como Cloudflare, Imperva o PerimeterX para protegerse contra el scraping y otras amenazas automatizadas. Estos sistemas analizan patrones de tráfico y bloquean solicitudes que parecen sospechosas, y a menudo devuelven errores 403.

Para raspar sitios web con éxito, necesitamos formas de evitar estos problemas y convencer a los sitios de que nuestro raspador web es un usuario legítimo y autorizado. Afortunadamente, hay varios enfoques que podemos adoptar. Veamos algunas de las tácticas más efectivas.

Proporcionar autenticación

Si un sitio web requiere iniciar sesión para acceder al contenido que desea extraer, deberá incluir autenticación en su proceso de extracción web. Por lo general, esto implica dos pasos:

  1. Inspeccionar el proceso de inicio de sesión: utilice las herramientas de desarrollo de su navegador para observar el tráfico de la red al iniciar sesión manualmente en el sitio. Busque la solicitud que envía las credenciales de inicio de sesión y anote la URL, el método de solicitud, los encabezados y el cuerpo de la solicitud. Deberá replicar esta solicitud en su raspador web.

  2. Iniciar sesión mediante programación: Utilice una biblioteca como Requests de Python o Axios de Node.js para enviar una solicitud de inicio de sesión que imite la que observó. Capture las cookies que devuelva el sitio, ya que a menudo contienen tokens de sesión necesarios para autenticar solicitudes posteriores. Incluya estas cookies en los encabezados de sus solicitudes de raspado web para mantener una sesión de inicio de sesión válida.

A continuación se muestra un ejemplo de cómo iniciar sesión mediante programación en un sitio usando Python y Solicitudes:

import requests

# Start a new session
session = requests.Session() 

# Send a POST request to the login URL with the necessary credentials
login_data = {
    ‘username‘: ‘my_username‘,
    ‘password‘: ‘my_password‘,
}
response = session.post(‘https://example.com/login‘, data=login_data)

# The session now contains the cookies needed to authenticate future requests
response = session.get(‘https://example.com/restricted_page‘)

Al autenticar su raspador web e incluir las cookies y encabezados necesarios en sus solicitudes, puede evitar errores 403 causados ​​por permisos faltantes.

Técnicas de sigilo

Por supuesto, iniciar sesión no siempre es suficiente. Los sitios web están inmersos en un constante juego del gato y el ratón con web scrapers, buscando señales que distingan a los robots de los usuarios humanos. Para evitar ser bloqueados, los web scrapers deben integrarse imitando el comportamiento humano lo más fielmente posible.

Algunas técnicas clave de sigilo incluyen:

  • Agentes de usuario rotativos: El agente de usuario es una cadena que identifica al cliente que realiza una solicitud. Usar el mismo agente de usuario para todas las solicitudes es un claro indicio de que el tráfico proviene de un bot. En su lugar, mantenga un grupo de cadenas de agentes de usuario y seleccione aleatoriamente una diferente para cada solicitud.

  • Direcciones IP rotativas: Enviar un gran volumen de solicitudes desde una única dirección IP es otra señal de alerta para los sistemas de detección de bots. Utilice un servicio de proxy para enrutar solicitudes a través de una variedad de direcciones IP. Para obtener mejores resultados, elija un proveedor que ofrezca un gran conjunto de IP residenciales.

  • Patrones de solicitud aleatorios: Los humanos no navegan por sitios web de forma perfectamente regular. Hacen pausas, cambian de página de forma errática y varían el tiempo entre solicitudes. Introduzca retrasos aleatorios entre sus solicitudes de web scraping y evite rastrear sitios en un patrón perfectamente predecible.

  • Manejo de CAPTCHA: Algunos sitios web presentarán CAPTCHA cuando sospechen de actividad de bot. Los CAPTCHA pueden ser difíciles de resolver automáticamente para los web scrapers. Si los encuentra con frecuencia, es posible que necesite utilizar un servicio de resolución de CAPTCHA que utilice trabajadores humanos para completar los desafíos en nombre de su raspador.

A continuación se muestra un ejemplo de una solicitud más sigilosa en Python que utiliza un agente de usuario aleatorio y retrasos:

import requests
import random
import time

# List of user agent strings
user_agents = [    
    ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36‘,
    ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36‘,
    ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36‘,  
]

# Randomize user agent 
headers = {‘User-Agent‘: random.choice(user_agents)}

# Introduce a random delay of 1-5 seconds
time.sleep(random.randint(1, 5))

# Send the request
response = requests.get(‘https://example.com‘, headers=headers)

Si toma medidas para que el tráfico de su web scraper parezca lo más "humano" posible, puede reducir significativamente el riesgo de encontrar errores 403 y otros obstáculos.

Automatización indetectable

Para realizar el web scraping de la forma más sigilosa posible, es posible que quieras utilizar una herramienta de automatización completa del navegador como Puppeteer o Playwright. Estas herramientas ejecutan un navegador real (Chrome o Firefox) mediante programación, lo que le permite interactuar con sitios web de una manera que es muy difícil de distinguir de los usuarios humanos reales.

Las herramientas de automatización del navegador se pueden configurar para lograr el máximo sigilo. Por ejemplo, puede configurarlos para bloquear el código de huellas dactilares de JavaScript, enmascarar los signos reveladores de automatización en los objetos de Navigator y aleatorizar las dimensiones de la ventana gráfica. Al controlar un navegador real, también obtienes el manejo automático de cookies, encabezados, redireccionamientos y otros aspectos de HTTP que las bibliotecas básicas de web scraping no administran por ti.

La desventaja de la automatización del navegador es que requiere más recursos y es más lenta que enviar solicitudes HTTP simples con una biblioteca como Requests o Axios. Sin embargo, la compensación en rendimiento puede valer la pena para sitios que son particularmente agresivos a la hora de bloquear scrapers.

Aquí hay un ejemplo básico del uso de Puppeteer en Node.js para visitar una página en Chrome sin cabeza:

const puppeteer = require(‘puppeteer‘);

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  // Configure the browser for stealth (omitted for brevity)

  await page.goto(‘https://example.com‘);

  // Scrape data from the page...

  await browser.close();
})();

Con alguna configuración adicional, herramientas como Puppeteer pueden ser una forma poderosa de automatizar el scraping y evitar la detección.

Conclusión

Encontrar errores 403 es una parte inevitable del web scraping, pero con el enfoque correcto no tienen por qué descarrilar sus proyectos. Si comprende por qué ocurren los errores 403 y toma medidas para evitar activarlos (mediante autenticación, técnicas sigilosas y automatización indetectable), podrá mantener su web scraper funcionando sin problemas.

El enfoque más eficaz variará según los sitios web específicos a los que se dirija. Algunos pueden requerir solo encabezados de solicitud simples para evitar errores 403, mientras que otros pueden requerir una configuración completa de automatización del navegador. La clave es comenzar con técnicas básicas y agregar capas de sigilo más sofisticadas según sea necesario en función de los obstáculos que encuentres.

Si el desafío en constante evolución de evitar los 403 y otras medidas anti-scraping le parece abrumador, es posible que desee considerar utilizar una API de web scraping lista para usar en lugar de construir y mantener su propia infraestructura de scraping. Servicios como ScrapingBee y ScraperAPI ofrecen raspadores probados en batalla con evitación 403 incorporada que pueden ahorrarle un tiempo de desarrollo sustancial.

Ya sea que elija utilizar su propio raspador web o utilizar una solución prediseñadas, lo importante es no permitir que los errores 403 le impidan obtener los datos que necesita. Con un poco de perseverancia y las herramientas adecuadas en su kit, puede mantener su web scraper en funcionamiento ante cualquier contramedida anti-bot. ¡Feliz raspado!

Únase a la conversación

Su dirección de correo electrónico no será publicada. Las areas obligatorias están marcadas como requeridas *