Python 批量下载文件

前言

前段时间站长在对本站图片(托管在阿里云 OSS)进行迁移(目的是从内地迁移到香港,可以绑定未备案域名),发现 OSS 控制太功能尚少,不支持直接迁移的操作,所以就得全部下载到本地,然后再批量上传。

下载和上传的操作此处不赘述(如有需要请评论或邮箱联系),本文主要讲讲利用 Python 批量下载。

实操

环境准备

Windows 7+ 系统计算机 x1

安装 Python 3+

安装 requests 库

准备链接

本文的操作对象访问速度较快,所以暂不考虑异步等高级下载方式。

首先,你需要准备创建一个文件夹(避免导致原本混乱的桌面或者盘符根目录更混乱),在里面创建一个文本文档,并在里面存储所有需要下载的文件的直链(需要可访问,并且无『无 referer 防盗』,也就是说可以直接通过浏览器打开)。

就像这样:

Snipaste_2023-08-07_15-09-54

你放心,这些链接我不怕被刷,因为已经迁移好并删除了。

现在你访问这张图片里的链接,在返回的信息中大概率只会看到一句人话:The specified bucket does not exist.

编写程序

这里就不细讲了,直接看代码:

import requests

# Set a headers
# It's necessary if you have set anti-stealing-link
headers = {"referer": "https://www.gkcoll.xyz"}

def download(url: str) -> str:
    '''
    Function: Get binary data from income url then write into a file.
    :param url: operation target.
    '''
    filename = url.split("/")[-1]
    r = requests.get(url, headers=headers)
    with open(filename, "wb") as f:
        f.write(r.content)
    return filename

def read_url() -> list:
    '''
    Function: Read urls in the text file which stored urls.
    '''
    with open("links.txt" ,"r") as f:
        content = f.read()
    return content.split("\n").remove("")

def main():
    links = read_url()
    for url in links:
        print("Finish!", download(url), f"[{links.index(url)+1}/{len(links)}]")

if __name__ == "__main__":
    main()

把它保存在刚创建的文件夹里。

运行

links.txt 替换成你存放链接的文件名(包括后缀名),运行它,你大概率会看到以下结果:

Finish! xxxx.png 1/20
Finish! xxxx.png 2/20
Finish! xxxx.pptx 3/20
Finish! xxxx.docx 4/20
Finish! xxxx.txt 5/20

并且,所有的文件都会被保存到该程序所在目录

注意:

此程序并不是完美的,而且没有容错机制,可能导致中途出错而整个程序无法继续运行。

如有需要可以试试在 main 函数中添加 try-except 语句。

END

阅读剩余
THE END