Requests库的使用(三)

1、简介

Requests是一个优雅而简单的Python HTTP库,专为人类而构建。

Requests是有史以来下载次数最多的Python软件包之一,每天下载量超过400,000次。

之前的urllib做为Python的标准库,因为历史原因,使用的方式可以说是非常的麻烦而复杂的,而且官方文档也十分的简陋,常常需要去查看源码。与之相反的是,Requests的使用方式非常的简单、直观、人性化,让程序员的精力完全从库的使用中解放出来。

Requests的官方文档同样也非常的完善详尽,而且少见的有中文官方文档:http://cn.python-requests.org/zh_CN/latest/。

英文文档:http://docs.python-requests.org/en/master/api/

1.1 例子与特性

可以说Requests最大的特性就是其风格的简单直接优雅。无论是请求方法,还是响应结果的处理,还有cookies,url参数,post提交数据,都体现出了这种风格。

14894401-6122c30960f5ef91.png
14894401-b0d241cb98ca32c4.png

2、发起请求

2.1 请求方法

Requests的请求不再像urllib一样需要去构造各种Request、opener和handler,使用Requests构造的方法,并在其中传入需要的参数即可。

每一个请求方法都有一个对应的API,比如GET请求就可以使用get()方法:

14894401-23244e3755a4184c.png

而POST请求就可以使用post()方法,并且将需要提交的数据传递给data参数即可:

14894401-061cf3f94f3ff276.png

而其他的请求类型,都有各自对应的方法:

14894401-5de83074fa691c6b.png

2.2  传递URL参数

        传递URL参数也不用再像urllib中那样需要去拼接URL,而是简单的,构造一个字典,并在请求时将其传递给params参数:

14894401-e933c88299470d9a.png

此时,查看请求的URL,则可以看到URL已经构造正确了:

14894401-e34dce4e30ea078b.png

并且,有时候我们会遇到相同的url参数名,但有不同的值,而python的字典又不支持键的重名,那么我们可以把键的值用列表表示:

14894401-1cc641cdeaee6d52.png

2.3 自定义Headers

如果想自定义请求的Headers,同样的将字典数据传递给headers参数。

14894401-26833db194047be3.png

Requests中自定义Cookies也不用再去构造CookieJar对象,直接将字典递给cookies参数。

14894401-0217c7b545a86acc.png

2.4 设置代理

当我们需要使用代理时,同样构造代理字典,传递给proxies参数。

14894401-1b28beb1e0ef20eb.png

2.5 重定向

在网络请求中,我们常常会遇到状态码是3开头的重定向问题,在Requests中是默认开启允许重定向的,即遇到重定向时,会自动继续访问。

14894401-033c7195e34e0eab.png

2.6 设置超时

设置访问超时,设置timeout参数即可。

14894401-c22814f0b1c35a96.png

3、接收响应

3.1 响应内容

通过Requests发起请求获取到的,是一个requests.models.Response对象。通过这个对象我们可以很方便的获取响应的内容。

之前通过urllib获取的响应,读取的内容都是bytes的二进制格式,需要我们自己去将结果decode()一次转换成字符串数据。

而Requests通过text属性,就可以获得字符串格式的响应内容。

14894401-a0ece0b4962b18f1.png


3.2 字符编码

Requests会自动的根据响应的报头来猜测网页的编码是什么,然后根据猜测的编码来解码网页内容,基本上大部分的网页都能够正确的被解码。而如果发现text解码不正确的时候,就需要我们自己手动的去指定解码的编码格式。

14894401-afe75767211ecb58.png

3.3 二进制数据

而如果你需要获得原始的二进制数据,那么使用content属性即可。

14894401-9a6ae19e168b3285.png

3.4 json数据

        如果我们访问之后获得的数据是JSON格式的,那么我们可以使用json()方法,直接获取转换成字典格式的数据。

14894401-d023a90ccbfea933.png

3.5 状态码

通过status_code属性获取响应的状态码

14894401-824ce7882ef22a21.png

3.6 响应报头

通过headers属性获取响应的报头。

14894401-6115f1cf1938154d.png

3.7 服务器返回的cookies

通过cookies属性获取服务器返回的cookies

14894401-455b307813eefcf4.png

3.8 url

还可以使用url属性查看访问的url。

14894401-5310bd6c926ce9d8.png

4、Session对象

在Requests中,实现了Session(会话)功能,当我们使用Session时,能够像浏览器一样,在没有关闭关闭浏览器时,能够保持住访问的状态。

这个功能常常被我们用于登陆之后的数据获取,使我们不用再一次又一次的传递cookies。

14894401-1e84a9836a87639c.png

首先我们需要去生成一个Session对象,然后用这个Session对象来发起访问,发起访问的方法与正常的请求是一摸一样的。

同时,需要注意的是,如果是我们在get()方法中传入headers和cookies等数据,那么这些数据只在当前这一次请求中有效。如果你想要让一个headers在Session的整个生命周期内都有效的话,需要用以下的方式来进行设置:

14894401-a48f9fd7efe84d8c.png


作业:1.使用requests下载百度图片首页面所有图片。

14894401-39eafb53a8cedd67.png

猜你喜欢

转载自blog.csdn.net/weixin_34217773/article/details/88188675
今日推荐