python爬虫从0到1 -爬虫必备_代理服务器
原创
©著作权归作者所有:来自51CTO博客作者苏凉zzyo的原创作品,请联系作者获取转载授权,否则将追究法律责任
前言
在我们爬取网页时,我们的ip地址通常时暴露的,那我们如何去隐藏我们的ip地址呢?在爬虫程序中又该怎么去实现ip地址的隐藏呢?为了解决这些问题,于是就衍生出了代理服务器的概念!下面就让我们一起学习吧。
(一)Handler处理器
为什么要学习handler?
我们来看一下三者的区别
- urllib. request . urlopen(url)
不能定制请求头 - urllib. request . Request(url, headers,data)
可以定制请求头 - Handler
定制更高级的请求头(随着业务逻辑的复杂请求对象的定制已经满足不了我们的需求(动态cookie和代理不能使用请求对象的定制)
用handler定制请求头:
# 获取handler对象
handler = urllib.request.HTTPHandler()
# 获取opener对象
opener = urllib.request.build_opener(handler)
# 调用open方法
response = opener.open(request)
(二)代理服务器
代理服务器的常用功能?
- 突破自身IP访问限制,访问国外站点。
- 访问一些单位或团体内部资源
扩展:某大学FTP(前提是该代理地址在该资源的允许访问范围之内),使用教育网内地址段免费代理服务器,就可以用于对教育网开放的各类FTP下载上传,以及各类资料查询共享等服务。
- 提高访问速度
扩展:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区 中取出信息,传给用户,以提高访问速度。
- 隐藏真实IP
扩展:上网者也可以通过这种方法隐藏自己的IP,免受攻击。
用代码配置代理
- 创建Reuqest对象
- 创建ProxyHandler对象
- 用handler对象创建opener对象
- 使用opener.open函数发送请求
proxies = {
'http':'106.54.128.253:999'
}
# 获取handler对象
handler = urllib.request.ProxyHandler(proxies = proxies)
# 获取opener对象
opener = urllib.request.build_opener(handler)
# 调用open方法
response = opener.open(request)
(三)代理池
代理池顾名思义就是为了不频繁使用同一个ip去访问一个网页,在配置代理时随机的生成一个ip去访问网页。在使用前可以定义一个字典,包含多个ip,在调用是随机生成。
eg:
proxies_pool = [
{ 'http':'106.54.128.253:999'},
{'http':'152.136.62.181:9999'}
]
proxies = random.choice(proxies_pool)
print(proxies)
# 获取handler对象
handler = urllib.request.ProxyHandler(proxies = proxies)
# 获取opener对象
opener = urllib.request.build_opener(handler)
# 调用open方法
response = opener.open(request)
下面我们来看源码:
import urllib.request
import random
url = 'http://www.baidu.com/s?wd=ip'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36'
}
request = urllib.request.Request(url = url,headers = headers)
proxies_pool = [
{ 'http':'106.54.128.253:999'},
{'http':'152.136.62.181:9999'}
]
proxies = random.choice(proxies_pool)
print(proxies)
# 获取handler对象
handler = urllib.request.ProxyHandler(proxies = proxies)
# 获取opener对象
opener = urllib.request.build_opener(handler)
# 调用open方法
response = opener.open(request)
content = response.read().decode('utf8')
with open('代理.html','w',encoding='utf-8')as fp:
fp.write(content)
运行结果:
前ip:
配置后的ip:
总的来说,代理服务器的配置对于爬虫来说还是很有用的,它可以隐藏我们真实的ip地址,你学会了吗?有不足的欢迎大家在评论区补充。