本人最近在學習python,今天想使用python來抓取糗事百科網站上的一些笑話故事的,由於糗事百科的網站url采取的是https協議,所以當我按照常規的方式抓取的時候,發現不行,報錯了,找了很多方法都不好使,這對於一個初學者來說真是很捉雞的一件事情,最后google了好久,終於找到了解決的辦法,接下來一起看一下
一、針對https協議的網站需要驗證證書
錯誤信息:'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)' ,這句話的意思就是證書驗證失敗了
解決方法:在requests的請求方法中添加參數 verify=False ;例如:requests.get('https://www.qiushibaike.com/hot/page/1/',verify=False),
二、InsecurePlatformWarning 問題
在經過第一步添加了參數之后,可以請求到了網站的信息了,但是會出現兩個warning級別的錯誤:
G:\Python27\lib\site-packages\urllib3\connectionpool.py:858: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings InsecureRequestWarning) G:\Python27\lib\site-packages\urllib3\connectionpool.py:858: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings InsecureRequestWarning)
上邊的警告提示大義是:未經驗證的HTTPS請求正在進行。 強烈建議添加證書驗證。 請參閱:https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
雖然這個warning提示不會影響程序的運行,但是對於有強迫症的人來說還是很不舒服的(本人有嚴重的強迫症),所以有沒有什么辦法不顯示(去掉這些warning級別的錯誤呢?)??
解決方法:可以通過 disable_warnings 方法關閉 warning,只需要在代碼中添加這一句即可,requests.packages.urllib3.disable_warnings()
下邊是簡單的獲取糗事百科第一頁的數據的代碼:
#!/usr/bin/env python #coding=utf-8 import requests page = 1 url = 'https://www.qiushibaike.com/hot/page/' + str(page) try: # 避免warning級別的警告(不顯示) requests.packages.urllib3.disable_warnings() # 使用requests庫請求的 response = requests.get(url, verify=False) print response.text except urllib2.URLError, e: if hasattr(e,"code"): print e.code if hasattr(e,"reason"): print e.reason