AttributeError:模块“OpenSSL.SSL”没有属性“SSLv3_METHOD”

问题描述 投票:0回答:6

使用定义的 url 运行 scrapy shell 后,我收到属性错误,显示以下错误: AttributeError:模块“OpenSSL.SSL”没有属性“SSLv3_METHOD”

scrapy shell "https://quotes.toscrape.com/tag/humor/"

谁能帮我解决这个错误吗?

2022-09-27 01:38:38 [scrapy.utils.log] INFO: Versions: lxml 4.9.1.0, libxml2 2.9.12, cssselect 1.1.0, parsel 1.6.0, w3lib 2.0.1, Twisted 22.8.0, Python 3.9.2 (tags/v3.9.2:1a79785, Feb 19 2021, 13:44:55) [MSC v.1928 64 bit (AMD64)], pyOpenSSL 22.1.0 (OpenSSL 3.0.5 5 Jul 2022), cryptography 38.0.1, Platform Windows-10-10.0.19041-SP0
2022-09-27 01:38:38 [scrapy.crawler] INFO: Overridden settings:
{'DUPEFILTER_CLASS': 'scrapy.dupefilters.BaseDupeFilter',
 'LOGSTATS_INTERVAL': 0}
2022-09-27 01:38:38 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.selectreactor.SelectReactor
2022-09-27 01:38:38 [scrapy.extensions.telnet] INFO: Telnet Password: d760ab2d8573ec57
2022-09-27 01:38:38 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.corestats.CoreStats',
 'scrapy.extensions.telnet.TelnetConsole']
2022-09-27 01:38:39 [scrapy.core.downloader.handlers] ERROR: Loading "scrapy.core.downloader.handlers.http.HTTPDownloadHandler" for scheme "http"
Traceback (most recent call last):
  File "d:\python\scraping-project\scrapy\venv\lib\site-packages\scrapy\core\downloader\handlers\__init__.py", line 49, in _load_handler
    dhcls = load_object(path)
  File "d:\python\scraping-project\scrapy\venv\lib\site-packages\scrapy\utils\misc.py", line 61, in load_object
    mod = import_module(module)
  File "C:\Users\DELL\AppData\Local\Programs\Python\Python39\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 790, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "d:\python\scraping-project\scrapy\venv\lib\site-packages\scrapy\core\downloader\handlers\http.py", line 2, in <module>
    from scrapy.core.downloader.handlers.http11 import (
  File "d:\python\scraping-project\scrapy\venv\lib\site-packages\scrapy\core\downloader\handlers\http11.py", line 23, in <module>
    from scrapy.core.downloader.contextfactory import load_context_factory_from_settings
  File "d:\python\scraping-project\scrapy\venv\lib\site-packages\scrapy\core\downloader\contextfactory.py", line 11, in <module>
    from scrapy.core.downloader.tls import DEFAULT_CIPHERS, openssl_methods, ScrapyClientTLSOptions
  File "d:\python\scraping-project\scrapy\venv\lib\site-packages\scrapy\core\downloader\tls.py", line 23, in <module>
    METHOD_SSLv3: SSL.SSLv3_METHOD,                     # SSL 3 (NOT recommended)
AttributeError: module 'OpenSSL.SSL' has no attribute 'SSLv3_METHOD'
python python-3.x web-scraping scrapy
6个回答
23
投票

我也遇到了同样的问题,我用这个解决了:

pip install pyopenssl==22.0.0

20
投票
# ImportError: cannot import name 'SSLv3_METHOD' from 'OpenSSL.SSL'
pip3 install pyopenssl==22.0.0

# AttributeError: module 'lib' has no attribute 'OpenSSL_add_all_algorithms'
pip3 install cryptography==38.0.4

需要设置特殊版本的pyopenssl,22.1.0之后不再支持

SSLv2
SSLv3
此处更改日志

enter image description here


5
投票

我的解决方案还使用 cryptografy 38.0.4。

...
# need this version of pyopenssl to avoid SSL3 error
pyOpenSSL==22.0.0
# need this version of cryptography to avoid error "module 'lib' has no attribute 'OpenSSL_add_all_algorithms"
cryptography==38.0.4
...

希望对您有帮助。


3
投票

我认为这是由于

cryptography
PyOpenSSL
的更新所致——我已经记录了 Scrapy 的一个问题(https://github.com/scrapy/scrapy/issues/5638),但解决方法是对我有用的是降级
cryptography
:

pip install "cryptography<38"

1
投票

我通过注释以下虚拟环境文件夹中的行解决了这个问题=>

Lib\site-packages\scrapy\core\downloader\tls.py
=> 注释掉 METHOD_SSLv3: SSL.SSLv3_METHOD,


0
投票

我在scrapy hub中运行scrapy代码时遇到了同样的错误。

原来 Scrapy_hub 使用的是较旧版本的 scrapy,即 2.0 版,并且 this 论坛帮助我设置了较新版本。

对我来说,这有效:

  • 在文件末尾添加以下代码:
    scrapinghub.yml
stacks:
  default: scrapy:2.11-20240514
© www.soinside.com 2019 - 2024. All rights reserved.