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:\Python27\lib\site-packages\pyspider\libs\base_handler.py", line 187, in run_task
        result = self._run_task(task, response)
      File "C:\Python27\lib\site-packages\pyspider\libs\base_handler.py", line 166, in _run_task
        response.raise_for_status()
      File "C:\Python27\lib\site-packages\pyspider\libs\response.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:\Python27\Lib\site-packages\pyspider目錄根本沒有發現validate_cert,草泥馬!
但是網上搜索能找到,就是在github上,也就是說最新的pyspider源碼里是有validate_cert的,然后懷疑自己的pyspider安裝的是否是最新版的,當天才安裝的,應該不至於,於是 pip install --upgrade pyspide r也提示已經是最新版了。
 
那么只有一個可能了:
pyspider最新源碼和最新文檔里都有,但是可能還未更新到最新的安裝包里。於是先git下來最新的pyspider源碼,把
C:\Python27\Lib\site-packages\pyspider-0.3.10.dev0-py2.7.egg目錄下的pyspider整個文件夾刪除,用git下的源碼里的pyspider整體復制過去,重啟pyspider all,再次瀏覽器中運行,成功!

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM