You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言实现下载网站子目录中含Extract关键词的文件方法

实现方案

目标站点已开启目录索引(你已确认根目录下可见日期格式多级子目录),不需要复杂开发,两种方案可直接落地:

方案1:wget 一行命令搞定(优先推荐)

直接在终端执行对应命令即可,会自动遍历所有日期子目录,定位所有名称含Extract的子目录并下载其全部内容:

wget -r -np -nH --cut-dirs=2 -w 1 -R "index.html*" --accept-regex '.*/[^/]*Extract[^/]*/.*' http://69.64.83.144/~fl/download/

参数说明:

  • -r:开启递归遍历下载
  • -np:禁止向上爬取父目录,不会下载到download目录外的站点内容
  • -nH:不生成以IP命名的根目录文件夹
  • --cut-dirs=2:本地存储时去掉URL前两层路径(对应~fl/download/),不会生成嵌套的无用目录
  • -w 1:每个请求间隔1秒,避免给站点服务器造成过大压力
  • -R "index.html*":下载完成后自动删除wget拉取的目录索引页文件
  • --accept-regex '.*/[^/]*Extract[^/]*/.*':正则匹配规则,只下载路径中存在「名称含Extract的子目录」下的资源,避免误下载其他路径下文件名带Extract的无关文件

正式下载前,可以先在命令里加--spider参数,该模式下wget只会遍历链接打印待下载列表,不会实际写文件,你可以先核对筛选出的路径是否全为目标Extract目录内容,确认无误再去掉--spider执行正式下载。
如果站点拦截默认wget请求,追加参数-U "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"模拟浏览器UA即可。

方案2:Python 自定义脚本(灵活可控,适合特殊场景)

如果wget的正则筛选不符合实际目录结构(比如存在多层嵌套、需要不区分大小写匹配等情况),可以写简单Python脚本自定义逻辑,先安装依赖:
pip install requests beautifulsoup4

脚本内容:

import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin, unquote

ROOT_URL = "http://69.64.83.144/~fl/download/"
SAVE_ROOT = "./download_content"
HEADERS = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}

def download_file(url, save_path):
    os.makedirs(os.path.dirname(save_path), exist_ok=True)
    if os.path.exists(save_path):
        return
    resp = requests.get(url, headers=HEADERS, timeout=30)
    resp.raise_for_status()
    with open(save_path, "wb") as f:
        f.write(resp.content)
    print(f"下载完成: {save_path}")

def crawl_dir(dir_url, local_base, in_extract_dir=False):
    resp = requests.get(dir_url, headers=HEADERS, timeout=30)
    resp.raise_for_status()
    soup = BeautifulSoup(resp.text, "html.parser")
    for link in soup.find_all("a"):
        href = link.get("href")
        if not href or href.startswith("?") or href.startswith("/") or href == "../":
            continue
        full_url = urljoin(dir_url, href)
        rel_path = unquote(href)
        local_path = os.path.join(local_base, rel_path)
        if href.endswith("/"):
            dir_name = rel_path.rstrip("/")
            # 需要不区分大小写匹配的话,把下一行改成 now_in_extract = in_extract_dir or "extract" in dir_name.lower()
            now_in_extract = in_extract_dir or "Extract" in dir_name
            if now_in_extract and not in_extract_dir:
                print(f"找到目标目录: {full_url}")
            crawl_dir(full_url, local_path, now_in_extract)
        else:
            if in_extract_dir:
                download_file(full_url, local_path)

if __name__ == "__main__":
    os.makedirs(SAVE_ROOT, exist_ok=True)
    crawl_dir(ROOT_URL, SAVE_ROOT)

脚本逻辑为从根目录逐层遍历,碰到目录名含Extract的子目录就标记该目录下所有内容为待下载资源,自动保存到本地对应路径,不会下载无关目录内容。

注意事项
  • 第一次运行先小范围测试,确认路径筛选逻辑正确再全量执行,避免下载大量无关文件
  • 不要开过高并发,个人站点带宽有限,1秒/次的请求频率比较合理,避免被站点封IP
  • 如果下载中断,重新运行相同命令/脚本即可,两种方式都会自动跳过已下载完成的文件,支持断点续跑

内容的提问来源于stack exchange,提问作者sd3184

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 00:51:16