原理代理
代理实际上指的就是代理服务器,英文 叫作 proxy server,它的功能是代理网络用户 去取得 网络信 息。 形象地说,它是网络信息的中转站。 在我们正常请求一个网站时, 是发送了请求给 Web服务器, Web 服务器把响应传回给我们 。 如果设置了代理服务器 , 实 际上就是在本机和服务器之间搭建了 一个 桥, 此时本机不是直接 向 Web服务器发起请求,而是向代理服务器发出请求,请求会发送给代理服务 器,然后由代理服务器再发送给 Web 服务器,接着由代理服务器再把 Web 服务器返回的响应转发给 木机。 这样我们同样可以正常访问网页,但这个过程中 Web 服务器识别 出的真实 IP就不再是我们本 机的 IP了,就成功实现了 IP伪装,这就是代理的基本原理
突破 门身 IP访问限制,访问 一些平 时不能访问的站点 。
口 访问一些单位或团体内部资惊 :比如使用教育网内地址段免费代理服务器,就可以用于对教
育网开放的各类 FTP下载上传,以及各类资料查询共享等服务。
口 提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同
时也将·其保存到缓 冲区中,当其他用户再访问相同的信息时,则直接由缓冲区中取出信息,
传给用户,以提高访问速度 。
口 隐藏丘实 IP: 上网者也可以通过这种方法隐藏向己的 E , 免受攻击 。 对于爬虫来说,我们用
代理就是为了隐藏向 身 IP,防止 向身的 IP被封锁。
手动设置
import urllib.request
import random
import urllib.error
import time
# 如果是购买的,通过接口得到数据,然后处理为列表即可
ip_pool = [
'218.60.8.98:3129',
'183.129.207.74:14823',
'114.113.126.82:80',
'171.38.24.228:8123'
]
while 1:
# 从ip列表中随机一个代理ip出来
ip = random.choice(ip_pool)
url = 'http://www.baidu.com/s?ie=UTF-8&wd=ip'
proxy = {
'http': ip
}
handler = urllib.request.ProxyHandler(proxies=proxy)
opener = urllib.request.build_opener(handler)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
}
request = urllib.request.Request(url=url, headers=headers)
try:
response = opener.open(request, timeout=3)
print('代理%s使用成功' % ip)
with open('ip.html', 'wb') as fp:
fp.write(response.read())
break
except:
# 代表你取的代理不可用
ip_pool.remove(ip)
# 判断列表的长度,如果小于5个,重新获取一批放到列表中
print('代理%s使用失败' % ip)
time.sleep(2)
阿布云代理
import urllib.request
import base64
# Proxy-Authorization: Basic SDAxMjM0NTY3ODkwMTIzNDowMTIzNDU2Nzg5MDEyMzQ1
# 购买隧道的通行证书
username = 'H12728196WX744CD'
# 购买隧道的通行秘钥
password = '9ED6609BC458738C'
# 通行证书和秘钥通过冒号进行拼接
value = username + ':' + password
# 将拼接后的结果经过base64编码
value = base64.b64encode(value.encode('utf-8')).decode('utf8')
# print(value)
# 定制请求头
headers = {
'Proxy-Authorization': 'Basic ' + value,
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
}
# 构建请求对象
url = 'http://www.baidu.com/s?ie=UTF-8&wd=ip'
request = urllib.request.Request(url=url, headers=headers)
# 使用代理,需要创建handler和opener
handler = urllib.request.ProxyHandler(proxies={'http': 'http-dyn.abuyun.com:9020'})
opener = urllib.request.build_opener(handler)
# 发送请求,保存内容
response = opener.open(request)
with open('abu.html', 'wb') as fp:
fp.write(response.read())

gfg.jpeg