admin 管理员组

文章数量: 1184232

迅雷9、10实测可用,老版本迅雷应该也可以用,不推荐迅雷极速版

写在前面

最近在学习python的网络爬虫,想要爬取某个网站上的上百万条链接,批量下载链接所指向的图片、文档、视频等内容。大部分的小文件,比如图片和文档,利用requests模块可以轻松实现,但是对于视频等大文件而言,requests并不是那么可靠,可能会发生下载不完全,乱码等情况,这种时候就需要更加可靠老练的下载器。对于国人而言最方便的应该是迅雷,但是上百万条链接,每个视频有各自的存储路径,一个一个添加完全不可能,这时候就需要用代码来操作迅雷了。

话不多说,直接上代码

from win32com.client import Dispatch
thunder = Dispatch('ThunderAgent.Agent64.1')
thunder.AddTask(url, filename)
thunder.CommitTasks()

其中,第一行是所需的模块,然后是调度迅雷的代理。这里如果是迅雷9或10的用户,直接使用 ThunderAgent.Agent64.1 就行,其他版本可以尝试 ThunderAgent.Agent.1 。

AddTask 就是这次的主角。费尽千辛万苦也没有找到关于这个函数的说明。在另一篇博文里有提到如下用法:

# AddTask("下载地址", "另存为文件名", "保存目录", "任务注释", "引用地址", "开始模式", "只从原始地址下载", "从原始地址下载线程数")

但是经过测试,第三个参数,也就是 “保存目录” 并不能起到作用。如果你在迅雷的设置中勾选了“自动修改为上次使用的目录”,那么不管这个参数是什么,最终都会下载到上次的下载目标路径;而如果你没有勾选,那么最终会下载到指定的迅雷下载目录。

当然,除非你手动修改。

关于别的参数,都是可选参数,对我意义不大,没有尝试。

如果实在是需要将不同的文件下载到特定的目录里,也不是一件难事,只需要用到python的os模块和shutil模块。

首先,在迅雷的设置中将默认的下载目录修改为一个空目录,目的是尽量不要让别的文件影响你的检索。

然后使用os模块定时检索这个目录。定时的功能可以通过新开一个线程,线程里加入一个死循环,每次循环结束等待10分钟(根据个人需要)来实现。如果检索到了你需要的文件,比如以“.mp4”结尾的视频文件,就用shutil模块将其移动到目标路径下即可。

import os
import shutil
import time
def moveVideo(downloadRoot, mediaRoot):
    # downloadRoot: 迅雷的默认下载目录(例:"D:\\download\\")
    # mediaRoot: 我希望存储的目标路径(例:"D:\\video\\")
    while True:
        files = os.listdir(downloadRoot)
        for file in files:
            # 找到视频文件
            # 在添加下载任务的时候,我将“另存为文件名”这一参数设置成了“n_***.mp4”,n是之后要存放的文件夹名
            if file.endswith('.mp4'):
                # 获取该视频文件的完整路径("D:\\download\\n_***.mp4")
                srcPath = downloadRoot + file
                # 获取转移路径("D:\\video\\n")
                videoRoot = mediaRoot + file.split('_')[0]
                # 如果没有这个目录就建立
                if not os.path.exists(videoRoot):
                    os.mkdir(videoRoot)
                # 获取转移后的完整路径("D:\\video\\***.mp4")
                dstPath = videoRoot + '\\' + file.split('_')[1]
                # 转移
                shutil.move(srcPath, dstPath)
        time.sleep(600)

如此就实现了利用python调用迅雷实现批量下载。

关于迅雷的一些设置

想要这个方法用得舒服,就需要对迅雷进行一些设置,大致如下:

大概就是这些,照着我的设置方法一样设置就行啦!

后记

当时在研究这个的时候,发现还有用命令行的方法,但是我这里行不通,Windows和Linux都不行,所以那个方法还是pass掉吧!

另外,关于AddTask方法,如果有人能找到文档请告诉我!谢谢!我怀疑老版本的迅雷可以使用完整的参数列表。

本文标签: 下载 万条链接 编程