没有项目的scrapy代理中间件

时间:2015-08-30 21:46:38

标签: python-2.7 scrapy

我正在使用scrapy的runpider方法来运行我已经设置并在没有项目的情况下定义的蜘蛛。我正在设置自定义设置和Downloader Middleware以定义http代理中间件,如下所示:

custom_settings = { 'DOWNLOADER_MIDDLEWARES': { 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 750 } }

然后在我的请求中将其发送至request.meta['proxy'] = "proxy-ip:proxy-port"

yield request

但蜘蛛没有跑,说:

File "/usr/lib/python2.7/dist-packages/twisted/internet/abstract.py", line 522, in isIPv6Address if '%' in addr: TypeError: argument of type 'NoneType' is not iterable

我做错了什么?

1 个答案:

答案 0 :(得分:0)

经过大量的挖掘(Scrapy中没有太多的日志记录,我害怕),我发现这个问题可能是因为没有在代理地址中指定方案;即,Scrapy希望代理作为URI传递,因此在您的情况下,而不是:

request.meta['proxy'] = "proxy-ip:proxy-port"  # doesn't work

你想要这个:

request.meta['proxy'] = "http://proxy-ip:proxy-port"  # does work

(据我所知,http只是被忽略了,但如果没有它,其余部分将无法被urlparse解析。