首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python.failure.Failure OpenSSL.SSL.Error in Scrapy (版本1.0.4)

python.failure.Failure OpenSSL.SSL.Error in Scrapy (版本1.0.4)
EN

Stack Overflow用户
提问于 2016-01-19 11:07:35
回答 4查看 8.8K关注 0票数 10

我正在进行一个数据抓取项目,我的代码使用了Scrapy (版本1.0.4)和Selenium (version 2.47.1)。

代码语言:javascript
复制
from scrapy import Spider
from scrapy.selector import Selector
from scrapy.http import Request
from scrapy.spiders import CrawlSpider
from selenium import webdriver

class TradesySpider(CrawlSpider):
    name = 'tradesy'
    start_urls = ['My Start url',]

    def __init__(self):
        self.driver = webdriver.Firefox()

    def parse(self, response):
        self.driver.get(response.url)
        while True:
           tradesy_urls = Selector(response).xpath('//div[@id="right-panel"]"]')
           data_urls = tradesy_urls.xpath('div[@class="item streamline"]/a/@href').extract()
           for link in data_urls:
               url = 'My base url'+link
               yield Request(url=url,callback=self.parse_data)
               time.sleep(10)
           try:
               data_path = self.driver.find_element_by_xpath('//*[@id="page-next"]')
           except:
               break
           data_path.click()
           time.sleep(10)

    def parse_data(self,response):
        'Scrapy Operations...'

当我执行我的代码时,我得到了一些urls的预期输出,但是对于另一些urls,我得到了以下错误。

代码语言:javascript
复制
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')]>]

请提供此查询的解决方案。

EN

回答 4

Stack Overflow用户

发布于 2016-01-21 16:17:24

根据这个报告问题,您可以创建自己的ContextFactory来处理SSL。

context.py:

代码语言:javascript
复制
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

settings.py

代码语言:javascript
复制
DOWNLOADER_CLIENTCONTEXTFACTORY = 'yourproject.context.CustomContextFactory'
票数 13
EN

Stack Overflow用户

发布于 2020-10-23 16:52:44

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

代码语言:javascript
复制
Error downloading: https://my.website.com>: [<twisted.python.failure.Failure OpenSSL.SSL.Error: [('SSL routines', 'tls12_check_peer_sigalg', 'wrong curve')]>]

最终起作用的是更新我的Twisted版本(从17.9.0 -> 19.10.0)。我还将Scrapy更新为2.4.0,还有其他几个:

  • cryptography==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
票数 1
EN

Stack Overflow用户

发布于 2022-07-27 06:41:27

更新7/27/2022

正如前面提到的,这里。您可以将DOWNLOADER_CLIENT_TLS_METHOD设置为settings.py模块中的TLSv1.2值。其他版本也可以尝试,只需尝试调整哪个可以工作。

只需在项目的DOWNLOADER_CLIENT_TLS_METHOD中将settings.py属性设置为“TLSv1.2”即可。您不再需要使用自定义上下文工厂来解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34875175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档