码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-02-15 14:32:48      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:body   header   width   handle   需要   基本   https   遇到   web   

一、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爬虫(3)——SSL证书与Handler处理器

标签:body   header   width   handle   需要   基本   https   遇到   web   

原文地址:https://www.cnblogs.com/CCColby/p/8448346.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!