详解 Requests 库的用法

详解 Requests 库的用法
最新回答
余安

2021-09-14 07:54:42

如果你已熟练掌握了多线程与多进程的技巧,那么恭喜你,你的爬虫编程技能已上了一个新的台阶。不过,我们仍需继续前进,因为道路还很漫长。接下来,本文将重点介绍一个Python库——Requests,它是urllib库的优秀替代品。

Requests库的官方说明充满霸气:“Requests是Python中唯一无转基因的HTTP库,安全供人类使用。”正因为其使用方面更人性化、更简洁、更舒适,以及被Google、Microsoft、Amazon、Twitter等国际知名公司采用,我们有必要深入学习Requests库。学习之前,让我们了解它具备哪些特性。

具体如下:

1. 安装Requests:安装它有两种方法。推荐使用简单又方便管理的git克隆源码库或直接从GitHub下载源码压缩包,接着进入requests目录执行相关命令。

2. 发起请求:通过Requests库向百度贴吧发起HTTP请求并获取页面源代码。使用POST请求网页时,只需将get替换为post即可。

3. 传递URL参数:在请求时,常需携带参数。Requests提供了params关键字参数来满足需求,params为字符串字典,构建并赋值即可。无需考虑编码问题,Requests会自动处理。用法如下:

字典为空不会被拼接到URL中。参数拼接顺序随机,不按写在前面优先拼接。

为什么会有"+"号?Requests为替代空格自动转化。

4. 构造请求头:为了使Requests发起的HTTP请求伪装成浏览器,使用headers关键字参数。headers参数同样为字典类型,具体用法见代码。

5. 使用data参数提交数据:data参数常与POST请求方式结合使用,传递字典给data参数以提交表单数据或JSON数据。

6. 使用代理:有些网站限制浏览频率,使用代理可突破限制。需使用proxies参数,proxies为字典类型。除支持HTTP代理外,Requests在2.10版本新增支持SOCKS协议代理。

7. 设置请求超时:在使用代理发起请求时,可能因代理失效导致请求失败,因此需设置请求超时,发现请求超时后更换代理重连。

8. 使用Cookie:请求结果中获取Cookie值,可直接访问。发送cookies到服务器,使用cookies参数,参数为字典类型。

9. 响应结果:使用Requests请求无需担心编码问题,感觉太人性化。请求发出后,Requests基于HTTP头部推测响应编码,访问response.text时使用推测的文本编码。改变response编码格式,可这样做:

10. 二进制响应内容:非文本请求以字节形式访问响应体。Requests自动解码gzip和deflate传输编码的响应数据。

11. JSON响应内容:Requests内置JSON解码器,处理JSON数据。JSON解码失败,response.json()会抛出异常。

12. 响应状态码:根据响应码判断请求结果,获取状态码方法如下。Requests内部提供状态表,若需判断状态码,查看requests.codes源码。

高级用法包括:

13. 重定向与请求历史:某些页面进行重定向处理,Requests自动处理所有重定向,包括301和302状态码。使用response.history追踪重定向。禁用重定向处理,可使用allow_redirects参数。

14. 会话:Requests支持session跟踪用户连接。例如跨请求保持cookie,可这样操作。

15. 身份认证:有些web站点需要身份认证才能访问。Requests支持HTTP Basic Auth、netrc认证、摘要式身份认证、OAuth 1认证等。

本文为原创发布于微信公众号「极客猴」,欢迎关注获取更多原创分享。