錯誤信息如下:
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",)
python做爬蟲,對於有的網站,需要驗證證書,比如:12306,https://inv-veri.chinatax.gov.cn/等網站
那么我參考這個作者的簡書:http://www.jianshu.com/p/e42005d48929 解決了這個錯誤:
加上一個參數:verify=證書路徑,或verify=False
#方法一
import requests from bs4 import BeautifulSoup url = 'https://inv-veri.chinatax.gov.cn/' req = requests.get(url,verify=False) req.encoding = 'utf-8' soup = BeautifulSoup(req.text,'lxml') print(soup)
錯誤消失了但是有提醒,不過沒事,可以解析出源代碼。然后我根據他的簡書繼續下載證書,但是不知道為什么,我下載的證書不管用,然后沒轍,幸好之前做過12306這個網站。OK,第二種簡單的方法來了,下載啥安全證書?不需要,不需要。直接上一段添加證書代碼:
ssl._create_default_https_context = ssl._create_unverified_context#注意用了這個就不能用requests了,得用urllib2.Request
完整代碼如下:
# 方法二(推薦): import ssl import urllib2 ssl._create_default_https_context = ssl._create_unverified_context req = urllib2.Request('https://inv-veri.chinatax.gov.cn/') data = urllib2.urlopen(req).read() print(data)
總結:經過我的測試,推薦大家使用方法二。喜歡的話點個贊哦~
經過大半年之后我又回到了爬蟲:對於咱們上面兩個方法我又發現了一個好的SSL證書驗證的方法:加參數:verify=False
完整代碼如下:
#SSL證書驗證 import requests response = requests.get('https://www.12306.cn', verify=False) print(response.status_code)
不過我們發現報了一個警告,它建議我們給它指定證書。我們可以通過設置忽略警告的方式來屏蔽這個警告:
import requests from requests.packages import urllib3 urllib3.disable_warnings() response = requests.get('https://www.12306.cn', verify=False) print(response.status_code)
或者通過捕獲警告到日志的方式忽略警告:
import logging import requests logging.captureWarnings(True) response = requests.get('https://www.12306.cn', verify=False) print(response.status_code)
如果我上面三種方法還不能解決你ssl的錯誤的話,請重新安裝requests:
python2下載版本:
pip install requests==2.6.0
python3下載版本
pip install requests==2.7.0
再次運行成功。
示例:例如這個網址https://grwsyw.bjgjj.gov.cn/ish/,必須使用對的requests版本
:
import requests req = requests.get('https://grwsyw.bjgjj.gov.cn/ish/',verify=False) print(req.text)
參考鏈接:https://blog.csdn.net/liujinz72213/article/details/78866873