Python中的request,python+request
之前学过urllib,但是实现函数的时候有点复杂。比如在处理cookies进行网页验证时,需要编写opener和handle来处理。为了更方便地实现这些操作,有一个更强大的库请求。有了它,cookies、登录验证、代理设置等操作都不是问题。
加载库:导入请求1。实现get请求(后面还有其他参数要描述)r=requests . get( 3358 Baidu . com )1.1 实例化对象r的一些方法:
Type(r) #实例化对象的类型:requests . models . responsors . status _ code #状态代码type(r.text) #响应体为str格式(有时为json格式,JSON=str (dictionary)需要通过JSON()方法转换成dictionary)。r.text #响应正文(返回的网页,提取后续网页信息)r.cookies #获取cookiesr.headers #获取响应头r.url #获取URLr.history1.2 除了get请求外,类似的实现其他请求(还有其他参数后面介绍)
r=requests . post( http://http bin . org/post )r=requests . put( http://http bin . org/put )r=requests . delete( http://http bin . org/delete )r=requests . head( http://http bin . org/get )r=requests . options( http://http bin . org/get )1.3 在get请求中加入一些参数(等于加在网址上)
Data={name :郭达, age: 23} #添加get信息相当于追加:http://httpbin.org/get? age=22 name=dagooheaders={ User-Agent : Mozilla/5.0(Windows NT 10.0;Wow64) Apple WebKit/537.36 (khtml,像壁虎一样)Chrome/78 . 0 . 3904 . 108 Safari/537.36 } # Add request header r=requests . get( 3358 http bin . org/get ,params=data,Headers=headers) # params:参数2。抓取二进制文件并保存(下载:图片,音乐,电影)R=requests . Get( 3359 github . com/favicon . ico )#用open(favicon.ico ),Wb )获取二进制文件的链接为f:# binary write f . write(r.content)for new files #这里R . content:是R中包含的原始内容(这里是二进制格式,直接写就行)#不要用r.text:因为text把R中的内容转换成字符串格式(R发布请求R=requests . POST( 3358 http bin . org/POST )3.1 提交表单
Data={name :郭达, age : 23 } # Add form # get请求中的数据是Add参数(args),相当于修改URL,params=data# POST请求中的数据是add form (form),可以提供更多信息。Data=datar=requests.post()
files={ file :open( favicon . ico , rb)} #上传文件R=requests . post( 3358 http bin . org/post ,files=files)3.2 文件上传以字典的形式
# Get cookiesr=requests . Get( 3358 www . Baidu . com )print(r . cookies)# Get # cookies是键值对。为了我们的方便:#使用item()将Cookie打包到r.cookies.items()中key的元组列表中:print(key = value)# setting cookies headers={ Cookie :从浏览器复制的已登录Cookie , host: www.zhihu.com ,User-Agent :从浏览器复制 } # Set cookiesr=requests . get through请求头( 3359 www.zhihu.com ,headers=headers)3.3 获取和设置cookies(可以直接通过请求头设置)
保持会话的连续性,也就是说,cookies是动态变化的,无需手动操作。
s=requests . session()s . get( http://http bin . org/cookies/set/number/123456789 )r=s . get( 3358 http bin . org/cookies )print(r . text)#运行结果{ cookies
有些网站需要验证证书,但是没有证书是无法访问的。
通过验证强制网站不被验证。
验证=真(验证)
验证=假(验证)
r=requests . get( 3359 www . 12306 . cn ,var ify=false)虽然不验证,但是有警告建议验证。
有三种解决方法:1。忽略警告;2.将警告捕获到日志中;3.指定用于验证的本地证书。
1.忽略警告
从请求导入请求。包导入urllib3urllib3。disable _ warnings()r=requests . get( 3359 www . 12306 . cn ,var ify=false) 2。将警告捕获到日志中。
导入导入请求logging . capture warnings(true)r=requests . get( https://www . 12306 . cn ,var ify=false) 3 .指定用于验证的本地证书。
本地需要Crt和密钥(解密状态)
导入请求sr=请求。得到( https://www。12306 . cn ,cert=(/path/server.crt ,/path/key))3.4 保持会话(Session)
普通代理委托书
proxy={ http : http://10。10 .1 .10:3128 https : http://10。10 .1 .10 .1080 } r=请求。得到( https://www。淘宝。 com ,代理=代理)需要使用超文本传送协议基本身份验证的代理
代理格式:http://用户:密码@主机:端口
proxy={ http : http://user:password @ 10。10 .1 .10:3128 https : http://用户:密码@ 10。10 .1 .10 .1080 } r=请求。得到( https://www。淘宝。com ,proxy=proxy)SOCKS协议的代理(需要安装:请求[袜子])
proxy={ http : socks 5://user:password @ 10。10 .1 .10:3128 } r=请求。得到( https://www。淘宝。com ,proxy=proxy)SSL证书验证
导入请求#默认超时=无:永久等待r=请求。get( http://www。淘宝。 com ,timeout=1)代理设置
导入requestsr=请求。get( http://localhost:5000 ,auth=(用户名,密码))准备好的请求通过请求对象来设置所有参数(建议使用)来自请求导入请求,会话URL= http://http bin。 org/post data={ name :郭达} headers={ 用户代理: Mozilla/5.0(Windows NT 10.0;WOW64) AppleWebKit/537.36 (KHTML,像壁虎一样)Chrome/78。0 .3904 .108游猎/537.36 } #添加请求头s=Session()req=Request(POST ,url,data=data,headers=headers) #用参数构造请求对象preppd=s.prepare_request(req) #将请求对象转换为准备好的请求对象r=s.send(preppd) #将准备好的请求对象发送给rprint(r.text)
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。