IP代理

  1. 免费IP:时效性差,错误率高
  2. 收费IP:拥有失效不能用的

IP分类

  1. 透明:对方知道我们真实的IP
  2. 匿名:对方不知道我们真实的IP,但知道使用了代理
  3. 高匿:对方不知道我们真实的IP,也不道使用了代理

Handler处理器

urllib.request.urlopen()没有添加代理的功能,需要自定义

这里我们使用到Handler处理器,达到添加代理的目的

我们这里暂且不去实现添加代理,而是用小案例认知一下Hander的创建和实现,看官,继续往下走

  1. import urllib.request
  2. url = 'http://www.baidu.com/'
  3. handler = urllib.request.HTTPHandler() #创建处理器
  4. opener = urllib.request.build_opener(handler) # 创建opener
  5. response = opener.open(url) # 利用自己的opener请求数据 这个地方的功能就有点类似urlopen了
  6. print(response.read().decode())

我相信大家已经有了基本认知,其实也可以发现这几行代码的层次性

也还是还容易记忆的

免费代理

单个免费代理

  1. import urllib.request
  2. url = 'http://www.baidu.com/'
  3. proxy_list = {
  4. 'https':'118.163.13.200:8080'
  5. }
  6. hander = urllib.request.ProxyHandler(proxy_list)
  7. opener = urllib.request.build_opener(hander)
  8. url_data = opener.open(url).read().decode()
  9. print(url_data)

proxy_list中的格式要注意,不要填写错、少填、弄错顺序这等低级错误

图片.png


我们使用的是别人免费提供的代理,要去避免有个别代理不可用,所以我们建立代理库,每次访问都用不同的代理


多个免费代理

  1. import urllib.request
  2. url = 'http://www.baidu.com/'
  3. proxy_list =[
  4. {'https':'118.163.13.200:8080'},
  5. {'https':'61.145.212.31:3128'},
  6. {'https':'60.191.11.241:3128'},
  7. {'https':'222.223.17.69:6300'}
  8. ]
  9. for proxy in proxy_list :
  10. handler = urllib.request.ProxyHandler(proxy)
  11. opener = urllib.request.build_opener(handler)
  12. try:
  13. url_data = opener.open(url).read().decode()
  14. print(url_data)
  15. print('代理有效')
  16. except Exception as e:
  17. print(e)
  18. print('代理无效')

付费代理

购买过付费代理都知道,会提供给你账号和密码

知道这个信息后,就无需演示完整代码,给出下面核心代码,你一看就懂

  1. money_proxy = {
  2. 'http':'username:password@192.189.45.65:8080'
  3. }
  4. handler = urllib.request.ProxyHandler(money_proxy)
  5. opener =urllib.request.build_opener(handler)
  6. opener.open(url)

使用密码管理器,有大量IP这个要快的多,讲到代理池就会见效

  1. username = 'abc'
  2. pwd = '123'
  3. proxy_money = '128.98.45.32:8888'
  4. password_manager = urllib.request.HTTPPasswordMgrWithDefaultRealm() #创建密码管理器
  5. password_manager.add_password(realm=None, uri=proxy_money, user=username, passwd=pwd) #添加付费代理
  6. handler_auth = urllib.request.ProxyBasicAuthHandler(password_manager) #创建handler
  7. opener = urllib.request.build_opener(handler_auth) #创建opener
  8. response = opener.open(url)

访问内网—Auth认证

  1. user = 'admin'
  2. pwd = '123'
  3. nei_url = 'http://192.168.12.64'
  4. #创建密码管理器
  5. pwd_manager = urllib.request.HTTPPasswordMgrWithDefaultRealm()
  6. pwd_manager.add_password(None,nei_url,user,pwd)
  7. #创建认证处理器
  8. auth_handler = urllib.request.HTTPBasicAuthHandler(pwd_manager)
  9. opener = urllib.request.build_opener(auth_handler)
  10. response = opener.open(nei_url)

大家也都看到,你要有基本的英语能力也知道调用那个模块