我正在使用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]
现在,我不明白scrapy将如何考虑我的实现而不是默认类。经过一些搜索和头脑风暴,我理解的是,我需要在settings.py中进行更改
DOWNLOADER_MIDDLEWARES = {
'IPProxy.middlewares.MyCustomDownloaderMiddleware': 543,
'IPProxy.IPProxy.spiders.RandomProxy': 600
}
为了更好地理解我对读者的项目结构,我在列表中添加了一些随机值的第二个元素。 我的项目结构是:
我的问题是,
答案 0 :(得分:1)
如果您要禁用内置HttpProxyMiddleware
下载器中间件的假设,请将其值DOWNLOADER_MIDDLEWARES
设置为None
:
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': None,
'IPProxy.middlewares.MyCustomDownloaderMiddleware': 543,
'IPProxy.IPProxy.spiders.RandomProxy': 600
}