前言
-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 create_folder():
'''创建文件夹'''
folder_path = os.path.join(os.path.join(os.path.expanduser("~"), "Desktop"), "picture")
if not os.path.exists(folder_path):
os.makedirs(folder_path)
return folder_path
def download_files():
url = "http://httpbin.org/image/png"
request = requests.get(url)
# 存放路径和文件名称拼接
file_Path = os.path.join(create_folder(), "1.png")
# 方法一 ,此方法是将数据一次性写入内存,如果文件较大,会导致内存"卡死"
with open(file_Path, "wb") as f:
f.write(request.content)
# 方法二,此方法是将文件分块写入,每次写入指定大小,建议使用此方法
with open(file_Path, "wb") as f:
# chunk是指定每次写入的大小,单位字节(B)
for chunk in request.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
if __name__ == "__main__":
download_files()
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 create_folder():
'''
使用 os.path.expanduser("~") 方法获取用户主目录路径
将获取到的用户主目录路径与 "Desktop" 文件夹名称和 "picture" 文件夹名称拼接起来
如果该文件夹不存在,接下来的代码会判断并使用 os.makedirs() 方法递归地创建该文件夹
'''
folder_path = os.path.join(os.path.join(os.path.expanduser("~"), "Desktop"), "picture")
if not os.path.exists(folder_path):
os.makedirs(folder_path)
return folder_path
def download_files():
url = 'http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2'
file_data = requests.get(url)
# 获取文件大小,单位字节(B)
if "content-length" in file_data.headers:
content_size = int(file_data.headers["content-length"])
# 截取文件名称
filename = url.split("/")[-1]
# 存放路径和文件名称拼接
file_Path = os.path.join(create_folder(), filename)
# 表示每个数据块的大小为 128 字节 (B)
chunk_size = 128
progress_bar = tqdm(total=content_size, unit='iB', unit_scale=True,
bar_format='{l_bar}{bar:50}{r_bar}{bar:-10b}')
with open(file_Path, 'wb') as file:
for data in file_data.iter_content(chunk_size):
if data:
progress_bar.update(len(data))
file.write(data)
progress_bar.close()
if __name__ == "__main__":
download_files()
八、上传文件
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)