proxys.store

Proxies en Scrapy

HttpProxyMiddleware está activo por defecto: basta con poner la cadena de conexión en el meta de la petición.

Una araña mínima

No hay que activar nada: HttpProxyMiddleware está en la cadena por defecto y lee la clave proxy del meta. Las credenciales van dentro de la dirección, igual que en una cadena de conexión normal.

import scrapy


class IpSpider(scrapy.Spider):
    name = "ip"
    proxy = "http://LOGIN__cr.de:PASSWORD@gw.dataimpulse.com:823"

    def start_requests(self):
        yield scrapy.Request(
            "https://ipinfo.io/json",
            meta={"proxy": self.proxy},
        )

    def parse(self, response):
        self.logger.info(response.text)

Qué tener en cuenta al scrapear

Un reintento en el puerto 823 sale desde otra dirección: eso es la rotación funcionando, no un fallo. Los reintentos de Scrapy se comportan bien aquí, pero nada puede depender de que la dirección se mantenga entre peticiones; para eso están los puertos fijos 10000–20000.

Pon un DOWNLOAD_TIMEOUT holgado: una salida residencial responde más despacio que una de centro de datos y una petición sin timeout puede quedarse colgada minutos. El plan admite hasta dos mil conexiones simultáneas, un techo que el scraping normal no roza.

Seguir leyendo