前言
通过上篇文章《Python爬虫实战:下载高清壁纸》获取壁纸后,略作修改,让其可以获取随机API壁纸的方法。
分析一
随机API请求会重定向到实际的图片URL,我们需要修改脚本以处理这种情况。Python的requests
库默认会处理重定向,所以我们不需要手动解析重定向后的URL。但是,我们需要确保脚本能够正确地从重定向后的响应中获取图片内容。
response = requests.get(api_url, allow_redirects=True)
response.raise_for_status() # 确保请求成功
# 返回重定向后的URL,即图片的URL
return response.url
分析二
我需要将下载的图片放到API分类的文件下,并使用时间戳来确保每个文件名都是唯一的。
# 获取当前时间的微秒部分,用于生成唯一的文件名
timestamp = int((time.time() - int(time.time())) * 1e6)
# 构造唯一的文件名
filename = f"wallpaper_{timestamp}.{extension}"
return os.path.join(save_dir, filename)
完整代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import re
import os
import time
def get_wallpaper_url(api_url):
# 发送HTTP请求,允许重定向
response = requests.get(api_url, allow_redirects=True)
response.raise_for_status() # 确保请求成功
# 返回重定向后的URL,即图片的URL
return response.url
def generate_unique_filename(save_dir, extension='webp'):
# 获取当前时间的微秒部分,用于生成唯一的文件名
timestamp = int((time.time() - int(time.time())) * 1e6)
# 构造唯一的文件名
filename = f"wallpaper_{timestamp}.{extension}"
return os.path.join(save_dir, filename)
def download_wallpapers(api_url, save_dir):
# 从API URL中提取文件夹名称
match = re.search(r'自适应图片系列=(\w+)', api_url)
if match:
folder_name = match.group(1)
else:
print("Error: Unable to extract folder name from API URL.")
return
# 创建保存目录
save_dir = os.path.join(save_dir, folder_name)
if not os.path.exists(save_dir):
os.makedirs(save_dir)
# 构造唯一的文件名
filename = generate_unique_filename(save_dir)
try:
# 从API获取图片URL
img_url = get_wallpaper_url(api_url)
with open(filename, 'wb') as f:
img_data = requests.get(img_url).content
f.write(img_data)
print(f"Downloaded: {filename}")
except Exception as e:
print(f"Error downloading {img_url}: {str(e)}")
if __name__ == '__main__':
api_url = "https://api.r10086.com/樱道随机图片api接口.php?自适应图片系列=龙珠" # 替换为你的API URL
save_directory = "wallpapers" # 保存壁纸的目录
while True:
download_wallpapers(api_url, save_directory)
time.sleep(1) # 每秒请求一次
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容