Python__requests模块的基本使用
1 - 安装和导入
pip install requests import requests
2 - requsts的请求方法
requests.get('https://www.baidu.com/') # GET请求: 请求获取url位置的资源 requests.post('https://www.baidu.com/') # POST请求: 请求向url位置的资源后附加新的数据 requests.put('https://www.baidu.com/') # PUT请求: 请求向url位置存储一个资源,覆盖该位置的原有资源 requests.delete('https://www.baidu.com/') # DELETE请求: 请求删除url位置存储的资源 requests.head('https://www.baidu.com/') # HEAD请求: 请求获取url位置的资源的头部信息 requests.patch('https://www.baidu.com/') # PATCH请求: 请求局部更新url位置的资源 requests.options('https://www.baidu.com/') # OPTIONS请求: 测试服务器是否真的接受请求数据
requests.request() # 构造一个请求,适用于以下的各种请求方法 requests.request(method,url,**kwargs) # method:请求方式,对应get/put/post等7种 # url:拟获取页面的url链接 # **kwargs:控制访问的参数,共13个
3 - 为url传递参数
(1)get方法传参 url_params = {'key':'value'} r = requests.get('your url',params = url_params) # 相当于your url?key=value
(2)post方法传参 使用data参数接受字典参数,request会自动将字典转换成json的请求体数据
4 - 请求的响应结果
r = requests.get('your url',params = url_params) r.encoding # 获取当前的编码 r.encoding = 'utf-8' # 设置编码 r.apparent.encoding # 从内容中分析出的响应内容编码方式(备选编码方式) r.status_code # 响应状态码 r.raw # 返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read() r.ok # 查看r.ok的布尔值便可以知道是否登陆成功 r.raise_for_status() # 失败请求(非200响应)抛出异常 r.text # 以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码 r.content # 以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩 r.headers # 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None r.json() # Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常
5 - post发送json请求
r = requests.post('https://api.github.com/some/endpoint', data=json.dumps({'some': 'data'})) print(r.json())
6 - 定制头和cookie信息
header = {'user-agent': 'xxxxxxxxxxxxxxx'} cookie = {'key':'value'} r = requests.get/post('url',headers=header,cookies=cookie)
data = {'some': 'data'} headers = {'content-type': 'application/json', 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'} r = requests.post('https://api.github.com/some/endpoint', data=data, headers=headers) print(r.text)
7 - 超时
r = requests.get('url',timeout=1) #设置秒数超时,仅对于连接有效
8 - 会话对象,能够跨请求保持某些参数
s = requests.Session() s.auth = ('auth','passwd') s.headers = {'key':'value'} r = s.get('url') r1 = s.get('url1')
9 - 代理
proxies = {'http':'ip1','https':'ip2' } requests.get('url',proxies=proxies) #设置访问代理 proxies = { "http": "http://10.10.1.10:3128", "https": "http://10.10.1.100:4444", } r = requests.get('http://m.ctrip.com', proxies=proxies) #如果代理需要用户名和密码,则需要这样: proxies = { "http": "http://user:pass@10.10.1.10:3128/", }
10 - 异常处理
import requests URL = 'http://ip.taobao.com/service/getIpInfo.php' # 淘宝IP地址库API try: r = requests.get(URL, params={'ip': '8.8.8.8'}, timeout=1) r.raise_for_status() # 如果响应状态码不是 200,就主动抛出异常 except requests.RequestException as e: print(e) else: result = r.json() print(type(result), result, sep='\n')
11 - 上传文件
import requests url = 'http://127.0.0.1:8080/upload' files = {'file': open('/home/rxf/test.jpg', 'rb')} #files = {'file': ('report.jpg', open('/home/lyb/sjzl.mpg', 'rb'))} #显式的设置文件名 r = requests.post(url, files=files) print(r.text)
#request更加方便的是,可以把字符串当作文件进行上传: import requests url = 'http://127.0.0.1:8080/upload' files = {'file': ('test.txt', b'Hello Requests.')} #必需显式的设置文件名 r = requests.post(url, files=files) print(r.text)
12 - 身份验证
基本身份认证(HTTP Basic Auth) import requests from requests.auth import HTTPBasicAuth r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd', auth=HTTPBasicAuth('user', 'passwd')) # r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd', auth=('user', 'passwd')) # 简写 print(r.json()) ----------------------------------------------------------------------- 另一种非常流行的HTTP身份认证形式是摘要式身份认证,Requests对它的支持也是开箱即可用的: requests.get(URL, auth=HTTPDigestAuth('user', 'pass')
13 - 示例
import requests # '''requests模块抓取网页源码并保存到文件示例''' html = requests.get("http://www.baidu.com") with open('test.txt', 'w', encoding='utf-8') as f: f.write(html.text)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现