首先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,再次瀏覽器中運行,成功!
