Python Scrapy如何使用代理池

Python Scrapy如何使用代理池,python,web-scraping,scrapy,web-crawler,Python,Web Scraping,Scrapy,Web Crawler,我正在使用Scrapy,并试图通过创建一个定制的下载程序来使用代理池。我遇到了一些问题,希望在这里得到一些帮助(我查看了Scrapy网站上的文档,但没有代码示例) 我的python代码是: import random class ProxyRotator(object): proxy_pool = ['ip1...', 'ip2...', 'ip3...'] def process_request(self, request, spider): request

我正在使用Scrapy,并试图通过创建一个定制的下载程序来使用代理池。我遇到了一些问题,希望在这里得到一些帮助(我查看了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[抓取]信息:抓取0页(以0页/分钟的速度),抓取0项(以0项/分钟的速度)

2016-02-17 11:27:50[scrapy]调试:Telnet控制台监听127.0.0.1:6051

2016-02-17 11:28:50[抓取]信息:抓取0页(以0页/分钟的速度),抓取0项(以0项/分钟的速度)


2016-02-17 11:29:50[抓取]信息:抓取0页(以0页/分钟的速度),抓取0项(以0项/分钟的速度)

试试这个。删除
returnrequest
语句,因为它会将请求返回到process\u请求,并且永远不会调用
process\u响应。在此之前,请确保仅使用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\u proxy\u pool。”

只需在settings.py中添加到当前代码

PROXY_POOL_ENABLED = True

你得到的错误是什么?没有错误,但是爬虫程序没有从站点得到任何东西。例如,在日志中:2016-02-17 11:27:50[scrapy]信息:抓取0页(0页/分钟)、抓取0项(0项/分钟)2016-02-17 11:27:50[scrapy]调试:Telnet控制台监听127.0.0.1:6051 2016-02-17 11:28:50[scrapy]信息:抓取0页(0页/分钟)、抓取0项(0项/分钟)2016-02-17 11:29:50[scrapy]信息:爬网0页(0页/分钟),刮取0项(0项/分钟)您使用的代理是
http
还是
socks
?Scrapy不支持袜子。另外,请不要改变原来的问题。我仍然得到相同的结果。代理是http。您是否更改了设置?还要检查
self.proxy\u pool[random.randint(0,len(self.proxy\u pool)-1)]
的输出是否类似于
http://ip:port
所以代理池只是我传入的ip地址列表,我确保最终的输出看起来像http://ip:port。我更改了设置,同样的事情。我需要设置http_代理吗?代理应该有一个与之关联的端口。正如我在回答中提到的那样,改变它。