吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1515|回复: 15
收起左侧

[求助] 如何按照目录结构下载、保存文件

[复制链接]
wszjf 发表于 2023-2-20 11:07
本帖最后由 wszjf 于 2023-2-28 15:56 编辑

最近想从网站下载一批资源,网站上的资源是按正常的文件夹目录结构存放的,已知所有文件的下载地址,http://开头,文件和文件夹都有重名,现在使用软件或浏览器下载,只能保存到指定的一个目录,没法按原目录结构重建。
求助问题:使用代码或调用工具按照原目录结构批量下载、保存文件。
下载地址中包含目录结构信息,
形如:
http://www.abc.com/123/123.txt
http://www.abc.com/123/123/123.txt
http://www.abc.com/123/456/123.txt
……
文件很多,目录结构很复杂。


感谢各位网友的回复和指导,依据网友的代码,经过一段时间的研究,暂未成功,先行放弃,以后有时间再研究,对耐心回复的各位网友再次表示感谢

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
也一样约约越 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ctacy 发表于 2023-2-20 11:42
您可以使用Python编写一个脚本来实现按照原目录结构批量下载、保存文件。

以下是一个示例代码,您可以根据自己的需要进行修改:

[Python] 纯文本查看 复制代码
import os

import requests



# 下载文件

def download_file(url, path):

    r = requests.get(url)

    with open(path, 'wb') as f:

        f.write(r.content)



# 下载文件夹中的所有文件

def download_folder(url, folder):

    response = requests.get(url)

    if not os.path.exists(folder):

        os.makedirs(folder)

    for line in response.iter_lines():

        line = line.decode('utf-8')

        if line.startswith('<a href="'):

            # 获取文件名或文件夹名

            name = line.split('"')[1]

            if name.endswith('/'):

                # 下载子文件夹

                download_folder(url + name, os.path.join(folder, name[:-1]))

            else:

                # 下载文件

                download_file(url + name, os.path.join(folder, name))



# 主函数

if __name__ == '__main__':

    url = 'http://www.abc.com/'

    download_folder(url, 'download')



这个脚本会从根目录开始递归下载所有文件和文件夹,保存到指定的本地文件夹中。您需要将url和download_folder的参数改为实际的网站地址和本地文件夹路径,然后在终端中执行该脚本即可。

免费评分

参与人数 1热心值 +1 收起 理由
wszjf + 1 热心回复!

查看全部评分

虚幻魔王 发表于 2023-2-20 12:17
apples1949 发表于 2023-2-20 12:19
lies2014 发表于 2023-2-20 12:21
用网站镜像、离线浏览软件拖回来,以前用过teleport,现在好久不干这种事了,也不知有什么同类型软件更好用
a2523188267 发表于 2023-2-20 12:33
我也只做过离线本地下载原镜象浏览。 但好像只能针对html网页,对别的类型或附件不知行不行?楼主可否发个示例地址呢我试一下看是否可行。
 楼主| wszjf 发表于 2023-2-20 13:18
ctacy 发表于 2023-2-20 11:42
您可以使用Python编写一个脚本来实现按照原目录结构批量下载、保存文件。

以下是一个示例代码,您可以根 ...

您好,测试了您的代码,可能是因为服务器限制的原因(可能是,我也说不准),下载不到文件(可能是读不到文件列表),可以通过导入.txt下载地址列表的方法下载吗?
 楼主| wszjf 发表于 2023-2-20 13:20

您说的是“站点抓取”吗?试过,找不到文件
Lohraki 发表于 2023-2-20 13:57
您可以使用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对链接进行编码。

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
wszjf + 2 + 1 热心回复!

查看全部评分

Lohraki 发表于 2023-2-20 13:58
也可以使用类似wget、curl等工具来实现下载。例如,在Linux命令行中,可以使用下面的命令来下载整个目录:
[Shell] 纯文本查看 复制代码
wget -r -np -nH --cut-dirs=1 -R index.html* http://www.abc.com/123/ -P /path/to/save/dir/


其中,-r表示递归下载;-np表示不访问父级目录;-nH表示不保留主机名;--cut-dirs=1表示去掉URL中的第一级目录;-R index.html*表示不下载HTML文件;-P表示指定保存路径。注意,在Windows系统中,可能需要将/替换为\。



免费评分

参与人数 1吾爱币 +3 热心值 +1 收起 理由
wszjf + 3 + 1 热心回复!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 02:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表