python爬虫——SSL证书与Handler处理器

Posted CCColby

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python爬虫——SSL证书与Handler处理器相关的知识,希望对你有一定的参考价值。

一、SSL证书问题    

    

    上一篇文章,我们创建了一个小爬虫,下载了上海链家房产的几个网页。实际上我们在使用urllib联网的过程中,会遇到证书访问受限的问题。

    处理HTTPS请求SSL证书验证,如果SSL证书验证不通过,会警告用户证书不受信任(即没有通过AC认证)。

    

 

  上图左边我们可以看到SSL验证失败,所以以后遇到这些网站我们需要单独处理SSL证书,让程序主动忽略SSL证书验证错误,即可正常访问。例如我们访问12306。

 1 from urllib import request
 2 #导入python的SSL处理模块
 3 import ssl
 4 
 5 #忽略SSL验证失败
 6 context=ssl._create_unverified_context()
 7 
 8  url="https://www.12306.cn/mormhweb/"
 9 
10 response=request.urlopen(url,context=context)
11 html=response.read()
12 print(html)

    

二、Handler处理器以及自定义opener

 

    我们之前一直使用的urlopen,它是一个模块帮我们构建好的特殊的opener。但是这个基本的urlopen()是不支持代理、cookie等其他的HTTP/HTTPS高级功能。所以我们需要利用Handler处理器自定义opener,来满足我们需要的这些功能。

 1 import urllib.request
 2 
 3 url="http://www.whatismyip.com.tw/"
 4 
 5 #该参数是一个字典类型,键表示代理的类型,值为代理IP和端口号
 6 proxy_support=urllib.request.ProxyHandler({\'http\':\'117.86.199.19:8118\'})
 7 
 8 #接着创建一个包含代理的opener
 9 opener=urllib.request.build_opener(proxy_support)
10 opener.addheaders=[("User-Agent","Mozilla/5.0(Macintosh;U;IntelMacOSX10_6_8;en-us)AppleWebKit/534.50(KHTML,likeGecko)Version/5.1Safari/534.50")]
11 
12 
13 #第一种方式是使用install_opener()安装进默认环境,那么以后你使用urlopen()函数,它都是以你定制的opener工作的
14 urllib.request.install_opener(opener)
15 response=urllib.request.urlopen(url)
16 
17 #第二种使用一次性的opener.open()打开
18 #req=urllib.request.Request(url)
19 #response=opener.open(req)
20 
21 html=response.read().decode(\'utf-8\')
22 print(html)

 

    我们可以看到,访问网站的IP已经被换成了代理IP。在以上的设置代理的过程中,我们也使用addheaders这一函数,给请求附加了UserAgent,UserAgent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,UserAgent也简称UA。它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。这也是对抗反爬虫的常用手段之一。

以上是关于python爬虫——SSL证书与Handler处理器的主要内容,如果未能解决你的问题,请参考以下文章

python requests SSL证书问题

python爬虫----handler和opener

Python爬虫连载7-cookie的保存与读取SSL讲解

Java爬虫--Https绕过证书

如何验证在Python SSL证书

关于SSL证书的学习与总结