Python爬虫实战:下载随机壁纸 

Python爬虫实战:下载随机壁纸 

前言

通过上篇文章《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
喜欢就支持一下吧
点赞16 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容