Python 静态页面爬虫---urllib3库实现
1、生产请求
urllib3库是通过PoolManager实例来生产请求的,由该实例处理与线程池的链接机线程安全的所有细节
urllib3.request函数创建一个请求
语法:
http = urllib3.PoolManager() rq = http.request('method','url',headers={默认为None},fields={默认为None},**urlopen_kw)
参数解释:
| 参数名称 | 说明 |
| method | 表示请求的类型。GET,POST等,必须写 |
| url | 表示字符串形式的网址 |
| fields | 表示请求类型所带的参数 |
| headers | 表示请求头所带的参数 |
| **urlopen_kw | 接收dict和python中的数据类型的数据,依据具体需求及请求的类型可添加的参数,通常参数赋值为字典类型或者具体数据 |
2、请求头处理
request函数中,参数header通常定义为一个字典类型来实现
# 生产PoolManager实例 http = urllib3.PoolManager() # 发送request请求 rq = http.request("GET",'https://www.baidu.com/') # 发送带有header请求头的request请求 hd = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) Chrome/78.0.3904.108'} # 定义header参数,常用的是dict类型 rq = http.request("GET",'https://www.baidu.com/',headers=hd)
3、设置timeout
timeout参数主要是为了防止因为网络不稳定、服务器不稳定等问题造成链接不稳定时丢包
timeout设置有两种方法:
url = 'https://www.baidu.com/' #方法1: 在PoolManager实例中设置timeout参数 http = urllib3.PoolManager(timeout = 4) http1 = urllib3.PoolManager(timeout=urllib3.Timeout(connect=1.0,read=3.0)) # 分别设置链接与读取的timeout参数 #方法2: 直接在url参数后面添加统一的timeout参数 rq = http1.request('GET',url,timeout=3) rq1 = http1.request('GET',url,timeout=urllib3.Timeout(connect=1.0,read=3.0)) # 分别设置链接与读取的timeout参数
注意:以request函数中的timeout参数,会覆盖PoolManager实例的timeout参数
4、请求重试设置(retries:重试,redirect:重定性)
retries:默认值为3,设置时参数必须为整数
retries:如果没有设置redirect时,表示同时设置重试和重定向的次数,
如果设置了 redirect时,retries表示设置重试次数,redirect表示重定向次数
url = 'https://www.baidu.com/' #方法1: 在PoolManager实例中设置retries参数 http = urllib3.PoolManager(retries = 4) http1 = urllib3.PoolManager(timeout=urllib3.Timeout(connect=1.0,read=3.0)) # 分别设置链接与读取的timeout参数 #方法2: 直接在url参数后面添加统一的retries参数 rq = http1.request('GET',url,retries=3) # 请求重试和重定向都为3次 rq1 = http1.request('GET',url,retries=3,redirect=4) # 请求重试3次,重定向4次 rq2 = http1.request('GET',url,retries=False) # 同时关闭请求重试与重定向 rq3 = http1.request('GET',url,redirect=False) # 仅关闭重定向
5、生产一个完整http请求
# 创建PoolManager实例 Http = urllib3.PoolManager() # 请求方式 method = "GET" # 请求目标URL地址 url = 'https://www.baidu.com/' # 请求头信息 head = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) Chrome/78.0.3904.108'} # 设置timeout,链接超时1秒,读取超时3秒 timeout = urllib3.Timeout(connect=1.0,read=3.0) # 设置重试次数 retries = 4 # 设置重定向次数 redirect = 8 # 请求 requests = Http.request(method,url,headers=head,timeout=timeout,retries=retries,redirect=redirect) print(requests.status) # requests.status返回状态码 print(requests.data.decode('utf8')) # 返回获取的内容

浙公网安备 33010602011771号