您可以使用Python的requests和os库,以及递归函数的方法来实现按原目录结构批量下载、保存文件
[Python] 纯文本查看 复制代码 import os
import requests
def download_file(url, save_path):
response = requests.get(url)
with open(save_path, "wb") as f:
f.write(response.content)
def download_dir(url, save_dir):
os.makedirs(save_dir, exist_ok=True)
response = requests.get(url)
if response.status_code != 200:
return
if "Content-Disposition" in response.headers:
# 文件直接下载
filename = response.headers["Content-Disposition"].split("filename=")[-1]
save_path = os.path.join(save_dir, filename)
download_file(url, save_path)
else:
# 目录递归下载
content = response.content.decode("utf-8")
lines = content.splitlines()
for line in lines:
if line.startswith("<a href="):
suburl = line.split('"')[1]
if suburl.startswith("/"):
suburl = url + suburl[1:]
sub_save_dir = os.path.join(save_dir, suburl.split("/")[-2])
download_dir(suburl, sub_save_dir)
url = "http://www.abc.com/123/"
save_dir = "/path/to/save/dir/"
download_dir(url, save_dir)
上述代码中的download_file函数用于下载文件,download_dir函数用于下载目录。当遇到文件时,调用download_file函数保存文件到指定目录;当遇到目录时,递归调用download_dir函数创建子目录并下载其中的文件。在下载目录时,我们可以先获取目录的HTML内容,然后从中解析出子链接并递归下载。注意,如果目录中有空格等特殊字符,需要使用urllib.parse.quote对链接进行编码。 |