Python中的requests库日常使用教程

requests库在python日常开发工作中较为常见,无论是爬虫方向、还是处理web接口都用到了requests库,它的方法很丰富强大,以下记录的是平日里常用到的方法:

1、HTTP

HTTP,Hypertext Transfer Protocol,超文本传输协议

HTTP是一个基于“请求与响应”模式的、无状态的应用层协议,采用URL作为定位网络资源的标识。URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源。
URL格式:http://host[:port][path]
host:合法的Internet主机域名或IP地址
port:端口号,缺省端口为80
path:请求资源的路径
       HTTP协议对资源的操作方法说明

  • GET请求获取URL位置的资源

  • HEAD请求获取URL位置资源的响应消息报告,即获取该资源的头部信息

  • POST请求向URL位置的资源后附加新的数据

  • PUT请求向URL位置存储一个资源,覆盖原URL位置的资源

  • PATCH请求局部更新URL位置的资源,即改变该处资源的部分内容

  • DELETE请求删除URL位置存储的资源

2、requests库–方法说明

  • requests.request()构造一个请求,支撑以下各方法的基础方法

  • requests.get()获取HTML网页的主要方法,对应于HTTP的GET

  • requests.head()获取HTML网页头部信息的方法,对应于HTTP的HEAD

  • requests.post()向HTML网页提交POST请求的方法,对应于HTTP的POST

  • requests.put()向HTML网页提交PUT请求的方法,对应于HTTP的PUT

  • requests.patch()向HTML网页提交局部修改请求,对应于HTTP的PATCH

  • requests.delete()向HTML页面提交删除请求,对应于HTTP的DELETE

3、requests库的request方法详解

requests.request(method,url,**kwargs)

method:请求方式,  有‘get’‘head’‘post’‘put’‘patch’‘delete’‘options’等7种

url:拟获取页面的url链接
kwargs:控制访问的参数,共13个
参数说明

  • params ———#字典或字节序列,作为参数增加到url中

  • data ————#字典、字节序列或文件对象,作为Request的内容

  • jsonJSON ————# 格式的数据,作为Request的内容

  • headers ———— #字典,HTTP定制头

  • cookies ————#字典或CookieJar,Request中的cookie

  • auth ————#元组,支持HTTP认证功能

  • files ———— #字典类型,传输文件

  • timeout ————#设定超时时间,秒为单位

  • proxies ————字典类型,设定访问代理服务器,可以增加登录认证

  • allow_redirects ————#True/False,默认为True,重定向开关

  • stream ————#True/False默认为True,获取内容立即下载开关

  • verify ————#True/False,默认为True,认证SSL证书开关

  • cert ————#本地SSL证书路径

4、requests.session()会话保持的使用

requests库的session会话对象可以跨请求保持某些参数,说白了,就是比如你使用session成功的登录了某个网站,则在再次使用该session对象请求该网站的其他网页都会默认使用该session之前使用的cookie等参数

尤其是在保持登陆状态时运用的最多,在某些网站抓取,或者app抓取时,有的是强制登陆,有的是不登陆返回的数据就是假的或者说是不完整的数据,那我们不可能去做到每一次请求都要去登陆一下,怎么办,就需要用到保持会话的功能了,我们可以只登陆一次,然后保持这种状态去做其他的或者更多的请求。

其次,我们该如何使用会话保持?举一个事例来说明一下:
#requests.session():维持会话,可以让我们在跨请求时保存某些参数

import requestssession = requests.session()url = 'https://www.douban.com/accounts/login'form_data = {'source': 'index_nav','form_email': 'xxx','form_password': 'xxx','captcha-solution': 'stamp','captcha-id': 'b3dssX515MsmNaklBX8uh5Ab:en'}req_header = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',}response = session.post(url,headers=req_header,data=form_data)if response.status_code == 200:url = 'https://www.douban.com/people/175417123/'response = session.get(url,headers = req_header)if response.status_code == 200:with open('douban3.html','w') as file:file.write(response.text)

接下来的一点就是,我们该如何在session中手动设置cookie?​​​​​​​

import requestsimport timemycookie = { "PHPSESSID":"56v9clgo1kdfo3q5q8ck0aaaaa" }x = requests.session()requests.utils.add_dict_to_cookiejar(x.cookies,{"PHPSESSID":"07et4ol1g7ttb0bnjmbiqjhp43"})x.get("http://127.0.0.1:80",cookies = mycookie)time.sleep(5)
x.get("http://127.0.0.1:80")

这样,通过requests.utils.add_dict_to_cookiejar对session对象设置cookie,之后所有的请求都会自动加上我自定义的cookie内容。

也可以通过requests.utils.cookiejar_from_dict 先生成一个cookiejar对象,时候在赋值给session.cookies。貌似还可以使用session.cookies.set()或者update()。

另外说一点单独处理cookie字段,处理为字典格式​​​​​​​

cookie = "SINAGLOBAL=821034395211.0111.1522571861723; wb_cmtLike_1850586643=1; [email protected]; wb_timefeed_1850586643=1; UOR=,,login.sina.com.cn; wvr=6; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WWsNeq71O_sXkkXNnXFHgOW5JpX5KMhUgL.Fo2RSK5f1hqcShe2dJLoI0qLxK-L12qLB-zLxKqL1hnL1K2LxK-LBo5L12qLxKqL1hML1KzLxKnL1K.LB-zLxK-L1K-LBKqt; YF-V5-G0=c99031715427fe982b79bf287ae448f6; ALF=1556795806; SSOLoginState=1525259808; SCF=AqTMLFzIuDI5ZEtJyAEXb31pv1hhUdGUCp2GoKYvOW0LQTInAItM-ENbxHRAnnRUIq_MR9afV8hMc7c-yVn2jI0.; SUB=_2A2537e5wDeRhGedG7lIU-CjKzz-IHXVUm1i4rDV8PUNbmtBeLVrskW9NUT1fPIUQGDKLrepaNzTEZxZHOstjoLOu; SUHB=0IIUWsCH8go6vb; _s_tentry=-; Apache=921830614666.5322.1525261512883; ULV=1525261512916:139:10:27:921830614666.5322.1525261512883:1525239937212; YF-Page-G0=b5853766541bcc934acef7f6116c26d1"cookie_dict = {i.split("=")[0]: i.split("=")[1] for i in cookie.split("; ")}

5、Requests库的常见异常

  1. requests.ConnectionError:网络连接错误异常,例如DNS查询失败、连接被拒绝等。

  2. requests.HTTPError:HTTP错误异常,表示请求返回了不成功的状态码。

  3. requests.URLRequired:URL缺失异常,当没有提供有效的URL时抛出。

  4. requests.TooManyRedirects:超过最大重定向次数异常,当请求重定向次数超过设定的最大值时抛出。

  5. requests.ConnectTimeout:连接远程服务器超时异常,当连接远程服务器的时间超过设定的超时时间时抛出。

  6. requests.Timeout:请求URL超时异常,当请求URL的时间超过设定的超时时间时抛出。

你可能感兴趣的:(python,开发语言)