根据本地 txt 文件内的链接批量下载数据
读取 txt 里的一行行链接,用 Python requests 加多线程批量下载文件,自动解析页面中的真实地址并按链接命名保存。
前言
填写网站Cookies,指定文件目录save_directory,指定最大线程数max_threads,指定下载链接文件input_file,运行即可。
代码
import os
import requests
from bs4 import BeautifulSoup
import threading
from urllib.parse import urljoin
# 定义请求头部信息
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0',
'Referer': 'https://mineleak.pro/',
'Cookie': '******' # 替换为你的 Cookie
}
# 指定文件保存目录
save_directory = r'S:\Users\26370\Desktop\Down'
# 控制同时下载的线程数量
max_threads = 3
# 创建文件夹(如果不存在)
os.makedirs(save_directory, exist_ok=True)
def download_file(download_url):
try:
# 发送GET请求下载文件
response = requests.get(download_url, headers=headers, timeout=60)
if response.status_code == 200:
# 解析文件名
content_disposition = response.headers.get('Content-Disposition')
if content_disposition:
filename = content_disposition.split('filename=')[1].strip('"')
else:
filename = os.path.basename(urljoin(download_url, '/'))
# 构建完整的文件保存路径
file_path = os.path.join(save_directory, filename)
# 检查文件是否已经存在,如果存在则跳过下载
if os.path.exists(file_path):
print(f"文件 '{filename}' 已存在,跳过下载。")
return
# 保存文件到指定路径
with open(file_path, 'wb') as f:
f.write(response.content)
print(f"文件 '{filename}' 下载完成,保存至 '{file_path}'")
else:
print(f"下载失败,HTTP响应码:{response.status_code}")
except Exception as e:
print(f"下载失败:{str(e)}")
# 从文本文件中读取链接
input_file = 'download_links copy.txt' # 替换为包含链接的文本文件路径
download_links = []
with open(input_file, 'r', encoding='utf-8') as f:
for line in f:
# 添加有效的下载链接到列表
if '/resources/' in line:
download_url = line.strip() + '/download' # 添加/download后缀
download_links.append(download_url)
# 多线程下载文件
threads = []
for download_url in download_links:
# 创建线程并启动下载任务
thread = threading.Thread(target=download_file, args=(download_url,))
threads.append(thread)
thread.start()
# 控制同时运行的线程数量
if len(threads) >= max_threads:
for t in threads:
t.join()
threads = []
# 等待所有线程完成
for t in threads:
t.join()
print("所有文件下载完成。")
评论