脚本如何批量下载网络资源

wen 实用脚本 1

本文目录导读:

脚本如何批量下载网络资源

  1. wget(Linux/Mac/Windows)
  2. Python脚本(通用方案)
  3. curl(Linux/Mac)
  4. aria2(高速下载)
  5. 针对特定网站的工具
  6. 批量下载技巧

我来介绍几种批量下载网络资源的方法,根据不同的场景选择适合的工具:

wget(Linux/Mac/Windows)

最经典的下载工具,适合批量下载:

# 从文件列表下载
wget -i urls.txt
# 递归下载整个网站
wget -r -l 2 -np http://example.com/files/
# 限速下载,避免被封
wget --limit-rate=200k -i urls.txt

Python脚本(通用方案)

基本批量下载

import requests
from pathlib import Path
import time
def batch_download(urls, save_dir="downloads"):
    save_path = Path(save_dir)
    save_path.mkdir(exist_ok=True)
    for idx, url in enumerate(urls, 1):
        try:
            response = requests.get(url, timeout=30)
            filename = url.split("/")[-1] or f"file_{idx}"
            filepath = save_path / filename
            with open(filepath, 'wb') as f:
                f.write(response.content)
            print(f"✓ 已下载: {filename}")
            time.sleep(1)  # 避免请求过快
        except Exception as e:
            print(f"✗ 下载失败 {url}: {e}")
# 使用示例
urls = [
    "https://example.com/file1.pdf",
    "https://example.com/file2.jpg",
    # ...
]
batch_download(urls)

带进度条和重试

import requests
from tqdm import tqdm
from concurrent.futures import ThreadPoolExecutor
def download_file(url, save_path, retries=3):
    for attempt in range(retries):
        try:
            response = requests.get(url, stream=True, timeout=30)
            total_size = int(response.headers.get('content-length', 0))
            with open(save_path, 'wb') as f, tqdm(
                desc=save_path.name,
                total=total_size,
                unit='B',
                unit_scale=True
            ) as pbar:
                for chunk in response.iter_content(chunk_size=8192):
                    f.write(chunk)
                    pbar.update(len(chunk))
            return True
        except:
            if attempt == retries - 1:
                return False
# 多线程批量下载
def batch_download_multi(urls, max_workers=5):
    with ThreadPoolExecutor(max_workers=max_workers) as executor:
        futures = []
        for url in urls:
            filename = url.split("/")[-1]
            save_path = Path("downloads") / filename
            future = executor.submit(download_file, url, save_path)
            futures.append(future)

curl(Linux/Mac)

适合需要处理cookie和认证的场景:

# 从文件列表下载
xargs -n 1 curl -O < urls.txt
# 带cookie下载
curl -b cookies.txt -O "http://example.com/file[1-10].pdf"
# 断点续传
curl -C - -O "http://example.com/large_file.zip"

aria2(高速下载)

Windows/Linux/Mac都支持,支持多线程:

# 从文件列表下载
aria2c -i urls.txt
# 多线程下载单个文件
aria2c -x 16 -s 16 "http://example.com/large_file.zip"
# 带参数批量下载
aria2c --max-concurrent-downloads=5 --max-connection-per-server=16 -i urls.txt

针对特定网站的工具

下载图片

import requests
from bs4 import BeautifulSoup
import re
def scrape_images(url, save_dir="images"):
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    # 查找所有图片链接
    img_tags = soup.find_all('img')
    urls = []
    for img in img_tags:
        src = img.get('src')
        if src and src.endswith(('.jpg', '.png', '.gif')):
            if not src.startswith('http'):
                src = url + src
            urls.append(src)
    batch_download(urls, save_dir)

下载YouTube视频

# 使用youtube-dl
youtube-dl --batch-file video_urls.txt
youtube-dl -f best -o "%(title)s.%(ext)s" https://www.youtube.com/watch?v=...
# 或使用yt-dlp(更活跃)
yt-dlp -f "bestvideo+bestaudio" --merge-output-format mp4 "https://..."

批量下载技巧

生成URL列表

# 按规律生成URL
base_url = "http://example.com/files/"
download_urls = [f"{base_url}file_{i:03d}.pdf" for i in range(1, 101)]

处理需要登录的资源

session = requests.Session()
session.post("https://example.com/login", 
             data={"username": "user", "password": "pass"})
# 使用session下载
for url in urls:
    response = session.get(url)
    # 处理文件...

下载管理类脚本

创建 downloader.py 文件,包含完整功能:

  • 进度显示
  • 错误重试
  • 断点续传
  • 并发控制
  • 日志记录

选择建议:

  • 简单场景:wgetaria2
  • 需要定制:Python + requests
  • 视频为主:youtube-dl 或 yt-dlp
  • 高速下载:aria2(支持多线程)

⚠️ 注意:下载资源时请遵守版权法规,只在授权范围内下载。

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