【发布时间】:2019-03-19 14:26:07
【问题描述】:
我必须在有多个使用 scrapy 的爬虫的服务器中实现代理池。
鉴于我已经拥有一个包含多个代理且一直在更新的数据库,我将如何实现代理池。
我不想直接在代码中添加代理,主要是因为很多代理死得很快,而且有些爬虫需要很长时间才能完成。
有没有办法使用中间件或不需要更改我获得的每个爬虫的东西来实现这一点?
谢谢。
【问题讨论】:
标签: python proxy scrapy web-crawler
我必须在有多个使用 scrapy 的爬虫的服务器中实现代理池。
鉴于我已经拥有一个包含多个代理且一直在更新的数据库,我将如何实现代理池。
我不想直接在代码中添加代理,主要是因为很多代理死得很快,而且有些爬虫需要很长时间才能完成。
有没有办法使用中间件或不需要更改我获得的每个爬虫的东西来实现这一点?
谢谢。
【问题讨论】:
标签: python proxy scrapy web-crawler
是的,您可以使用downloader middleware 实现这样的代理处理。
Search Github for ‘scrapy proxy’ 查找一些处理代理配置的下载器中间件示例。
【讨论】:
中间件
import requests
PROXY_POOL_URL = 'http://127.0.0.1:5555/random'
class RandomProxyMiddleware(object):
def process_request(self, request, spider):
proxy_ip = requests.get(PROXY_POOL_URL).text
request.meta["proxy"] = 'http://' + proxy_ip
和设置
DOWNLOADER_MIDDLEWARES = {
'xxxxxxxxxxxxx.middlewares.RandomUserAgentMiddlware': 543,
}
【讨论】: