这篇文章主要介绍了大蟒爬虫之urllib3的使用示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Urllib3是一个功能强大,条理清晰,用于超文本传送协议客户端的计算机编程语言库。许多计算机编程语言的原生系统已经开始使用urllib3 .Urllib3提供了很多大蟒标准库urllib里所没有的重要特性:
线程安全
连接池
客户端SSL/TLS验证
文件分部编码上传
协助处理重复请求和超文本传送协议重定位
支持压缩编码
支持超文本传送协议和袜子代理
一、get请求
urllib3主要使用连接池进行网络请求的访问,所以访问之前我们需要创建一个连接池对象,如下所示:
导入urllib3
url='http://httpbin.org '
http=urllib3 .池管理器();
r=http.request('GET ',url '/get ')
print(r.data.decode())
打印(r .状态)
带参数的得到
r=http.request('get ',' http://www.baidu.com/s ',fields={'wd ':'周杰伦'})
print(r.data.decode())
经查看源码:
定义请求(自身,方法,网址,字段=无,标题=无,**urlopen_kw):
第一个参数方法必选,指定是什么请求、'获取'、'获取'、'发布'、'上传'、'删除'等,不区分大小写。
第二个参数url,必选
第三个参数字段,请求的参数,可选
第四个参数头球可选
请求请求的返回值是位于0x000001B3879440B8的urllib3.response.HTTPResponse对象
我们可以通过目录()查看其所有的属性和方法。
导演(r)
直截取了一部分
#'data ',' decode_content ',' enforce_content_length ',' fileno ',' flush ',' from_httplib ',
# 'get_redirect_location ',' getheader ',' getheaders ',' headers ',' info ',' isatty ',
# 'length_remaining ',' read ',' read_chunked ',' readable ',' readinto ',' readline ',
# '读取行','原因','释放_连接','重试','查找','可查找','状态,
# 'stream ',' strict ',' supports_chunked_reads ',' tell ',' truncate ',' version ',' writable ',
# 'writelines']
二、post请求
导入urllib3
url='http://httpbin.org '
字段={
名称:' xfy '
}
http=urllib3 .池管理器()
r=http.request('post ',url '/post ',fields=fields)
print(r.data.decode())
可以看到很简单,只是第一个参数得到换成了张贴。
并且参数不需要再像urllib一样转换成字节型了。
三、设置headers
导入urllib3
标题={
用户代理:' Mozilla/5.0(Windows NT 10.0;win 64x 64)apple WebKit/537.36(KHTML,像壁虎一样)Chrome/60。0 .3112 .113 Safari/537.36 '
}
http=urllib3 .池管理器();
r=http.request('get ',url '/get ',headers=头)
print(r.data.decode())
四、设置代理
导入urllib3
url='http://httpbin.org '
标题={
用户代理:' Mozilla/5.0(Windows NT 10.0;win 64x 64)apple WebKit/537.36(KHTML,像壁虎一样)Chrome/60。0 .3112 .113 Safari/537.36 '
}
proxy=urllib3 .代理经理(' http://101。236 .19 .165:8866 ',头=头)
r=proxy.request('get ',url '/ip ')
print(r.data.decode())
五、当请求的参数为json
在发起请求时,可以通过定义身体参数并定义头球的内容类型参数来发送一个已经过编译的JSON数据
导入urllib3
url='http://httpbin.org '
导入json
data={'name ':'徐繁韵'}
json_data=json.dumps(data)
http=urllib3 .池管理器()
r=http.request('post ',url '/post ',body=json_data,headers={ ' Content-Type ':' application/JSON ' })
打印(r .数据。解码(' unicode _ escape '))
六、上传文件
#元组形式
用打开(' a.html ',' rb ')作为女:
data=f.read()
http=urllib3 .池管理器()
r=http.request('post ',' http://httpbin.org/post ',fields={'filefield':('a.html ',data,' text/plain')})
print(r.data.decode())
#二进制形式
r=http.request('post ',' http://httpbin.org/post ',body=data,headers={ ' Content-Type ':' image/JPEG ' })
print(r.data.decode())
七、超时设置
# 1全局设置超时
# http=urllib3 .池管理器(超时=3)
# 2在请求里设置
# http.request('post ',' http://httpbin.org/post ',timeout=3)
八、重试和重定向
导入urllib3
http=urllib3 .池管理器()
#重试
r=http.request('post ',' http://httpbin.org/post ',重试次数=5) #请求重试测次数为5次,默认为3ci
打印(重试次数)#重试(总数=5,连接=无,读取=无,重定向=0,状态=无)
#关闭重试
http.request('post ',' http://httpbin.org/post ',retries=False) #请求重试测次数为5次,默认为3ci
r=http.request('get ',' http://httpbin.org/redirect/1 ',redirect=False)
打印(重试次数)#重试(总数=3,连接=无,读取=无,重定向=无,状态=无)
打印(r .状态)
print(r.data.decode())
打印('-')
打印(r . get _重定向_位置())
#302不是异常
九、urllib3 本身设置了https的处理,但是有警告
虽然可以请求,但是报如下警告:
不安全请求警告:正在发出未经验证的HTTPS请求。强烈建议添加证书验证。请参阅:https://URL库3。阅读文档。io/en/最新/高级-使用。html # SSL-警告
不安全请求警告)
禁用警告:
导入urllib3
urllib3.disable_warnings() #禁用各种警告
URL=' https://www。12306 .' cn/mormhweb/'
http=urllib3 .池管理器()
r=http.request('get ',url)
print(r.data.decode())
urllib3很强大,但是并没有要求好用。了解为主。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。