我必须抓取https://dms.psc.sc.gov/Web/dockets,它使用slapy框架的TLS v1.2。但在请求URL时,它无法加载并引发[<twisted.python.failure.Failure <class 'OpenSSL.SSL.Error'>>]
。
在githttps://github.com/scrapy/scrapy/issues/981上讨论了一些问题,但这对我不起作用。我有刮胡v 0.24.5和扭曲版>;=14。
当我试图抓取另一个同样使用TLS v1.2的站点时,它可以工作,但不适用于https://dms.psc.sc.gov。 如何解决这个问题?
剪贴簿中的PR fixing this problem已合并。最近(2016年2月)有另一个pull请求修复similar bug
我看到用最新的剪贴本我可以把你的网页,但与旧版本的问题仍然出现。
一般来说,如果您偶然发现Scrapy的HTTP-s问题,那么解决方案是:
如果在更新Scrapy和Twisted之后仍然遇到问题,则可能需要将ScrapyClientContextFactory子类化-有关详细信息,请参见下面的答案。
更多详细信息请参见this github issue
1.添加
DOWNLOADER_CLIENTCONTEXTFACTORY='testproject.CustomContext.CustomClientContextFactory'
到您的设置.py2.在项目目录中创建名为CustomContext.py的文件 并添加以下代码
注意:它在windows中对https站点的爬行很有效,但是当我在Ubuntu 14.04中尝试同样的方法时,它会抛出如下错误:
如果有人能为上述错误添加解决方案,那就太好了。
编辑:
而不是使用
from twisted.internet._sslverify import ClientTLSOptions
我把它改成了下面的
任何具有“TypeError:unbound method getContext()的人都必须以ClientContextFactory实例作为第一个参数来调用…”
替换
ctx = ClientContextFactory.getContext(self)
用
ctx = ScrapyClientContextFactory.getContext(self)
相关问题 更多 >
编程相关推荐