Scrapy爬虫代理中间件的使用
构建代理池
首先,使用GitHub上的开源项目ProxyPool在服务器上构建代理池
在Scrapy爬虫的middlewares.py中添加代理中间件
class RandomProxyMiddleware(object):
def process_exception(self, request, exception, spider):
headers = {'Connection': 'close'}
proxy_ip = json.loads(requests.get(PROXY_POOL_URL, headers=headers).text).get('proxy')
print("当前使用IP是:" + proxy_ip)
request.meta["proxy"] = 'http://' + proxy_ip
return request
Process_exception这个函数的作用是在程序出现异常时,为发生异常的请求添加代理,并将请求重新放入请求队列中
在settings.py中启动启用代理中间件
DOWNLOADER_MIDDLEWARES = {
# 随机用户头
'Crawler.middlewares.RandomUserAgentMiddlware': 543,
# 随机代理
'Crawler.middlewares.RandomProxyMiddleware': 600,
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
}
重新启动爬虫
scrapy crawl ...