我是如何使用python控制迅雷自动下载电影的?

写了一个脚本爬取了阳光电影的豆瓣高分电影,需要用迅雷帮我一部一部的自动下载好,供我无聊时观看.为什么要一部一部的下?
因为中国移动送了我一张无限流量卡,结果才用了5个G我就被限速到 100kb/s 了,不能忍 不能浪费.遂生出用来给电脑开热点下电影的想法.100kb的网速也只能一部一部下了.完事开头难,我需要知道是否能用命令行控制迅雷下载电影,百度了下,OK,没问题
然后思考了一下,画了个流程图


下载流程图

我大概需要实现3个功能

  1. 使用命令行控制迅雷下载指定链接
  2. 检测任务是否开始
  3. 检测当前任务是否完成,用于确定是否开始下载下一部

功能1 控制迅雷

好了,说说怎么控制迅雷开始下载吧:
百度了一下怎么用命令控制迅雷下载,发现可以在cmd里直接输入 迅雷主程序绝对路径 + 下载连接 控制迅雷开始下载,但是要注意的是路径应放在双引号内,这样当路径包含空格时不会报错,还有就是你的路径肯定跟我的不一样,所以需要自己去找,可以找到快捷方式,然后右键找到文件所在地址,直到找到Thunder.exe
例如:
"D:\Program Files\xunleivip\Program\Thunder.exe" ftp://ygdy8:ygdy8@y201.dygod.org:1132/[阳光电影www.ygdy8.com].冬眠.BD.720p.中文字幕.rmvb

命令行控制迅雷下载

开始下载

不过有一点需要注意:
不能用迅雷极速版,因为极速版在新建任务时会弹出窗口询问是否开始下载.还关不掉,而迅雷U享版和广为人知的那个很多广告的迅雷可以设置不弹出窗口,我的是U享版

关掉询问窗口

OK,然后就是代码实现了,找对了思路,代码简直是easy

import os
url="ftp://ygdy8:ygdy8@y201.dygod.org:1132/[阳光电影www.ygdy8.com].冬眠.BD.720p.中文字幕.rmvb"
os.system(r'"D:\Program Files\xunleivip\Program\Thunder.exe" {url}'.format(url=url))

url 和程序路径之间是有一个空格的

功能2 检测任务是否开始

一开始我是想找迅雷是否有这样的命令接口什么的,然而并没有(也可能是我没找到)忧郁了半天,忽然想起了迅雷在下载资源时是会有暂存文件的,此文件名是这样的 资源名.xltd 例如
[阳光电影www.ygdy8.com].冬眠.BD.720p.中文字幕.rmvb.xltd
如果任务开始了,就会有这样一个文件,我们只需要去检测这个文件是否存在就可以判断任务是否开始了.代码实现如下:

import os
def check_start(filename):
    '''
    检测文件是否开始下载
    '''
    cache_file = filename+".xltd"
    return os.path.exists(os.path.join(save_path,cache_file))

代码中的save_path变量是文件保存路径,我的是
save_path="D:\桌面"

功能3 检测任务是否完成

跟功能2的思路是一样的,只有当下载完成时,暂存文件才会变成正常的资源文件名,所以同理,我们去检测是否存在就是.

import  os
def check_end(fiename):
    '''
    检测文件是否下载完成
    '''
    return os.path.exists(os.path.join(save_path,fiename))

代码中的save_path变量是文件保存路径,我的是
save_path="D:\桌面"

这些方法都是依靠文件名来判断的,我们只需要从链接中提取到文件名即可,怎么提取呢?
ftp://ygdy8:ygdy8@y201.dygod.org:1132/[阳光电影www.ygdy8.com].冬眠.BD.720p.中文字幕.rmvb
可以看到文件名就在连接最后面,我们可以用os.path.split()方法去分割,返回的是个元组

捕获.JPG

代码实现如下

def get_filename(url):
    return os.path.split(url)[1]

开始拼装

OK,需要用到的功能写好了,开始根据流程拼装
首先需要拿到电影资源链接,我保存到了一个txt文件中


资源链接

大概200多条,不多,所以取出来,保存到一个list即可.
然后一个一个的下载.
写一个方法来下载资源把

def download(url):
    '''
    下载资源
    返回True表示下载完成 否则失败
    '''
    os.system(r'"D:\Program Files\xunleivip\Program\Thunder.exe" {url}'.format(url=url))
    #一定要休眠一段时间,执行命令后要等一会儿迅雷才会新建任务,
    #然后还要寻找资源,这都需要时间,大概多久,自己去测试,根据网络、资源不同,寻找资源的速度也不同
    #如果没启动迅雷,迅雷还会启动一会儿
    time.sleep(20)
    filename = get_filename(url)
    print("正在下载 {}".format(filename))
    #检测任务是否已开始
    #有时候会因为资源不存在,或者迅雷该死的版权问题会下载失败
    if check_start(filename):
        while True:
            #每分钟检测一次是否下载完成
            time.sleep(60)
            if check_end(filename):
                return True
    else:
        return False

好,开始循环遍历一个个的下载把

def main():
    #获取所有资源链接
    f = open("urls.txt","r")
    urls = [url.replace("\n","") for url in f.readlines()]
    f.close()
    # 开始循环下载
    for url in urls:
        if download(url):
            print("======下载完成======")
        else:
            print("=======下载失败=====")


if __name__ == '__main__':
    print("=======电影自动下载程序启动=========")
    main()

好了,运行脚本开始下载把

要是对我的urls.txt感兴趣的话,去下载把,都是豆瓣高分电影
https://pan.baidu.com/s/1nwQ9qfJ

代码全览

import os
import time
save_path="D:\桌面"

def check_end(fiename):
    '''
    检测文件是否下载完成
    '''
    return os.path.exists(os.path.join(save_path,fiename))
def check_start(filename):
    '''
    检测文件是否开始下载
    '''
    cache_file = filename+".xltd"
    return os.path.exists(os.path.join(save_path,cache_file))
def get_filename(url):
    return os.path.split(url)[1]

def download(url):
    '''
    返回True表示下载完成 否则失败
    '''
    os.system(r'"D:\Program Files\xunleivip\Program\Thunder.exe" {url}'.format(url=url))
    time.sleep(20)
    filename = get_filename(url)
    print("正在下载 {}".format(filename))
    if check_start(filename):
        while True:
            #每分钟检测一次是否下载完成
            time.sleep(60)
            if check_end(filename):
                return True
    else:
        return False


def main():
    #获取所有资源链接
    f = open("urls.txt","r")
    urls = [url.replace("\n","") for url in f.readlines()]
    f.close()
    # 开始循环下载
    for url in urls:
        if download(url):
            print("======下载完成======")
        else:
            print("=======下载失败=====")


if __name__ == '__main__':
    print("=======电影自动下载程序启动=========")
    main()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容