【2】基于python的网路爬虫笔记(代理)

上一章讲了urllib.request.Request与urllib.request.urlopen方法,如何使用这两个函数访问URL,并提交data

注:本章将介绍如何使用代理访问目标URL,防止在爬虫时一个IP短时间内多次访问服务器,而被服务器ban掉,仍然是属于urllib.request模块中的方法,因此以下仍然从urllib.request开始。


1.1urllib.request模块

urllib.request模块定义函数和类,这些函数和类有助于在复杂的环境中打开URL(主要是HTTP)——基本和摘要式身份验证、重定向、cookie等等。urllib.request模块定义了如下常用方法:

urllib.request.ProxyHandler(proxies=None)

  1. Proxies默认为None是一个将协议名映射到代理URL的字典,默认情况下,从环境变量_proxy中读取代理列表。如果没有设置代理环境变量,那么在Windows环境中,代理设置是从注册表的Internet设置部分获取的,在Mac OS X环境中,代理信息是从OS X系统配置框架检索的。即只要把代理的IP地址和端口设置为一个字典即可
  2. 将返回一个handler。

urllib.request.build_opener([handler, ...])

  1. 将上述handler传入,按照handler的内容创建opener
  2. 返回OpenerDirector实例,该实例按照给定的顺序链接处理程序,也即是按照handler的顺序

urllib.request.install_opener(opener)

  1. 传入上述创建的opener,安装OpenerDirector实例作为默认的全局打开器。只有当你要使用urllib.request.urlopen方法打开这个opener时需要按照,否则OpenerDirector.open()
  2. 当你需要经常使用过这个opener时你可以选择安装它,再下次使用时就可不用安装

opener.addheaders=[]

  1. 设置user-agent防止被服务器当做是机器人ban掉

示例1:通过使用代理ip访问某个显示IP的网址,看看IP地址是否已经改变,以及是否每次都不一样

'http://ip.tool.chinaz.com/显示IP的网址(2019年还可用)

http://www.qydaili.com/free/代理ip(2019年还可用)

import urllib.request
import random
url='http://ip.tool.chinaz.com/'
#设置URL

ipList=['27.208.94.59:8060','221.193.177.45:8060','114.244.14.38:8060']

#设置iP地址字典

proxy_support = urllib.request.ProxyHandler({'http':random.choice(ipList)})
#使用choice函数随机选择其中一个IP,这将会返回一个handler给proxy_support

opener = urllib.request.build_opener(proxy_support)
#创建 opener

opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36')]
#设置user-agent
urllib.request.install_opener(opener)
#因为使用了urlopen访问所以要安装该opener
response=urllib.request.urlopen(url)

html=response.read().decode('UTF-8')
#这一步无法显示,有可能是网站编码问题,可以改成GBK编码测试
print(html)

结果如下 :

【2】基于python的网路爬虫笔记(代理)_第1张图片

本章最重要记得 

urllib.request.ProxyHandler(proxies=None)

urllib.request.install_opener(opener)

urllib.request.build_opener([handler, ...])

有不明白的地方,或者想交流的朋友,欢迎添加QQ:498721954

你可能感兴趣的:(爬虫)