requests库的基础使用
1.requests简介
Requests是一个优雅而简单的Python HTTP库,专为人类而构建,requests的使用方式非常的简单、直观、人性化,让程序员的精力完全从库的使用中解放出来。
Requests的官方文档同样也非常的完善详尽,而且少见的有中文官方文档:http://cn.python-requests.org/zh_CN/latest/。 英文文档:http://docs.python-requests.org/en/master/api/
首先打开requests库的源码
def request(self, method, url, params=None, data=None, headers=None, cookies=None, files=None, auth=None, timeout=None, allow_redirects=True, proxies=None, hooks=None, stream=None, verify=None, cert=None, json=None)
Requests的请求不再像urllib一样需要去构造各种Request、opener和handler,使用Requests构造的方法,并在其中传入需要的参数即可。每一个请求方法都有一个对应的API,比如GET请求就可以使用get()方法,而其他的请求类型,都有各自对应的方法:
import requests req1 = requests.get("https://www.baidu.com") req2 = requests.post("https://www.baidu.com") req3 = requests.put("https://www.baidu.com") req4 = requests.delete("https://www.baidu.com")
2.发送请求和传入参数
我们可以直接往传入headers,我们以简书网为例:
# 自定义headers headers = { "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36" } # 自定义cookies cookies = { "cookie": "sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2216e2b34f5c5357-040290e0015209-7373e61-1049088-16e2b34f5c6470%22%2C%22%24device_id%22%3A%2216e2b34f5c5357-040290e0015209-7373e61-1049088-16e2b34f5c6470%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22%22%2C%22%24latest_referrer_host%22%3A%22%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%7D%7D; __yadk_uid=Xtd0BZTUL8a4fZOfayVfSgHUbAlRlIyC; signin_redirect=https%3A%2F%2Fwww.jianshu.com%2F; read_mode=day; default_font=font2; locale=zh-CN; Hm_lvt_0c0e9d9b1e7d617b3e6842e85b9fb068=1572683291,1572878893,1572910084,1573038354; Hm_lpvt_0c0e9d9b1e7d617b3e6842e85b9fb068=1573038354" } # 对简书网发送请求 req = requests.get("https://www.jianshu.com", headers=headers, cookies=cookies)
在网络请求中,我们常常会遇到状态码是3开头的重定向问题,在Requests中是默认开启允许重定向的,即遇到重定向时,会自动继续访问。
req = requests.get("https://www.jianshu.com", headers=headers, cookies=cookies,allow_director=False)
当我们需要使用代理时,同样构造代理字典,传递给proxies参数,自定义proxies参数,porxies = {"http":"id:port"}
3.接受响应
通过Requests发起请求获取到的是request对象,我们可以通过text直接读取到字符串格式的响应内容,或用content获取原始的二进制数据。Requests会自动的根据响应的报头来猜测网页的编码是什么,然后根据猜测的编码来解码网页内容,基本上大部分的网页都能够正确的被解码。而如果发现text解码不正确的时候,就需要我们自己手动的去指定解码的编码格式。如下:
import requests
# 对简书网发送请求 req = requests.get("https://www.jianshu.com", headers=headers, cookies=cookies) # text读取内容 req.encoding = "utf-8" res = req.text print(res)
或者用content方法获取二进制数据
# content读取响应内容 res = req.content.decode() print(res)
除了查看响应内容之外,我们还可以单独地查看请求头中的headers,encoding,url,status code等
res_code = req.status_code res_encoding = req.encoding res_header = req.headers["Connection"] res_headers = req.headers res_url = req.url print(res_code) print(res_encoding) print(res_headers) print(res_url)
4.session对象
在Requests中,实现了Session(会话)功能,当我们使用Session时,能够像浏览器一样,在没有关闭关闭浏览器时,能够保持住访问的状态。 这个功能常常被我们用于登陆之后的数据获取,使我们不用再一次又一次的传递cookies。
首先我们需要去生成一个Session对象,然后用这个Session对象来发起访问,发起访问的方法与正常的请求是一摸一样的。
session = requests.session() req = session.get("http://www.baidu.com") req.encoding = "utf-8" res = req.text print(res)
同时,需要注意的是,如果是我们在get()方法中传入headers和cookies等数据,那么这些数据只在当前这一次请求中有效。如果你想要让一个headers在Session的整个生命周期内都有效的话,需要用以下的方式来进行设置:
# 实例一个对象 session = requests.session() # 设置整个headers session.headers = { "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36" } # 增加一条header session.headers.update({"x-test":"true"}) req = session.get("http://www.jianshu.com",headers=session.headers) req.encoding = "utf-8" res = req.text print(res)
原文地址:https://www.cnblogs.com/zgzeng/p/11808185.html
- 平方根的C语言实现(一) —— 浮点数的存储
- 用awk写递归
- bc计算A股上市新股依次涨停股价
- ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式
- python访问http的GET/POST
- 用openssl库RSA加密解密
- Kobject浅析
- ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”
- RSA简介(二)——模幂算法
- 为虚拟机vCPU绑定物理CPU
- RSA简介(三)——寻找质数
- RSA简介(四)——求逆算法
- 平方根的C语言实现(三) ——最终程序实现
- ASP.NET Core应用的错误处理[3]:ExceptionHandlerMiddleware中间件如何呈现“定制化错误页面”
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- matlab结构体 rmfield,arrayfun,structfun,struct2cell,cell2struct
- PHP函数参数传递方法的具体改进技巧
- matlab学习笔记11_3 高维数组处理 filp, shiftdim, size, permute, ipermute
- 看完这篇文章,你的Linux基础就差不多了
- jzy3D从入门到弃坑
- git丢弃本地修改的所有文件(新增、删除、修改)
- Jmetal设置Solution Variables
- git log 查看某文件的修改历史
- 进程和线程的概念、区别和联系
- CDATA和转义字符
- 递归解决全排列问题
- 支付的时候的参数校验
- PHP函数库之BC高精确度函数库
- php的精度计算问题(bcadd和bcsub)
- 基于 CheckList 的 NLP 模型行为测试