Python爬虫-请求模块urllib3
urllib3是一个功能强大、条理清晰,用于HTTP 客户端的第三方模块,许多Python 的原生系统已经开始使用 urllib3。urllib3 提供了很多 Python 标准库里所没有的重要特性:
线程安全。
连接池。
客户端SSL/TLS验证。
使用 multipart编码上传文件。
Helpers用于重试请求并处理HTTP重定向。
支持gzip 和 deflate编码。
支持HTTP 和SOCKS 代理。
100%的测试覆盖率。
使用 urllib3 模块发送网络请求时,首先需要创建PoolManager对象,通过该对象调用request()方法来实现网络请求的发送。request()方法的语法格式如下:
request (method, url, fields = None, headers = None, urlopen_kw )
method:必选参数,用于指定请求方式,如GET、POST、PUT等。
url:必选参数,用于设置需要请求的URL地址。
fields:可选参数,用于设置请求参数。
headers:可选参数,用于设置请求头。
使用request()方法实现 GET请求
import urllib3 # 导入urllib3模块
url = "http://httpbin.org/get"
http = urllib3.PoolManager() # 创建连接池管理对象
r = http.request('GET',url) # 发送GET请求
print(r.status) # 打印请求状态码
运行:
200
使用PoolManager对象向多个服务器发送请求
一个PoolManager对象就是一个连接池管理对象,通过该对象可以实现向多个服务器发送请求。示例代码如下:
import urllib3 # 导入urllib3模块
urllib3.disable_warnings() # 关闭ssl警告
jingdong_url = 'https://www.jd.com/' # 京东url地址
python_url = 'https://www.python.org/' # Python url地址
baidu_url = 'https://www.baidu.com/' # 百度url地址
http = urllib3.PoolManager() # 创建连接池管理对象
r1 = http.request('GET',jingdong_url) # 向京东地址发送GET请求
r2 = http.request('GET',python_url) # 向python地址发送GET请求
r3 = http.request('GET',baidu_url) # 向百度地址发送GET请求
print('京东请求状态码:',r1.status)
print('python请求状态码:',r2.status)
print('百度请求状态码:',r3.status)
运行:
京东请求状态码: 200
python请求状态码: 200
百度请求状态码: 200
使用request()方法实现POST请求
使用urllib3 模块向服务器发送 POST 请求时并不复杂,与发送GET 请求相似,只是需要在 request()
方法中将 method参数设置为“POST”,然后将 fields参数设置为字典类型的表单参数。示例代码如下:
import urllib3 # 导入urllib3模块
urllib3.disable_warnings() # 关闭ssl警告
url = 'https://www.httpbin.org/post' # post请求测试地址
params = {
'name':'Jack','country':'中国','age':30} # 定义字典类型的请求参数
http = urllib3.PoolManager() # 创建连接池管理对象
r = http.request('POST',url,fields=params) # 发送POST请求
print('返回结果:',r.data.decode('utf-8'))
运行:
返回结果: {
"args": {
},
"data"