本文目录导读:

我来介绍几种批量下载网络资源的方法,根据不同的场景选择适合的工具:
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 文件,包含完整功能:
- 进度显示
- 错误重试
- 断点续传
- 并发控制
- 日志记录
选择建议:
- 简单场景:
wget或aria2 - 需要定制:Python + requests
- 视频为主:youtube-dl 或 yt-dlp
- 高速下载:aria2(支持多线程)
⚠️ 注意:下载资源时请遵守版权法规,只在授权范围内下载。