Scrapy如何使用代理池
Scrapy how to use a proxy pool
我正在使用 Scrapy 并尝试通过创建自定义 DownloaderMiddleware 来使用代理池。我遇到了一些麻烦,想在这里得到一些帮助(我看了Scrapy网站上的文档,但是没有代码示例)
我的python代码是:
import random
class ProxyRotator(object):
proxy_pool = ['ip1...', 'ip2...', 'ip3...']
def process_request(self, request, spider):
request.meta['proxy'] = "http://" + self.proxy_pool[random.randint(0, len(self.proxy_pool) - 1)] + ":80"
return request
并且在 settings.py 中,我添加了
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
'pricecheck_crawler.ProxyMiddleware.ProxyRotator': 100,
}
目前,抓取工具未从网站获取任何信息。
日志显示:
2016-02-17 11:27:50 [scrapy] 信息:抓取 0 页(在 0 pages/min),抓取 0 个项目(在 0 items/min)
2016-02-17 11:27:50 [scrapy] 调试:Telnet 控制台侦听 127.0.0.1:6051
2016-02-17 11:28:50 [scrapy] 信息:抓取 0 页(在 0 pages/min),抓取 0 个项目(在 0 items/min)
2016-02-17 11:29:50 [scrapy] 信息:抓取 0 页(在 0 pages/min),抓取 0 个项目(在 0 items/min)
试试这个。删除 return request
语句,因为它将 return 请求返回到 process_request 并且 process_response
将永远不会被调用。在此之前确保您只使用 http 或 https 代理:
def process_request(self, request, spider):
request.meta['proxy'] = self.proxy_pool[random.randint(0, len(self.proxy_pool) - 1)]
您也可以将设置更改为如下内容:
'pricecheck_crawler.ProxyMiddleware.ProxyRotator': 100,
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110
同时验证 request.meta['proxy'] = "http://ip:port"
.
另一个方向可能是使用外部程序,例如 proxifier
,以便通过代理传输带宽。
您可以使用Scrapy_proxy_pool
只需在 settings.py
中添加您当前的代码
PROXY_POOL_ENABLED = True
我正在使用 Scrapy 并尝试通过创建自定义 DownloaderMiddleware 来使用代理池。我遇到了一些麻烦,想在这里得到一些帮助(我看了Scrapy网站上的文档,但是没有代码示例)
我的python代码是:
import random
class ProxyRotator(object):
proxy_pool = ['ip1...', 'ip2...', 'ip3...']
def process_request(self, request, spider):
request.meta['proxy'] = "http://" + self.proxy_pool[random.randint(0, len(self.proxy_pool) - 1)] + ":80"
return request
并且在 settings.py 中,我添加了
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
'pricecheck_crawler.ProxyMiddleware.ProxyRotator': 100,
}
目前,抓取工具未从网站获取任何信息。 日志显示:
2016-02-17 11:27:50 [scrapy] 信息:抓取 0 页(在 0 pages/min),抓取 0 个项目(在 0 items/min)
2016-02-17 11:27:50 [scrapy] 调试:Telnet 控制台侦听 127.0.0.1:6051
2016-02-17 11:28:50 [scrapy] 信息:抓取 0 页(在 0 pages/min),抓取 0 个项目(在 0 items/min)
2016-02-17 11:29:50 [scrapy] 信息:抓取 0 页(在 0 pages/min),抓取 0 个项目(在 0 items/min)
试试这个。删除 return request
语句,因为它将 return 请求返回到 process_request 并且 process_response
将永远不会被调用。在此之前确保您只使用 http 或 https 代理:
def process_request(self, request, spider):
request.meta['proxy'] = self.proxy_pool[random.randint(0, len(self.proxy_pool) - 1)]
您也可以将设置更改为如下内容:
'pricecheck_crawler.ProxyMiddleware.ProxyRotator': 100,
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110
同时验证 request.meta['proxy'] = "http://ip:port"
.
另一个方向可能是使用外部程序,例如 proxifier
,以便通过代理传输带宽。
您可以使用Scrapy_proxy_pool
只需在 settings.py
中添加您当前的代码PROXY_POOL_ENABLED = True