IP代理
- 免费IP:时效性差,错误率高
- 收费IP:拥有失效不能用的
IP分类
- 透明:对方知道我们真实的IP
- 匿名:对方不知道我们真实的IP,但知道使用了代理
- 高匿:对方不知道我们真实的IP,也不道使用了代理
Handler处理器
urllib.request.urlopen()没有添加代理的功能,需要自定义
这里我们使用到Handler处理器,达到添加代理的目的
我们这里暂且不去实现添加代理,而是用小案例认知一下Hander的创建和实现,看官,继续往下走
import urllib.request
url = 'http://www.baidu.com/'
handler = urllib.request.HTTPHandler() #创建处理器
opener = urllib.request.build_opener(handler) # 创建opener
response = opener.open(url) # 利用自己的opener请求数据 这个地方的功能就有点类似urlopen了
print(response.read().decode())
我相信大家已经有了基本认知,其实也可以发现这几行代码的层次性
也还是还容易记忆的
免费代理
单个免费代理
import urllib.request
url = 'http://www.baidu.com/'
proxy_list = {
'https':'118.163.13.200:8080'
}
hander = urllib.request.ProxyHandler(proxy_list)
opener = urllib.request.build_opener(hander)
url_data = opener.open(url).read().decode()
print(url_data)
proxy_list中的格式要注意,不要填写错、少填、弄错顺序这等低级错误
我们使用的是别人免费提供的代理,要去避免有个别代理不可用,所以我们建立代理库,每次访问都用不同的代理
多个免费代理
import urllib.request
url = 'http://www.baidu.com/'
proxy_list =[
{'https':'118.163.13.200:8080'},
{'https':'61.145.212.31:3128'},
{'https':'60.191.11.241:3128'},
{'https':'222.223.17.69:6300'}
]
for proxy in proxy_list :
handler = urllib.request.ProxyHandler(proxy)
opener = urllib.request.build_opener(handler)
try:
url_data = opener.open(url).read().decode()
print(url_data)
print('代理有效')
except Exception as e:
print(e)
print('代理无效')
付费代理
购买过付费代理都知道,会提供给你账号和密码
知道这个信息后,就无需演示完整代码,给出下面核心代码,你一看就懂
money_proxy = {
'http':'username:password@192.189.45.65:8080'
}
handler = urllib.request.ProxyHandler(money_proxy)
opener =urllib.request.build_opener(handler)
opener.open(url)
使用密码管理器,有大量IP这个要快的多,讲到代理池就会见效
username = 'abc'
pwd = '123'
proxy_money = '128.98.45.32:8888'
password_manager = urllib.request.HTTPPasswordMgrWithDefaultRealm() #创建密码管理器
password_manager.add_password(realm=None, uri=proxy_money, user=username, passwd=pwd) #添加付费代理
handler_auth = urllib.request.ProxyBasicAuthHandler(password_manager) #创建handler
opener = urllib.request.build_opener(handler_auth) #创建opener
response = opener.open(url)
访问内网—Auth认证
user = 'admin'
pwd = '123'
nei_url = 'http://192.168.12.64'
#创建密码管理器
pwd_manager = urllib.request.HTTPPasswordMgrWithDefaultRealm()
pwd_manager.add_password(None,nei_url,user,pwd)
#创建认证处理器
auth_handler = urllib.request.HTTPBasicAuthHandler(pwd_manager)
opener = urllib.request.build_opener(auth_handler)
response = opener.open(nei_url)
大家也都看到,你要有基本的英语能力也知道调用那个模块