【发布时间】:2016-01-06 01:32:38
【问题描述】:
我正在使用 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
}
为了让读者更好地了解我的项目结构,我在列表中添加了具有一些随机值的第二个元素。 我的项目结构是:
我的问题是,
- 如何在settings.py中正确使用DOWNLOADER_MIDDLEWARES
- 如何将值分配给 DOWNLOADER_MIDDLEWARES 中的元素
- 如何让 scrapy 调用我的自定义代码而不是默认代码
【问题讨论】:
标签: python python-2.7 scrapy scrapy-spider