Python 2.7 Scrapy中的python.failure.failure OpenSSL.SSL.Error(版本1.0.4)

Python 2.7 Scrapy中的python.failure.failure OpenSSL.SSL.Error(版本1.0.4),python-2.7,ssl,scrapy,Python 2.7,Ssl,Scrapy,我正在做一个数据清理项目,我的代码使用Scrapy(版本1.0.4)和Selenium(版本2.47.1) 当我执行代码时,我得到了一些URL的预期输出,但对于其他URL,我得到了以下错误 2016-01-19 15:45:17 [scrapy] DEBUG: Retrying <GET MY_URL> (failed 1 times): [<twisted.python.failure.Failure OpenSSL.SSL.Error: [('SSL routines',

我正在做一个数据清理项目,我的代码使用Scrapy(版本1.0.4)和Selenium(版本2.47.1

当我执行代码时,我得到了一些URL的预期输出,但对于其他URL,我得到了以下错误

2016-01-19 15:45:17 [scrapy] DEBUG: Retrying <GET MY_URL> (failed 1 times): [<twisted.python.failure.Failure OpenSSL.SSL.Error: [('SSL routines', 'SSL3_READ_BYTES', 'ssl handshake failure')]>]
2016-01-19 15:45:17[scrapy]调试:重试(失败1次):[]
请提供此查询的解决方案。

根据此解决方案,您可以创建自己的
ContextFactory
来处理SSL

context.py:

from OpenSSL import SSL
from scrapy.core.downloader.contextfactory import ScrapyClientContextFactory


class CustomContextFactory(ScrapyClientContextFactory):
    """
    Custom context factory that allows SSL negotiation.
    """

    def __init__(self):
        # Use SSLv23_METHOD so we can use protocol negotiation
        self.method = SSL.SSLv23_METHOD
设置.py

DOWNLOADER_CLIENTCONTEXTFACTORY = 'yourproject.context.CustomContextFactory'

eLRuLL答案的变体,不需要额外的文件。它“装饰”了ScrapyClientContextFactory类的init方法

from OpenSSL import SSL
from scrapy.core.downloader.contextfactory import ScrapyClientContextFactory

init = ScrapyClientContextFactory.__init__ 
def init2(self, *args, **kwargs):
  init(self, *args, **kwargs)
  self.method = SSL.SSLv23_METHOD
ScrapyClientContextFactory.__init__ = init2

使用Scrapy 1.5.0时,我遇到了以下错误:

Error downloading: https://my.website.com>: [<twisted.python.failure.Failure OpenSSL.SSL.Error: [('SSL routines', 'tls12_check_peer_sigalg', 'wrong curve')]>]
下载时出错:https://my.website.com>: [] 最终起作用的是更新我的Twisted版本(从17.9.0->19.10.0)。我还将Scrapy更新为2.4.0,以及其他一些版本:

  • 加密==2.2.2->2.3
  • parsel==1.4.0->1.5.0
  • pyOpenSSL==17.5.0->19.0.0
  • urllib3==1.22->1.24.3

这解决了我的问题!(读者注意到,当然,您需要更改上面粘贴的线条中的“yourproject”部分)。谢谢你,埃尔鲁尔!!很高兴帮助@Chris。如果答案对你有帮助,请记住接受它。ThanksIt对
pyOpenSSL==17.5.0
Scrapy==1.0.3
Error downloading: https://my.website.com>: [<twisted.python.failure.Failure OpenSSL.SSL.Error: [('SSL routines', 'tls12_check_peer_sigalg', 'wrong curve')]>]