看到大佬的api都有json返回参数 我也给我的随机图加上了 这样就可以被脚本批量下载 感觉挺好玩就让gpt写了一个 测试了确实很好用 目前还在学习中 所以每个把玩的脚本都准备记录到学习笔记中 不要去爬未经允许的站哦 但是本站允许学习期间爬 反正都被cf缓存了 此脚本默认也没有刷cdn的功能 所以放心使用
以下是一个Python脚本,可以一直刷新API以获取不同的图片URL,并下载保存这些图片,同时避免下载到重复的图片。
import requests
import os
import hashlib
import time
# API地址
# 示例: api_url = "https://img.darklotus.cn/random?json"
api_url = "你的API地址"
# 下载保存路径
# 示例: download_path = "random"
download_path = "下载文件夹路径"
# 已下载图片的哈希值集合
downloaded_hashes = set()
# 创建下载文件夹
if not os.path.exists(download_path):
os.makedirs(download_path)
def get_image_hash(image_content):
"""计算图片的SHA256哈希值"""
return hashlib.sha256(image_content).hexdigest()
def download_image(image_url, image_name):
"""下载并保存图片"""
response = requests.get(image_url)
if response.status_code == 200:
image_content = response.content
image_hash = get_image_hash(image_content)
if image_hash not in downloaded_hashes:
# 保存图片
with open(os.path.join(download_path, image_name), 'wb') as f:
f.write(image_content)
# 记录已下载的图片
downloaded_hashes.add(image_hash)
print(f"下载并保存图片: {image_name}")
else:
print(f"图片已下载,跳过: {image_name}")
else:
print(f"无法下载图片,HTTP状态码: {response.status_code}")
while True:
try:
# 请求API
response = requests.get(api_url)
if response.status_code == 200:
data = response.json()
if data["code"] == 200:
image_url = data["url"]
image_name = os.path.basename(image_url)
# 下载图片
download_image(image_url, image_name)
else:
print(f"API返回错误代码: {data['code']}")
else:
print(f"API请求失败,HTTP状态码: {response.status_code}")
# 等待一段时间后再刷新
time.sleep(5) # 5秒刷新一次,可以根据需要调整
except Exception as e:
print(f"发生错误: {str(e)}")
time.sleep(10) # 发生错误后等待10秒再尝试
说明:
api_url
: 请替换为你的API地址,比如https://img.darklotus.cn/random?json
。(可以拿自己站做测试)download_path
: 替换为你希望下载的图片保存的文件夹路径。- 图片去重逻辑: 脚本会计算每张图片的SHA256哈希值并保存到
downloaded_hashes
集合中,以此来检查图片是否已经下载过。如果已经下载过,脚本会跳过该图片。 - 刷新频率: 脚本默认每5秒刷新一次API(可以根据需要调整
time.sleep(5)
的值)。
如何运行这个脚本:
- 将脚本保存为
.py
文件,比如download_images.py
。 - 运行脚本:
python3 download_images.py
。
运行后,脚本会不断地从API获取新的图片并下载,同时避免重复下载已经保存的图片。