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.