Jac*_*iel 5 python scrapy python-2.7 scrapy-spider
我正在使用scrapy 来抓取一些网页。我编写了自定义的ProxyMiddleware类,其中在process_request(self,request,spider)方法中实现了我的要求。这是我的代码(复制):
class ProxyMiddleware(scrapy.downloadermiddlewares.httpproxy):
def __init__(self, proxy_ip=''):
self.proxy_ip = proxy_ip
def process_request(self,request,spider):
ip = random.choice(self.proxy_list)
if ip:
request.meta['proxy'] = ip
return request
proxy_list = [list of proxies]
Run Code Online (Sandbox Code Playgroud)
现在,我不明白scrapy 将如何考虑我的实现而不是默认类。经过一番搜索和头脑风暴,我的理解是,我需要在settings.py中进行更改
DOWNLOADER_MIDDLEWARES = {
'IPProxy.middlewares.MyCustomDownloaderMiddleware': 543,
'IPProxy.IPProxy.spiders.RandomProxy': 600
}
Run Code Online (Sandbox Code Playgroud)
为了让读者更好地了解我的项目结构,我在列表中添加了具有一些随机值的第二个元素。我的项目结构是:
我的问题是,
如果您想禁用内置的HttpProxyMiddleware下载器中间件 - 将其值设置DOWNLOADER_MIDDLEWARES为None:
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': None,
'IPProxy.middlewares.MyCustomDownloaderMiddleware': 543,
'IPProxy.IPProxy.spiders.RandomProxy': 600
}
Run Code Online (Sandbox Code Playgroud)