前言
-requests是一个很实用的Python HTTP客户端库,使用起来比urllib简洁很多,可用于网络请求和网络爬虫等。
- 在使用前我们需要导入《 pip install requests 》 库,安装完成后,我们就可以正常使用了
一、GET请求
1.最基本的GET请求
import requests
request = requests.get('http://httpbin.org/get')
print(request.text) # 返回响应的内容,unicode 类型数据
2.GET带参数请求
- 第一种直接将参数放在url内
import requests
request = requests.get('http://httpbin.org/get?name=w&age=25')
print(request.text)
- 第二种参数填写在dict中,发起请求时params参数指定为dict
import requests
data = {
'name': 'w',
'age': '25'
}
request = requests.get('http://httpbin.org/get?', params=data)
print(request.text)
二、POST请求
1.最基本的POST请求
import requests
url = 'http://httpbin.org/'
# 字典类型参数
request = requests.post(url, data=data)
# json类型参数
request = requests.post(url, json=data)
2.POST带参数请求
- 字典类型参数
import requests
url = 'http://httpbin.org/post'
data = {
'key1': 'value1',
'key2': 'value2'
}
request = requests.post(url, data=data)
print(request.text)
- json类型参数
import requests
url = 'http://httpbin.org/post'
data = {
'key1': 'value1',
'key2': 'value2'
}
request = requests.post(url, json=data)
print(request.text)
三、其他请求方式
import requests
# 发送 DELETE 请求到指定 url
request = requests.delete('http://httpbin.org/delete')
# 发送 PATCH 请求到指定 url
request_1 = requests.patch('http://httpbin.org/patch')
# 发送 PUT 请求到指定 url
request_2 = requests.put('http://httpbin.org/put')
print(request.text)
print(request_1.text)
print(request_2.text)
四、添加headers
- 有时候不加headers发起请求时,服务器会直接拒绝或服务器错误等,这个时候我们加上headers就可以了(get和post加入headers方法一样)
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"
}
request = requests.get('http://httpbin.org/get', headers=headers)
print(request.text)
五、response属性
import requests
response = requests.get('http://httpbin.org/get')
print(response.status_code) # 返回 http 的状态码
print(response.url) # 返回响应的 URL
print(response.headers) # 返回响应头,字典格式
print(response.cookies) # 返回一个 CookieJar 对象,包含了从服务器发回的 cookie
print(response.text) # 返回响应的内容,unicode 类型数据
六、解析json
import requests
import json
request = requests.get('http://httpbin.org/get')
# 方法一
# 返回结果的 JSON 对象 (结果需要以 JSON 格式编写的,否则会引发错误)
print(request.json())
print(type(request.json()))
# 方法二
# json.loads()和request.json()是一个意思,都是打印出一个字典数据
data = json.loads(request.text)
print(data)
print(type(data))
七、获取二进制数据
1、下载
- 一般用来下载图片、视频和音频等
import requests
request = requests.get("http://httpbin.org/image/png") # 将要下载的图片链接放这
print(type(request.text), type(request.content)) # 类型分别是str和bytes
print(request.text)
print(request.content) # 获取二进制数据的方法
- 获取到文件后,我们应该如何保存了,我们可以使用下面的方法
import requests
import os
def File_plus():
'''
文件储存位置
判断文件是否存在,不存在则创建
'''
folder_path = "C:/Users/admin/Desktop/download/"
if not os.path.exists(folder_path):
os.makedirs(folder_path)
return folder_path
def run():
file_name = File_plus()
request = requests.get('http://httpbin.org/image/png')
# 方法一 ,此方法是将数据一次性写入内存,如果文件较大,会导致内存"卡死"
with open(f"{
file_name}1.png", "wb") as f:
f.write(request.content)
# 方法二,此方法是将文件分块写入,每次写入指定大小,建议使用此方法
with open(f"{
file_name}2.png", "wb") as f:
# chunk是指定每次写入的大小,单位字节
for chunk in request.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
if __name__ == "__main__":
run()
2、显示进度条
- 安装 pip install tqdm
- tqdm方法
# 例子一
from tqdm import tqdm
import time
for i in tqdm(range(50)):
time.sleep(0.1)
# 例子二,带参数
d = {
'info': 100}
# desc设置名称,ncols设置进度条长度.postfix以字典形式传入详细信息
for i in tqdm(range(50), desc='下载中', ncols=90, postfix=d):
time.sleep(0.1)
- 下载显示进度条
from tqdm import tqdm
import requests
import os
def File_plus():
'''
文件储存位置
判断文件是否存在,不存在则创建
'''
folder_path = "C:/Users/admin/Desktop/download/"
if not os.path.exists(folder_path):
os.makedirs(folder_path)
return folder_path
def run():
image_data = requests.get('http://httpbin.org/image/png')
# 获取图片大小,单位B
if "content-length" in image_data.headers:
content_size = int(image_data.headers["content-length"])
# 图片名称
image_name = "1.png"
# 存储图片,每次写入1M
with open(f"{
File_plus()}{
image_name}", "wb") as f, tqdm(
desc=image_name,
total=content_size
) as bar:
# chunk是指定每次写入的大小,单位字节
for chunk in image_data.iter_content(chunk_size=1024*1024):
if chunk:
f.write(chunk)
# 加上进度条
bar.update(len(chunk))
if __name__ == "__main__":
run()
八、上传文件
import requests
files = {
"file": open("C:/Users/admin/Desktop/download/1.png", 'rb')}
request = requests.post("http://httpbin.org/post", files=files) # 需要用post方法
print(request .text)
九、超时设置
import requests
try:
request = requests.get("http://httpbin.org", timeout=1) # 超过1秒就算超时
print(request .status_code)
except Exception as f:
print(f"请求超时:{
f}")
十、认证设置
- 有些网址需要用户名密码登录后才可以看到内容,方法如下:
import requests
request = requests.get("http://xxxxxx.com", auth=('user', 'possword'))
print(request.status_code)