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,再次瀏覽器中運行,成功!
相關文章
相關標籤/搜索