zoukankan      html  css  js  c++  java
  • PySpider 框架爬虫错误 HTTP 599: SSL certificate problem: unable to get local issuer certificate解决方案

    首先pyspider all启动pyspider的所有服务,然后访问http://localhost:5000创建一个爬虫任务:taobaomm,点开任务链接编辑http://localhost:5000/debug/taobaomm,默认模板:
     
    右侧为代码编辑区,可以在crawl_config里做一些配置,具体可以参考官网API文档:http://docs.pyspider.org/en/latest/apis/self.crawl/#validate_cert,Handler共实现了三个函数,大致可以知道从函数on_start开始,爬到后回调index_page处理,index_page函数中可以解析出超链接继续爬取,并将爬到的内容回调给detail_page处理,detail_page里可以解析出具体想要爬取的信息。
     
    左侧为调试运行栏,下面的向左向右箭头用于切换步骤,run按钮可以运行指定的步骤。编写脚本抓取https://mm.taobao.com/json/request_top_list.htm?page=1里的信息(源码后面会全部贴出),出现错误:
     
    [E 160329 11:32:22 base_handler:194] HTTP 599: SSL certificate problem: self signed certificate in certificate chain
        Traceback (most recent call last):
          File "C:Python27libsite-packagespyspiderlibsase_handler.py", line 187, in run_task
            result = self._run_task(task, response)
          File "C:Python27libsite-packagespyspiderlibsase_handler.py", line 166, in _run_task
            response.raise_for_status()
          File "C:Python27libsite-packagespyspiderlibs
    esponse.py", line 183, in raise_for_status
            raise http_error
        HTTPError: HTTP 599: SSL certificate problem: self signed certificate in certificate chain
     
    网上有遇到类似错误的:
     
    一开始搜索“HTTPError: HTTP 599: SSL certificate problem: self signed certificate in certificate chain”这个错误,找到这个:HTTP 599: SSL certificate problem: self signed certificate in certificate chain #362,大概知道是跟curl的证书有关系。
    于是下载了curl的windows版本,下载路径: https://curl.haxx.se/download.html

      

    解压后是两个文件:ca-bundle.crt和curl.exe,也知道https的请求需要证书,也知道ca-bundle.crt就是这个证书,关键是不知道怎么让pyspider使用起来。
     
    先验证一下,在pycharm里编写脚本:
    import pycurl
    
    #创建一个同libcurl中的CURL处理器相对应的Curl对象
    c = pycurl.Curl()
    
    c.setopt(pycurl.URL, 'https://mm.taobao.com/json/request_top_list.htm?page=1')
    
    # 设置证书
    # c.setopt(pycurl.CAINFO, 'C:\Python27\curl\curl-ca-bundle.crt') #执行上述访问网址的操作 c.perform()
    运行后输出错误:
    Traceback (most recent call last):
      File "F:/PycharmProjects/test/pycurlStudy.py", line 90, in <module>
        c.perform()
    pycurl.error: (60, 'SSL certificate problem: self signed certificate in certificate chain')
     
    可以看到错误信息是和上面的一模一样的(错误码不一样这个不重要,可能pyspider有二次封装),然后把上面的验证代码的注释去掉,也就是设置一下证书,再次运行,OK!
     
    思路是对了,关键是不知道怎么让pyspider使用起证书ca-bundle.crt。
     
    后来搜索到pyspider的官网API文档:http://docs.pyspider.org/en/latest/apis/self.crawl/#validate_cert
    发现有一个标记可以用validate_cert
    validate_cert - For HTTPS requests, validate the server’s certificate? default: True
     
    也就是这样使用self.crawl(url, callback=self.index_page, validate_cert=False)
    但是运行依然报错,提示validate_cert不存在该key,草泥马!
    然后通篇搜索D:Python27Libsite-packagespyspider目录根本没有发现validate_cert,草泥马!
    但是网上搜索能找到,就是在github上,也就是说最新的pyspider源码里是有validate_cert的,然后怀疑自己的pyspider安装的是否是最新版的,当天才安装的,应该不至于,于是pip install --upgrade pyspider也提示已经是最新版了。
     
    那么只有一个可能了:
    pyspider最新源码和最新文档里都有,但是可能还未更新到最新的安装包里。于是先git下来最新的pyspider源码,把
    C:Python27Libsite-packagespyspider-0.3.10.dev0-py2.7.egg目录下的pyspider整个文件夹删除,用git下的源码里的pyspider整体复制过去,重启pyspider all,再次浏览器中运行,成功!
  • 相关阅读:
    Stm32ADC-内部温度传感器的使用
    Stm32 ADC学习
    wpf数据绑定
    06 MyBatis——实体类注意事项
    05 MyBatis——环境搭建及demo
    96 项目导jar包
    04 SSM框架概述
    03 MVC开发模式
    02 Mybaits——包名的命名规范
    26 监听器实现网站在线人数统计
  • 原文地址:https://www.cnblogs.com/shaosks/p/6856086.html
Copyright © 2011-2022 走看看