Requests库快速学习
时间:2022-07-28
本文章向大家介绍Requests库快速学习,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Requests库的作者是大名鼎鼎的kennethreitz,它的口号是“HTTP For Humans”,为人类使用HTTP而生。
requests常用来进行接口请求,爬取网页等,相对于原生的urllib,它发起请求更加简洁和容易理解,支持HTTP连接保持和连接池、cookie保持会话、文件上传和支持自动确定响应内容的编码等。
开源地址:https://github.com/kennethreitz/requests
安装
pip install requests
Requests库7种请求方法:
通过查看源码我们可以发现,后面6种方法都是在调用request()
方法。
def get(url, params=None, **kwargs):
return request('get', url, params=params, **kwargs)
def post(url, data=None, json=None, **kwargs):
return request('post', url, data=data, json=json, **kwargs)
request()
方法参数说明:
requests.request(method, url, **kwagrs)
- method: 请求方式,对应get/post等6种方法
- url: 获取页面的url链接
- **kwargs: 控制访问的参数,共有13个: params: 字典或字节序列,作为参数增加到url中 data:字典,字节序列或文件对象,作为Request的内容 json: JSON格式的数据,作为Request的内容 headers: 字典, HTTP定制头 cookie: 字典或CooKiJar, Request中的cookie auth: 元祖,支持HTTP认证功能 files: 字典类型,传输文件 timeout: 设定超时时间,秒为单位 proxies: 字典类型,设定访问代理服务器,可以增加登录认证 allow_redirects: True/False,默认为True,重定向开关 stream: True/False,默认为True,获取内容立即下载开关 verity: True/False默认Ture,认证ssl证书开关 cert: 本地ssl证书路径
模拟get请求
import requests
r = requests.get('http://www.baidu.com')
print('响应码',r.status_code) #返回接口响应码
print('响应信息',r.text) #返回html
输出
响应码 200
响应信息 <!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always........................>
import requests
data = {'name': 'xiaoming', 'age': '22'}
r = requests.get("http://httpbin.org/get", params=data)
print(r.json())
模拟post请求
#随机获取图片地址
#请求方式:POST
#请求地址:https://api.apiopen.top/getImages
data= {'page':'1','count':'2'}
r = requests.post('https://api.apiopen.top/getImages',data=data)
print('响应码',r.status_code)
print('响应信息',r.text)
输出
响应码 200
响应信息 {"code":200,"message":"成功!","result":[{"id":674,"time":"2020-02-16 04:00:00","img":"https://img.lijinshan.site/images/70def23833844b0fa0e6e74041421e37"},{"id":675,"time":"2020-02-16 04:00:00","img":"https://img.lijinshan.site/images/999cf7f9728b45deacc0740de53aaff1"}]}
http请求的基本属性
print('请求url',r.request.url)
print('请求参数',r.request.body)
print('请求header',r.request.headers)
http响应的基本属性
print(r.content)#获取bytes类型的响应
print('响应码',r.status_code)
print('响应信息',r.text) #响应信息,文本,字符串
print('响应信息字典',r.json())#响应信息,json
print('响应信息字典值',r.json()['xxx'])
print('响应cookies',r.cookies)
print('响应headers',r.headers)
常见请求操作
添加headers
服务器反爬虫机制会判断客户端请求头中的User-Agent是否来源于真实浏览器,可以指定UA伪装成浏览器发起请求
import requests
data = {'name': 'xiaoming', 'age': '22'}
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'
}
response = requests.post("http://httpbin.org/post", data=data, headers=headers)
print(response.json())
文件上传:
import requests
files = {'file': open('test.txt', 'rb')}
response = requests.post("http://httpbin.org/post", files=files)
print(response.text)
设置超时
当发起一个请求遇到服务器响应非常缓慢时,可以指定 timeout 来设置请求超时时间,单位是秒,超过该时间还没有连接服务器成功时,请求将强行终止。
r = requests.get('http://www.baidu.com', timeout=5)
设置代理
通过同一时间请求太多会被服务器判定为爬虫,所以很多时候我们使用代理IP来伪装客户端的真实IP,代理服务器就是用来转发请求和响应。可以让代理服务器转发请求从而更换请求的原始ip地址。
import requests
proxies = {
'http': 'http://127.0.0.1:1080',
'https': 'http://127.0.0.1:1080',
}
r = requests.get('http://www.kuaidaili.com/free/', proxies=proxies, timeout=2)
处理cookie的三种方式
一般登录后,需要保持会话状态,需要每次都指定 cookies,有如下三种处理方式:
-
cookie放到headers中
将cookie封装到headers字典中,将该字典作用到get/post方法的headers参数中
import requests
url= ‘http://httpbin.org/post'
headers = {
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
"Cookie":"XXXXX"}
}
requests.get(url,headers=headers)
-
cookie字典传给cookies参数
res=requests.get(url,headers=headers,cookies=cookies)
-
使用session对象
在使用session进行请求发送的过程中,如果产生了cookie,则cookie会被自动存储到session对象中,后续直接使用该对象进行请求即可。
import requests
session = requests.session()
response = session.get(url)
更多requests库的用法,大家可以学习下官方文档:
http://docs.python-requests.org/zh_CN/latest/index.html
- 页面结构化在 Android 上的尝试
- iOS 11: CORE ML—浅析
- 高性能网络编程7--tcp连接的内存使用
- Android 平台 Native 代码的崩溃捕获机制及实现
- go语言变参,匿名函数的多种用法
- 问题帖子--Concurrent Read/Write Map
- Android 混淆那些事儿
- H5 直播避坑指南
- H5 和移动端 WebView 缓存机制解析与实战
- 根据IE版本加载不同CSS样式的方法小结,解决低版本IE兼容问题
- Linux下用dd命令测试硬盘的读写速度
- 教你 Debug 的正确姿势——记一次 CoreMotion 的 Crash
- Linux系统yum命令安装软件时保留(下载)rpm包
- Go语言读写数据库
- 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 数组属性和方法
- PHP面向对象程序设计之多态性的应用示例
- PHP设计模式之单例模式定义与用法分析
- PHP面向对象程序设计之接口的继承定义与用法详解
- PHP简单验证码功能机制实例详解
- php高清晰度无损图片压缩功能的实现代码
- Python自省及反射原理实例详解
- 浅谈django框架集成swagger以及自定义参数问题
- keras CNN卷积核可视化,热度图教程
- 解决tensorflow读取本地MNITS_data失败的原因
- 浅谈keras中Dropout在预测过程中是否仍要起作用
- 浅谈keras中loss与val_loss的关系
- python中tkinter窗口位置坐标大小等实现示例
- python os模块在系统管理中的应用
- Laravel路由研究之domain解决多域名问题的方法示例
- python GUI模拟实现计算器