代码:
def thread(url): r = requests.get(url, headers=None, stream=True, timeout=30) # print(r.status_code, r.headers) headers = {} all_thread = 1 # 获取视频大小 file_size = int(r.headers['content-length']) # 如果获取到文件大小,创建一个和需要下载文件一样大小的文件 if file_size: fp = open('2.mp4', 'wb') fp.truncate(file_size) print('视频大小:' + str(int(file_size / 1024 / 1024)) + "MB") fp.close() # 每个线程每次下载大小为5M size = 5242880 # 当前文件大小需大于5M if file_size > size: # 获取总线程数 all_thread = int(file_size / size) # 设最大线程数为10,如总线程数大于10 # 线程数为10 if all_thread > 10: all_thread = 10 part = file_size // all_thread threads = [] starttime = datetime.datetime.now().replace(microsecond=0) for i in range(all_thread): # 获取每个线程开始时的文件位置 start = part * i # 获取每个文件结束位置 if i == all_thread - 1: end = file_size else: end = start + part if i > 0: start += 1 headers = headers.copy() headers['Range'] = "bytes=%s-%s" % (start, end) t = threading.Thread(target=Handler, name='th-' + str(i), kwargs={'start': start, 'end': end, 'url': url, 'filename': '2.mp4', 'headers': headers}) t.setDaemon(True) threads.append(t) # 线程开始 for t in threads: time.sleep(0.2) t.start() # 等待所有线程结束 for t in threads: t.join() endtime = datetime.datetime.now().replace(microsecond=0) print('用时:%s' % (endtime - starttime)) def Handler(start, end, url, filename, headers={}): tt_name = threading.current_thread().getName() print(tt_name + ' is begin') r = requests.get(url, headers=headers, stream=True) total_size = end - start downsize = 0 startTime = time.time() with open(filename, 'r+b') as fp: fp.seek(start) var = fp.tell() for chunk in r.iter_content(204800): if chunk: fp.write(chunk) downsize += len(chunk) line = tt_name + '-downloading %d KB/s - %.2f MB, 共 %.2f MB' line = line % ( downsize / 1024 / (time.time() - startTime), downsize / 1024 / 1024, total_size / 1024 / 1024) print(line, end='\r') if __name__ == '__main__': url = input('输入视频链接(请输入视频原链):') thread(url)
效果:
可以看见,38MB,一秒下完。
唯一的缺点就是,要有视频原链,而一般这个视频原链都是不会轻易被找到的,这就叫反爬。
找视频原链,就找爬虫,视频爬虫只是爬虫的一种。
可以根据视频大小,改变线程数。
总结
以上所述是小编给大家介绍的python 实现多线程下载视频的代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
2024年11月17日
2024年11月17日
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】