用API下载图片并保存
声明: 本文中的脚本仅用于学习和研究目的。请务必遵守目标网站的爬取协议(robots.txt)和相关法律法规,切勿将此脚本用于任何违法或不当的用途。非法使用可能会导致法律后果。
在这篇博客中,我们将探讨如何使用Python从API下载图片,并将其保存到本地。我们将使用requests
库发送HTTP请求,使用uuid
库生成唯一的文件名,并在指定的目录中保存图片。这个教程适用于初学者以及希望通过Python自动化任务的开发者。
所需库
首先,确保安装了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: 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 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/' 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: 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 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/' 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等图片格式。
希望这个教程对你有所帮助!如果有任何问题或建议,欢迎在评论区留言讨论。