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.
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_uriLuego 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,
}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:
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
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 = 180Ejecuta la araña
Ejecuta tu spider de Scrapy desde la línea de comandos:
scrapy crawl unblocker_spiderWeb 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?

