我正在使用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
我做错了什么?
答案 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
解析。