Comment utilisez-vous la prise en charge du proxy avec le framework de grattage Web python Scrapy ?
Réponses
Trop de publicités?Proxy unique
-
Activez
HttpProxyMiddleware
dans votresettings.py
, comme ceci :DOWNLOADER_MIDDLEWARES = { 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 1 }
-
passer le proxy pour demander via
request.meta
:request = Request(url="http://example.com") request.meta['proxy'] = "host:port" yield request
Vous pouvez également choisir une adresse proxy au hasard si vous disposez d'un pool d'adresses. Comme ça:
Plusieurs procurations
class MySpider(BaseSpider):
name = "my_spider"
def __init__(self, *args, **kwargs):
super(MySpider, self).__init__(*args, **kwargs)
self.proxy_pool = ['proxy_address1', 'proxy_address2', ..., 'proxy_addressN']
def parse(self, response):
...parse code...
if something:
yield self.get_request(url)
def get_request(self, url):
req = Request(url=url)
if self.proxy_pool:
req.meta['proxy'] = random.choice(self.proxy_pool)
return req
1-Créez un nouveau fichier appelé "middlewares.py" et enregistrez-le dans votre projet scrapy et ajoutez-y le code suivant.
import base64
class ProxyMiddleware(object):
# overwrite process request
def process_request(self, request, spider):
# Set the location of the proxy
request.meta['proxy'] = "http://YOUR_PROXY_IP:PORT"
# Use the following lines if your proxy requires authentication
proxy_user_pass = "USERNAME:PASSWORD"
# setup basic authentication for the proxy
encoded_user_pass = base64.encodestring(proxy_user_pass)
request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
2 – Ouvrez le fichier de configuration de votre projet (./project_name/settings.py) et ajoutez le code suivant
DOWNLOADER_MIDDLEWARES = {
'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 110,
'project_name.middlewares.ProxyMiddleware': 100,
}
Maintenant, vos demandes devraient être transmises par ce proxy. Simple, n'est-ce pas ?
Il existe un bon middleware écrit par quelqu'un [1] : https://github.com/aivarsk/scrapy-proxies "Scrapy proxy middleware"