用API下载图片并保存

声明: 本文中的脚本仅用于学习和研究目的。请务必遵守目标网站的爬取协议(robots.txt)和相关法律法规,切勿将此脚本用于任何违法或不当的用途。非法使用可能会导致法律后果。
在这篇博客中,我们将探讨如何使用Python从API下载图片,并将其保存到本地。我们将使用requests库发送HTTP请求,使用uuid库生成唯一的文件名,并在指定的目录中保存图片。这个教程适用于初学者以及希望通过Python自动化任务的开发者。

所需库

首先,确保安装了requests库。你可以使用以下命令进行安装:

1
pip install requests

代码实现

下面是实现上述功能的完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import requests
import os
import time
import uuid # 用于生成唯一标识符

def save_image_from_api(api_url, save_directory):
try:
# 发送GET请求获取图片数据
response = requests.get(api_url)
if response.status_code == 200:
# 生成唯一文件名
file_extension = os.path.splitext(api_url)[1] # 获取文件扩展名
unique_filename = str(uuid.uuid4()) + file_extension # 使用UUID作为文件名
save_path = os.path.join(save_directory, unique_filename)

# 写入文件
with open(save_path, 'wb') as f:
f.write(response.content)
print(f"图片已保存到 {save_path}")
else:
print(f"请求失败: {response.status_code}")
except Exception as e:
print(f"下载失败: {str(e)}")

def main():
api_url = 'https://www.xx.com/xx/' # 替换成实际的API URL
save_directory = './xx/' # 图片保存目录,需要存在这个目录

# 创建保存目录
os.makedirs(save_directory, exist_ok=True)

try:
# 下载图片
save_image_from_api(api_url, save_directory)
except Exception as e:
print(f"处理失败: {str(e)}")

if __name__ == "__main__":
num_runs = 100 # 设定执行次数
for i in range(num_runs):
print(f"执行第 {i+1} 次下载:")
main()
time.sleep(0.2) # 可以加入延时,避免请求过于频繁

代码讲解

导入所需库

1
2
3
4
import requests
import os
import time
import uuid

我们导入了以下几个库:

  • requests: 用于发送HTTP请求。
  • os: 用于处理文件和目录操作。
  • time: 用于添加延时。
  • uuid: 用于生成唯一文件名。

定义保存图片的函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def save_image_from_api(api_url, save_directory):
try:
# 发送GET请求获取图片数据
response = requests.get(api_url)
if response.status_code == 200:
# 生成唯一文件名
file_extension = os.path.splitext(api_url)[1] # 获取文件扩展名
unique_filename = str(uuid.uuid4()) + file_extension # 使用UUID作为文件名
save_path = os.path.join(save_directory, unique_filename)

# 写入文件
with open(save_path, 'wb') as f:
f.write(response.content)
print(f"图片已保存到 {save_path}")
else:
print(f"请求失败: {response.status_code}")
except Exception as e:
print(f"下载失败: {str(e)}")

在这个函数中,我们首先发送一个GET请求获取图片数据。如果请求成功,我们会生成一个唯一的文件名,并将图片数据保存到指定目录中。

主函数

1
2
3
4
5
6
7
8
9
10
11
12
def main():
api_url = 'https://www.xxx.com/xx/' # 替换成实际的API URL
save_directory = './xx/' # 图片保存目录,需要存在这个目录

# 创建保存目录
os.makedirs(save_directory, exist_ok=True)

try:
# 下载图片
save_image_from_api(api_url, save_directory)
except Exception as e:
print(f"处理失败: {str(e)}")

主函数中,我们定义了API的URL和保存图片的目录,并确保保存目录存在。然后,我们调用save_image_from_api函数来下载图片。

执行多次下载

1
2
3
4
5
6
if __name__ == "__main__":
num_runs = 100 # 设定执行次数
for i in range(num_runs):
print(f"执行第 {i+1} 次下载:")
main()
time.sleep(0.2) # 可以加入延时,避免请求过于频繁

__main__块中,我们设置了下载图片的次数,并通过循环多次调用main函数。同时,使用time.sleep(0.2)添加延时,避免请求过于频繁。

结论

通过以上代码,我们实现了从API下载图片并保存到本地的功能。你可以根据实际需求修改API的URL和保存目录,同时可以调整执行次数和延时,以适应不同的使用场景,有些细节需要注意,下载下来的文件可能没有后缀名或者是别的后缀名,这时需要修改后缀名为.png、.jpg、.jpeg或者webp等图片格式。

希望这个教程对你有所帮助!如果有任何问题或建议,欢迎在评论区留言讨论。