在实际工作中,我们经常需要从网页上下载特定文件。有时这些文件可能分布在不同的目录层次中,我们需要递归地遍历目录结构,直到找到目标文件。以下是一个使用 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: 下载文件的本地目录。

脚本通过递归地遍历目录结构,找到目标文件后进行下载。