爬虫基础系列urllib——HTTP代理(5)
2019-05-06 本文已影响0人
猛犸象和剑齿虎
![](https://img.haomeiwen.com/i1920664/77520e57fc8ba116.jpg)
(这是抄网上的一段解释)
什么是HTTP代理
- HTTP代理指的是使用代理服务器使网络用户访问外部网站。代理服务器是介于浏览器和Web服务器之间的一台服务器,是建立在超文本传输协议上的网络浏览方式,作用是可以防伪部分对协议进行了限制的局域网。
- 关于HTTP代理服务器的主要功能包括五个方面:
- 突破自身IP访问限制,访问国外站点;
- 访问一些单位或团体内部资源,如某大学的内部网,使用教育网内地址段免费代理服务器可以用于对教育 网开放的各类下载上传以及各类资料查询共享等服务;
- 突破中国电信的IP封锁:中国电信有很多网站限制了用户访问,使用HTTP代理可以突破访问限制;
- 提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时将信息保存到缓冲区中,当其他用户再访问相同的信息时, 可直接由缓冲区中取出信息传递给用户,提高访问速度;
- 隐藏真实IP:HTTP代理可以隐藏IP地址,避免受到网络攻击。
在爬虫中的实现
- 之前一直采用urlopen()方法,它不支持代理、cookie(有些网站需要用户登录用户名和密码,cookie 以加密的方式存储用户的个人信息)、以及HTTP和HTTPS一些方法。
- 用户自定义urlopen方法,将这些代理放入请求中。request.build_opener()方法
完整代码:
#之前一直用urlopen()函数,它不支持代理,cookie,以及HTTP,HTTPS等一些方法
#这里用到request.build_opener()方法
from urllib import request
#构建处理器对象,专门处理请求头的对象
http_hander=request.HTTPHandler()
#创建一个自定义的opener
opener=request.build_opener(http_hander)
#同样也可以用原先的urlopen()方法,需要把opener设置为全局变量
request.install_opener(opener)
#创建自定义请求对象
req=request.Request("http://www.baidu.com/")
#发送请求获取响应
reponse=request.urlopen(req).read()
#reponse=opener.open(req).read().decode()#这里的方式与urlopen类似
print(reponse)
返回结果将是二进制形式的网页信息