阿布云代理和手动代理(urllib)

原理代理

代理实际上指的就是代理服务器,英文 叫作 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

你可能感兴趣的:(阿布云代理和手动代理(urllib))