在实际工作中,我们经常需要从网页上下载特定文件。有时这些文件可能分布在不同的目录层次中,我们需要递归地遍历目录结构,直到找到目标文件。以下是一个使用 Python 的脚本示例,演示如何递归地遍历网页目录,并下载指定的文件。
1. 准备工作
在运行脚本之前,请确保你已经安装了以下 Python 库:
pip install requests beautifulsoup4
2. Python脚本
import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
def download_file(url, destination_folder, filename):
# 构建完整的文件下载链接
file_url = urljoin(url, filename)
# 检查目标文件夹是否存在,不存在则创建
if not os.path.exists(destination_folder):
os.makedirs(destination_folder)
# 下载文件
response = requests.get(file_url)
with open(os.path.join(destination_folder, filename), 'wb') as file:
file.write(response.content)
def find_and_download_file(url, target_filename, destination_folder):
# 发送 GET 请求获取页面内容
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 找到所有<a>标签
for link in soup.find_all('a'):
href = link.get('href')
if target_filename in href:
# 找到目标文件,下载
print(f"Downloading {target_filename} from {url}")
download_file(url, destination_folder, target_filename)
return # 如果找到目标文件,停止递归
elif link.get('href')[-1] == '/':
# 递归处理子目录
subfolder_url = urljoin(url, link.get('href'))
find_and_download_file(subfolder_url, target_filename, destination_folder)
if __name__ == "__main__":
base_url = "https://mirrors.aliyun.com/ubuntu-ports/pool/main/"
target_file = "gcc.deb"
download_folder = "downloaded_files"
find_and_download_file(base_url, target_file, download_folder)
base_url
: 要遍历的网页目录的根 URL。target_file
: 要查找和下载的目标文件名。download_folder
: 下载文件的本地目录。
脚本通过递归地遍历目录结构,找到目标文件后进行下载。