爬虫遇到SSL证书问题

✍转载自:https://www.cnblogs.com/fh-fendou/p/7479812.html

前言

》做爬虫,对于有的网站,需要SSL证书验证,如:12306等网站

》若没有设置SSL,会提示如下报错信息:

requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",)

解决方法

方法一:

加上一个参数:verify,该参数可以设置两个值

1️⃣verify=证书路径(该方法需要额外下载该网站的SSL证书进行使用)

网站的SSL证书如何下载,参考该链接:https://jingyan.baidu.com/article/20095761903725cb0621b44f.html

import  requests

url = 'https://www.12306.cn'
response = requests.get(url, verify=下载的证书路径)
print(response.status_code)

2️⃣verify=False(即忽略SSL证书)

import  requests

url = 'https://www.12306.cn'
response = requests.get(url, 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)
方法二:

直接使用如下代码:

#注意用了这个就不能用requests了,得用urllib2.Request,且需要导入 import ssl模块
ssl._create_default_https_context = ssl._create_unverified_context

完整代码如下:

import ssl
import urllib2
 
ssl._create_default_https_context = ssl._create_unverified_context
req = urllib2.Request('https://www.12306.cn')
data = urllib2.urlopen(req).read()
print(data)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值