Para el uso de proxies de enmascaramiento, una vez se ha iniciado el proyecto se debe:
Tener una lista servidores proxy a ser utilizados, se pueden usar varias fuentes, eje: https://free-proxy-list.net/ o https://socks-proxy.net/, etc. El formato para que los servidores sean validos es: LIST_OF_PROXIES = [ ‘http://IP:Pto’, ‘https://IP:Pto’ , ‘socks4://IP:Pto’]
Dentro del archivo middlewares.py se debe añadir el siguiente código a los métodos creados por scrapy
import random
LIST_OF_PROXIES = [
'https://...:..',
'https://...:8080',
'https://...:53281', ...
]
#dentro de la clase DownloaderclassNombrespiderDownloaderMiddleware(object):
...
defprocess_request(self, request, spider):
proxy = random.choice(LIST_OF_PROXIES)
request.meta["proxy"] = proxy
returnNone
...
DOWNLOADER_MIDDLEWARES = {
'nombrespider.middlewares.NombrespiderDownloaderMiddleware': 543,
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 593,
}
Muchas gracias
Me gustaría recomendar aquí un proyecto que me topé en GitHub que se llama CloudProxy. Puedes utilizar instancias de AWS, DigitalOcean, GCP y otros servicios en la nube para crear proxies y así alimentar la lista de proxies con una instancia propia en la nube.
para que sirve el request.meta ??
@tydi68 El atributo
Request.meta
sirve guardar información acerca del Request que están manipulando los middlewares. En la documentación de Request puedes encontrar más información. Al final de todo es solo un diccionario para pasar información entre los middlewares.