前言
在我们爬取网页时,我们的ip地址通常时暴露的,那我们如何去隐藏我们的ip地址呢?在爬虫程序中又该怎么去实现ip地址的隐藏呢?为了解决这些问题,于是就衍生出了代理服务器的概念!下面就让我们一起学习吧。
(一)Handler处理器
为什么要学习handler?
我们来看一下三者的区别
用handler定制请求头:
# 获取handler对象 handler = urllib.request.HTTPHandler() # 获取opener对象 opener = urllib.request.build_opener(handler) # 调用open方法 response = opener.open(request)
二)代理服务器
代理服务器的常用功能?
- 突破自身IP访问限制,访问国外站点。
- 访问一些单位或团体内部资源
- 提高访问速度
- 隐藏真实IP
用代码配置代理
1.创建Reuqest对象
2.创建ProxyHandler对象
3.用handler对象创建opener对象
4.使用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地址,你学会了吗?有不足的欢迎大家在评论区补充。