重拾Python语言爬虫之urllib3
小标 2018-12-10 来源 : 阅读 1506 评论 0

摘要:本文主要向大家介绍了重拾Python语言爬虫之urllib3,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

本文主要向大家介绍了重拾Python语言爬虫之urllib3,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

Urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库。许多Python的原生系统已经开始使用urllib3。Urllib3提供了很多python标准库urllib里所没有的重要特性:线程安全连接池客户端SSL/TLS验证文件分部编码上传协助处理重复请求和HTTP重定位支持压缩编码支持HTTP和SOCKS代理一、get请求urllib3主要使用连接池进行网络请求的访问,所以访问之前我们需要创建一个连接池对象,如下所示:import  urllib3

url = "//httpbin.org"http = urllib3.PoolManager();
r = http.request('GET',url+"/get")
print(r.data.decode())
print(r.status)

带参数的get
r = http.request('get','//www.baidu.com/s',fields={'wd':'周杰伦'})
print(r.data.decode())经查看源码:def request(self, method, url, fields=None, headers=None, **urlopen_kw):第一个参数method 必选,指定是什么请求,'get'、'GET'、'POST'、'post'、'PUT'、'DELETE'等,不区分大小写。第二个参数url,必选第三个参数fields,请求的参数,可选第四个参数headers  可选request请求的返回值是我们可以通过dir()查看其所有的属性和方法。
dir(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',# 'readlines', 'reason', 'release_conn', 'retries', 'seek', 'seekable', 'status',# 'stream', 'strict', 'supports_chunked_reads', 'tell', 'truncate', 'version', 'writable',# 'writelines']二、post请求import  urllib3
url = "//httpbin.org"fields = {    'name':'xfy'}
http = urllib3.PoolManager()
r = http.request('post',url+"/post",fields=fields)
print(r.data.decode())可以看到很简单,只是第一个参数get换成了post。并且参数不需要再像urllib一样转换成byte型了。三、设置headersimport  urllib3
headers = {     'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}
http = urllib3.PoolManager();
r = http.request('get',url+"/get",headers = headers)
print(r.data.decode())四、设置代理import  urllib3
url = "//httpbin.org"headers = {     'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}
proxy = urllib3.ProxyManager('//101.236.19.165:8866',headers = headers)
r = proxy.request('get',url+"/ip")
print(r.data.decode())五、当请求的参数为json在发起请求时,可以通过定义body 参数并定义headers的Content-Type参数来发送一个已经过编译的JSON数据import  urllib3
url = "//httpbin.org"import json
data = {'name':'徐繁韵'}

json_data = json.dumps(data)

http = urllib3.PoolManager()
r = http.request('post',url+"/post",body = json_data,headers = {'Content-Type':'application/json'})
print(r.data.decode('unicode_escape'))六、上传文件#元组形式with open('a.html','rb') as f:
    data = f.read()
http = urllib3.PoolManager()
r = http.request('post','//httpbin.org/post',fields = {'filefield':('a.html',data,'text/plain')})
print(r.data.decode())#二进制形式r = http.request('post','//httpbin.org/post',body = data,headers={'Content-Type':'image/jpeg'})
print(r.data.decode())七、超时设置# 1全局设置超时# http = urllib3.PoolManager(timeout = 3)# 2在request里设置# http.request('post','//httpbin.org/post',timeout = 3)八、重试和重定向import urllib3
http = urllib3.PoolManager()#重试r = http.request('post','//httpbin.org/post',retries = 5) #请求重试测次数为5次  ,默认为3ciprint(r.retries) #Retry(total=5, connect=None, read=None, redirect=0, status=None)#关闭重试http.request('post','//httpbin.org/post',retries = False) #请求重试测次数为5次  ,默认为3cir = http.request('get','//httpbin.org/redirect/1',redirect = False)
print(r.retries)# Retry(total=3, connect=None, read=None, redirect=None, status=None)print(r.status)
print(r.data.decode())
print("--------------------")
print(r.get_redirect_location())#302不是异常九、urllib3 本身设置了https的处理,但是有警告虽然可以请求,但是报如下警告:InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
  InsecureRequestWarning)禁用警告:import urllib3
urllib3.disable_warnings()  #禁用各种警告url = "https://www.12306.cn/mormhweb/"http = urllib3.PoolManager()
r = http.request('get',url)
print(r.data.decode())urllib3很强大,但是并没有requests好用。了解为主。

本文由职坐标整理并发布,希望对同学们学习Python有所帮助,更多内容请关注职坐标编程语言Python频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved