For the complete documentation index, see llms.txt. This page is also available as Markdown.

Scrapy

Sigue una guía paso a paso en Python para integrar Oxylabs Web Unblocker con Scrapy

Integrar Scrapy con Oxylabs Web Unblocker para mejorar el acceso web, manejar CAPTCHAs y ejecutar el renderizado de JavaScript automáticamente. Esta guía cubre Request Metadata y Custom Downloader Middleware.

1

Elige el método de integración

Scrapy admite dos métodos para enrutar el tráfico a través de Web Unblocker: Request Meta Parameter (configuración por solicitud) y Custom Downloader Middleware (configuración para todo el proyecto).

Método 1: Parámetro meta de la solicitud

Pasa los datos de autenticación de Web Unblocker directamente a instancias individuales scrapy.Request usando el meta diccionario. También puedes proporcionar encabezados personalizados de funciones de Web Unblocker dentro de los headers de la solicitud.

import scrapy

class UnblockerSpider(scrapy.Spider):
    name = "unblocker_spider"

    def start_requests(self):
        url = "https://sandbox.oxylabs.io/products"
        proxy_uri = "http://YOUR_USERNAME:YOUR_PASSWORD@unblock.oxylabs.io:60000"
        
        # Encabezados personalizados opcionales de Web Unblocker
        headers = {
            "x-oxylabs-render": "html",           # Habilita el renderizado de JavaScript
            "X-Oxylabs-Geo-Location": "Germany",  # Establece la segmentación geográfica
        }

        yield scrapy.Request(
            url=url,
            callback=self.parse,
            headers=headers,
            meta={"proxy": proxy_uri}
        )

    def parse(self, response):
        for product in response.css(".product-card"):
            yield {
                "title": product.css(".title::text").get(),
                "price": product.css(".price-wrapper::text").get(),
            }

Método 2: Middleware personalizado de descarga (recomendado)

Para enrutar todas las solicitudes del spider a través de Web Unblocker globalmente sin modificar los métodos de solicitud individuales, implementa un Custom Scrapy Downloader Middleware.

Abre el archivo middlewares.py archivo y añade el OxylabsWebUnblockerMiddleware clase:

class OxylabsWebUnblockerMiddleware:
    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler.settings)

    def __init__(self, settings):
        self.username = settings.get("OXYLABS_UNBLOCKER_USER")
        self.password = settings.get("OXYLABS_UNBLOCKER_PASS")
        self.endpoint = settings.get("OXYLABS_UNBLOCKER_ENDPOINT", "unblock.oxylabs.io:60000")

    def process_request(self, request, spider):
        proxy_uri = f"http://{self.username}:{self.password}@{self.endpoint}"
        request.meta["proxy"] = proxy_uri

Luego registra el middleware y especifica tus credenciales en settings.py:

# Configuración de Web Unblocker
OXYLABS_UNBLOCKER_USER = "YOUR_USERNAME"
OXYLABS_UNBLOCKER_PASS = "YOUR_PASSWORD"
OXYLABS_UNBLOCKER_ENDPOINT = "unblock.oxylabs.io:60000"

# Enable Downloader Middleware
DOWNLOADER_MIDDLEWARES = {
    "myproject.middlewares.OxylabsWebUnblockerMiddleware": 100,
    "scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": 110,
}
2

Introduce las credenciales y los encabezados personalizados

Web Unblocker usa un único punto de entrada centralizado para todas las solicitudes:

Host: unblock.oxylabs.io

Puerto: 60000

Nombre de usuario: YOUR_USERNAME

Contraseña: YOUR_PASSWORD

Web Unblocker usa IA para generar automáticamente huellas del navegador y encabezados de solicitud óptimos. Por ello, evita pasar encabezados estándar del navegador (como cadenas personalizadas de User-Agent ) a menos que sea necesario. Para controlar el comportamiento de Web Unblocker, pasa los siguientes encabezados personalizados en tus solicitudes:

Encabezado personalizado
Descripción
Valor de ejemplo

x-oxylabs-render

Fuerza el renderizado con Headless Browser para sitios dinámicos con mucho JavaScript. Más información aquí.

html

X-Oxylabs-Geo-Location

Establece la segmentación geográfica (admite nombres de países, estados o códigos ZIP). Más información aquí.

Estados Unidos

X-Oxylabs-Session-Id

Reutiliza la misma dirección IP y sesión entre solicitudes secuenciales. Más información aquí.

session_abc123

x-oxylabs-force-headers

Fuerza a Web Unblocker a pasar tus encabezados personalizados de solicitud al destino.

1

x-oxylabs-force-cookies

Fuerza a Web Unblocker a conservar y enviar cookies personalizadas al sitio de destino.

1

3

Configurar tiempos de espera de respuesta

Al habilitar el renderizado de JavaScript (x-oxylabs-render: html), Web Unblocker usa una instancia interna de Headless Browser para ejecutar los scripts de la página y esperar a que se carguen los elementos dinámicos del DOM.

Como el renderizado del navegador tarda más que las solicitudes HTTP GET estándar, ajusta el tiempo de espera de descarga de Scrapy en settings.py para evitar que se descarten solicitudes:

DOWNLOAD_TIMEOUT = 180
4

Ejecuta la araña

Ejecuta tu spider de Scrapy desde la línea de comandos:

scrapy crawl unblocker_spider

Web Unblocker procesará la solicitud a través de su infraestructura proxy de IA, gestionará la huella del navegador y los reintentos, y devolverá la carga útil final de la página HTML directamente a tu método parse de Scrapy.

Última actualización

¿Te fue útil?