如何用脚本获取壁纸网站图

wen 实用脚本 1

本文目录导读:

如何用脚本获取壁纸网站图

  1. Python + requests/BeautifulSoup 方案
  2. Bash 脚本方案(使用 curl/wget)
  3. Node.js 方案
  4. 简易 Python 版本(适合快速使用)
  5. 使用说明

Python + requests/BeautifulSoup 方案

import requests
from bs4 import BeautifulSoup
import os
import random
import time
def download_wallpaper(url, save_path='wallpapers'):
    """
    从壁纸网站下载图片
    """
    # 创建保存目录
    if not os.path.exists(save_path):
        os.makedirs(save_path)
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        'Referer': 'https://wallhaven.cc'
    }
    try:
        # 发送请求
        response = requests.get(url, headers=headers, timeout=10)
        response.raise_for_status()
        # 确保保存的文件路径
        filename = f"{int(time.time())}_{random.randint(1000,9999)}.jpg"
        filepath = os.path.join(save_path, filename)
        # 保存图片
        with open(filepath, 'wb') as f:
            f.write(response.content)
        print(f"✓ 下载成功: {filename}")
        return filepath
    except Exception as e:
        print(f"✗ 下载失败: {e}")
        return None
def scrape_wallhaven(keyword='nature', pages=3):
    """
    从Wallhaven搜索并下载壁纸
    """
    base_url = f"https://wallhaven.cc/search?q={keyword}&categories=111&purity=100&sorting=random&order=desc"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
    }
    for page in range(1, pages+1):
        url = f"{base_url}&page={page}"
        print(f"正在获取第 {page} 页...")
        response = requests.get(url, headers=headers)
        soup = BeautifulSoup(response.text, 'html.parser')
        # 找所有壁纸链接
        img_links = soup.select('a.preview')
        for link in img_links:
            if 'href' in link.attrs:
                detail_url = link['href']
                # 获取实际图片URL
                img_response = requests.get(detail_url, headers=headers)
                img_soup = BeautifulSoup(img_response.text, 'html.parser')
                img_tag = img_soup.select_one('img#wallpaper')
                if img_tag and 'src' in img_tag.attrs:
                    download_wallpaper(img_tag['src'])
                    time.sleep(1)  # 避免请求过快
# 使用示例
# scrape_wallhaven(keyword='mountain', pages=2)

Bash 脚本方案(使用 curl/wget)

#!/bin/bash
# 壁纸下载脚本
SAVE_DIR="./wallpapers"
mkdir -p "$SAVE_DIR"
download_from_unsplash() {
    # Unsplash 随机壁纸
    echo "正在从 Unsplash 下载..."
    for i in {1..5}; do
        curl -L "https://source.unsplash.com/1920x1080/?nature,landscape" \
             -o "$SAVE_DIR/wallpaper_$i.jpg" \
             -H "Accept: image/jpeg" \
             -s
        echo "✓ 下载壁纸 $i"
        sleep 2
    done
}
download_from_picsum() {
    # Lorem Picsum 随机图片
    echo "正在从 Lorem Picsum 下载..."
    for i in {1..3}; do
        curl -L "https://picsum.photos/1920/1080?random=$i" \
             -o "$SAVE_DIR/picsum_$i.jpg" \
             -s
        echo "✓ 下载图片 $i"
        sleep 1
    done
}
download_from_wallpapercave() {
    # WallpaperCave 特定类别
    echo "正在从 WallpaperCave 下载..."
    PAGE=$(curl -s "https://wallpapercave.com/nature-wallpapers" | \
           grep -oP 'href="[^"]*\.jpg"' -m 10 | cut -d'"' -f2)
    i=1
    for img_url in $PAGE; do
        # 补全URL
        full_url="https://wallpapercave.com$img_url"
        curl -L "$full_url" -o "$SAVE_DIR/wallpapercave_$i.jpg" -s
        echo "✓ 下载壁纸 $i"
        ((i++))
        sleep 1
    done
}
# 主函数
echo "=== 开始下载壁纸 ==="
case "$1" in
    "unsplash")
        download_from_unsplash
        ;;
    "picsum")
        download_from_picsum
        ;;
    "cave")
        download_from_wallpapercave
        ;;
    *)
        echo "用法: $0 {unsplash|picsum|cave}"
        exit 1
        ;;
esac
echo "=== 壁纸下载完成,保存在 $SAVE_DIR ==="

Node.js 方案

const axios = require('axios');
const fs = require('fs');
const path = require('path');
const cheerio = require('cheerio');
async function downloadWallpapers(keyword = 'landscape', count = 5) {
    const headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
    };
    const saveDir = './wallpapers';
    if (!fs.existsSync(saveDir)) {
        fs.mkdirSync(saveDir, { recursive: true });
    }
    try {
        // 从 Wallhaven 获取
        const response = await axios.get(
            `https://wallhaven.cc/search?q=${keyword}&sorting=random&order=desc`,
            { headers }
        );
        const $ = cheerio.load(response.data);
        const links = [];
        $('a.preview').each((i, elem) => {
            if (i < count) {
                links.push($(elem).attr('href'));
            }
        });
        // 下载每个链接的高清图片
        for (const link of links) {
            const detailResponse = await axios.get(link, { headers });
            const detailPage = cheerio.load(detailResponse.data);
            const imgUrl = detailPage('img#wallpaper').attr('src');
            if (imgUrl) {
                const imgResponse = await axios.get(imgUrl, { 
                    headers, 
                    responseType: 'stream' 
                });
                const filename = `${keyword}_${Date.now()}_${Math.random().toString(36).slice(2)}.jpg`;
                const filepath = path.join(saveDir, filename);
                const writer = fs.createWriteStream(filepath);
                imgResponse.data.pipe(writer);
                await new Promise((resolve, reject) => {
                    writer.on('finish', resolve);
                    writer.on('error', reject);
                });
                console.log(`✓ 下载完成: ${filename}`);
                await sleep(1000);
            }
        }
    } catch (error) {
        console.error('下载失败:', error);
    }
}
function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}
// 使用示例
downloadWallpapers('nature', 10);

简易 Python 版本(适合快速使用)

import requests
import os
import urllib.parse
def quick_download(count=5):
    """快速下载随机壁纸"""
    save_dir = "quick_wallpapers"
    os.makedirs(save_dir, exist_ok=True)
    # 使用 Lorem Picsum(无需解析HTML)
    for i in range(count):
        url = f"https://picsum.photos/1920/1080?random={i}"
        response = requests.get(url)
        filename = f"wallpaper_{i+1}.jpg"
        with open(os.path.join(save_dir, filename), 'wb') as f:
            f.write(response.content)
        print(f"✓ 下载: {filename}")
# 运行
quick_download(10)

使用说明

  1. 安装依赖

    • Python: pip install requests beautifulsoup4
    • Node.js: npm install axios cheerio
  2. 常见壁纸网站

    • WallHaven: https://wallhaven.cc
    • Unsplash: https://unsplash.com
    • Pexels: https://www.pexels.com
    • Bing壁纸: https://cn.bing.com/images/trending
  3. 注意事项

    • 遵守网站robots.txt规则
    • 控制请求频率,避免被封IP
    • 尊重版权,仅用于个人使用

需要我帮你定制特定网站或特定需求的爬虫脚本吗?

抱歉,评论功能暂时关闭!