requests库使用总结

来源:互联网 发布:淘宝电动清扫车多少钱 编辑:程序博客网 时间:2024/05/20 18:49

requests库

requests库的介绍和使用

requests库的更多信息参考:http://cn.python-requests.org/zh_CN/latest/

requests库的安装

pip install requests   # doc命令行下输入安装即可,测试例子:

>>> import requests                    #导入requests库>>> r = requests.get(url="http://www.baidu.com",timeout=30)  #返回一个Python对象r>>> r.status_code 200                                    #状态码200 Ok>>> r.encoding = r.apparent_encoding   #>>> r.text>>> type(r)                            #查看r类型,返回的是一个对象<class 'requests.models.Response'>

requests库的7个常用方法


get方法:

r = requests.get(url)

是服务器返回的一个包含服务器所有资源的Response对象,requests.get(url)是Python构造的一个向服务器请求资源的Request对象。

requests.get(url,params=None,**kwargs)

  • url :要获取的API/网页的URL链接
  • params:URL中的额外参数,可以是字典、字节流格式,可选
  • **kwargs:共有12个控制访问的参数

Response对象的常用属性

  • r.status_code  http请求的返回状态,200是OK
  • r.text  http响应内容的字符串形式,即URL返回的页面内容
  • r.encoding   从http Header中猜测的响应内容的编码方式,若header没有charset字段,则默认为ISO-8859-1编码,<meta charset='utf-8'>
  • r.apparent_encoding  从内容分析出的响应内容编码方式(备选编码)这个更准确解析页面的编码
  • r.content  http响应内容的二进制形式(如图片是由二进制存储的,就可以通过r.content还原这图片)
  • r.headers  http响应的响应头
  • r.raise_for_status http请求状态码不是200则会引发HTTPError异常

爬去网页通用代码框架

网络链接有风险,所以需要进行异常处理。


requests库的异常:

r.raise_for_status()   #判断r若果不是200,产生异常requests.HTTPError异常

爬去网页通用代码框架:

import requestsdef getHTMLText(url):    try:        r = requests.get(url,timeout=30)        r.raise_for_status() #请求不成功不是200,则引发HTTPError异常        r.encoding = r.apparent_encoding        return r.text    except:        return "异常了!"if __name__ == "__main__":    url = "http://www.baidu.com"    print(getHTMLText(url))

HTTP协议和requests7个方法

http是超文本传输协议,是一个基于请求与响应模式的、无状态的应用层协议。第一次请求和另一次请求没有联系、工作于tcp协议之上。ip--tcp-http..

http协议采用URL作为定位网络资源的标识,协议名://host[:port]/资源路径

一个URL对应服务器一个资源,http协议对资源的操作方法:每次操作都是独立和无状态的


和requests库的get、post、put、、、7个方法是一一对应的!!!

理解PATCH和PUT的区别:

  • PATCH是仅向URL提交局部更新的字段数据,其他不改的数据不用上传
  • PUT是向服务器上传的字段会覆盖原来服务器的字段,若果只想改变服务器一个字段用PATCH上传该字段即可,若果用PUT则需要把改变的字段和服务器原来的字段全部上传到对应字段,否则会上除掉不上传的字段

PATCH优点是节省网络带宽啊!需要改服务器哪个字段就上传哪个字段就可!

Requests库的head方法:

>>> r = requests.head(url="http://www.jd.com",timeout=30)  #可以以很少的网络流量获取网站大体信息>>> r.headers                                              #响应头{'Content-Type': 'text/html', 'Connection': 'keep-alive', ...}>>> r.text                                                 #所以API内容是空的''
Requests库的post方法:控制参数是data
向URLpost一个字典,自动编码为form(表单)

>>> payload = {'key1':'value1','key2':'value2'}  #post的是一个字典,则自动编码为form表单>>> r = requests.post(url='http://httpbin.org/post',data=payload,timeout=30)>>> print(r.text)   #返回json{......   "form": {                                      #post的是字典或键值对,自动放在form表单下的    "key1": "value1",     "key2": "value2"  }, ......}>>> print(r.json())  #返回的是一个Python字典{... 'form': {'key1': 'value1', 'key2': 'value2'}, ......}
向URL post一个字符串,自动编码为data

>>> string = "skdkheh990"  #post一个字符串,自动编码为data>>> r = requests.post(url="http://httpbin.org/post",data = string)>>> print(r.text)        #返回json{   ......  "data": "skdkheh990",  #post字符串自动存在data字段下  "form": {},   ......  }>>> r.json()             #json()方法返回一个Python字典{...... 'form': {}, 'url': 'http://httpbin.org/post', 'data': 'skdkheh990',......}
Requests库的put方法:
和post方法一样,只不过会把原有的数据覆盖掉的

Requests库主要方法解析(7个)

r = requests.request(method,url,**kwargs),request方法是基础方法

method:请求方式

  • r = requests.request('GET',url,**kwargs)
  • r = requests.request('POST',url,**kwargs)
  • r = requests.request('PUT',url,**kwargs)
  • r = requests.request('PATCH',url,**kwargs)
  • r = requests.request('HEAD',url,**kwargs)
  • r = requests.request('delete',url,**kwargs)
  • r = requests.request('OPTIONS',url,**kwargs) #向服务器获取到服务器和客户端一些打交道的参数与获取资源无直接相干

**kwargs:控制方为参数,都是可选项

1.params:是字典或字节序列,作为参数增加到URL中,是get方法中使用

>>> kv = {'wd':'unittest'}>>> r = requests.get(url='http://www.baidu.com',params=kv)>>> r.status_code200>>> r.url'http://www.baidu.com/?wd=unittest'
2.data:是字典、字节序列或文件对象,作为Request的内容,向服务器提交资源时使用,post、put、patch、delete方法使用

>>> dic ={'key1':'value1','key2':'value2'}      #>>> r = requests.post(url='http://httpbin.org/post',data=dic)#post提交到服务器不会显示在URL上>>> body='stringafasdf'>>> r = requests.post(url="http://httpbin.org/post",data=body)
3.json:是json格式的数据,作为Request的内容,提交内容是json串时,用到json=。。。,post等方法使用

>>> json1 ={'key1':'value1'}>>> r = requests.post(url="http://httpbin.org/post",json=json1)>>> print(r.text){  "args": {},   "data": "{\"key1\": \"value1\"}",   "files": {},   "form": {},   "json": {             #json=json1会把数据提交到服务器的json域中    "key1": "value1"  }, ......}
post 控制参数用到data、json的区别:

  1. 提交的数据是字典或键值对,使用data=XXX,则提交到服务器的form表单下;
  2. 提交的数据是字符串,使用data=XXX,则提交到服务器的data下;
  3. 提交的数据是json串时,使用json=XXX,则提交到服务器的json域;

4.headers:字典格式,用于定制http请求头

>>> header={'user-agent':'chrome/10'} #模拟浏览器向服务器发起请求就是用headers>>> r = requests.request('POST',url="http://httpbin.org/post",headers=header)
5.cookies:是字典或cookieJar格式,Request中的cookie

6.auth :是元组类型,用于http认证功能

7.files:是字典类型,用于向服务器传输文件

>>> fs = {'file':open(r'E:\test.txt','rb')}>>> r = requests.post(url="http://httpbin.org/post",files = fs,timeout=30)>>> print(r.text){  "args": {},   "data": "",   "files": {        #向服务器提交的文件保存到服务器的files域中    "file": "hahfhadfhadsfhhsdflahlowej[of567890987654567890987654345678"  },   "form": {}, ......}
8.timeout:设定超时时间,秒为单位
在设定时间内没有返回内容则返回一个timeout异常

9.proxies:是字典类型,可以为我们爬取网页设定访问代理服务器,可以增加登录认证

>>> pxs = {'http':'http"//user:pass@10.10.10.:1234','https':'https://10.10.10.1.4321'}#设置2个代理,一个是http访问时使用的代理,另一个是https访问时使用的代理>>> r = requests.get(url='http://www.baidu.com',proxies=pxs)                           #可以隐藏用户爬去网页时原来的IP地址信息
10.allow_redirects:Ture/False,默认是Ture,用于允不允许URL进行重定向

11.stream:Ture/False,默认是Ture,用于对获取的内容是否立即下载

12.verify:Ture/False,默认是Ture,用于验证SSL证书开关

13.cert:保存本地SSL证书路径的字段


0 0
原创粉丝点击