前言

在我们爬取网页时,我们的ip地址通常时暴露的,那我们如何去隐藏我们的ip地址呢?在爬虫程序中又该怎么去实现ip地址的隐藏呢?为了解决这些问题,于是就衍生出了代理服务器的概念!下面就让我们一起学习吧。

(一)Handler处理器

为什么要学习handler?
我们来看一下三者的区别

  1. urllib. request . urlopen(url)
    不能定制请求头
  2. urllib. request . Request(url, headers,data)
    可以定制请求头
  3. Handler
    定制更高级的请求头(随着业务逻辑的复杂请求对象的定制已经满足不了我们的需求(动态cookie和代理不能使用请求对象的定制)

用handler定制请求头:

# 获取handler对象
handler = urllib.request.HTTPHandler()

# 获取opener对象
opener = urllib.request.build_opener(handler)

# 调用open方法
response = opener.open(request)

(二)代理服务器

代理服务器的常用功能?

  1. 突破自身IP访问限制,访问国外站点。
  2. 访问一些单位或团体内部资源

扩展:某大学FTP(前提是该代理地址在该资源的允许访问范围之内),使用教育网内地址段免费代理服务器,就可以用于对教育网开放的各类FTP下载上传,以及各类资料查询共享等服务。

  1. 提高访问速度

扩展:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区 中取出信息,传给用户,以提高访问速度。

  1. 隐藏真实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:

python爬虫从0到1 -爬虫必备_代理服务器_ip地址


配置后的ip:

python爬虫从0到1 -爬虫必备_代理服务器_爬虫_02


总的来说,代理服务器的配置对于爬虫来说还是很有用的,它可以隐藏我们真实的ip地址,你学会了吗?有不足的欢迎大家在评论区补充。