python requests SSL證書問題


錯誤信息如下:

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


免責聲明!

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



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