python 实现多线程下载视频的代码


Posted in Python onNovember 15, 2019

代码:

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)

效果:

python 实现多线程下载视频的代码

可以看见,38MB,一秒下完。

唯一的缺点就是,要有视频原链,而一般这个视频原链都是不会轻易被找到的,这就叫反爬。

找视频原链,就找爬虫,视频爬虫只是爬虫的一种。

可以根据视频大小,改变线程数。

总结

以上所述是小编给大家介绍的python 实现多线程下载视频的代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
在Python的Bottle框架中使用微信API的示例
Apr 23 Python
python实现爬取千万淘宝商品的方法
Jun 30 Python
Fiddler如何抓取手机APP数据包
Jan 22 Python
python 接口测试response返回数据对比的方法
Feb 11 Python
基于python 爬虫爬到含空格的url的处理方法
May 11 Python
django表单实现下拉框的示例讲解
May 29 Python
Python 利用pydub库操作音频文件的方法
Jan 09 Python
python统计指定目录内文件的代码行数
Sep 19 Python
python实现二分类的卡方分箱示例
Nov 22 Python
重写django的model下的objects模型管理器方式
May 15 Python
TensorFlow实现模型断点训练,checkpoint模型载入方式
May 26 Python
pycharm设置默认的UTF-8编码模式的方法详解
Jun 01 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
Nov 15 #Python
浅析python内置模块collections
Nov 15 #Python
Python树莓派学习笔记之UDP传输视频帧操作详解
Nov 15 #Python
Python numpy数组转置与轴变换
Nov 15 #Python
python修改文件内容的3种方法详解
Nov 15 #Python
Python实现基于socket的udp传输与接收功能详解
Nov 15 #Python
python根据文本生成词云图代码实例
Nov 15 #Python
You might like
星际争霸任务指南——神族
2020/03/04 星际争霸
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
2015/12/10 PHP
jQuery源码分析-04 选择器-Sizzle-工作原理分析
2011/11/14 Javascript
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
iScroll.js 使用方法参考
2016/05/16 Javascript
如何解决jQuery EasyUI 已打开Tab重新加载问题
2016/12/19 Javascript
jQuery实现动态显示select下拉列表数据的方法
2018/02/05 jQuery
详解AngularJS 过滤器的使用
2018/06/02 Javascript
vue如何根据网站路由判断页面主题色详解
2018/11/02 Javascript
vue自定义指令之面板拖拽的实现
2019/04/14 Javascript
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
详解vue beforeEach 死循环问题解决方法
2020/02/25 Javascript
python使用PyV8执行javascript代码示例分享
2013/12/04 Python
Python程序设计入门(4)模块和包
2014/06/16 Python
Python的gevent框架的入门教程
2015/04/29 Python
Python和JavaScript间代码转换的4个工具
2016/02/22 Python
python3 unicode列表转换为中文的实例
2018/10/26 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
python如何处理程序无法打开
2020/06/16 Python
keras实现theano和tensorflow训练的模型相互转换
2020/06/19 Python
css3 iphone玻璃透明气泡完美实现
2013/03/20 HTML / CSS
给民警的表扬信
2014/01/08 职场文书
打架检讨书2000字
2014/02/22 职场文书
设备收款委托书范本
2014/10/02 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
2014年高二班主任工作总结
2014/12/16 职场文书
爸爸的三轮车观后感
2015/06/16 职场文书
优秀团员主要事迹范文
2015/11/05 职场文书
导游词之崇武古城
2019/10/07 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
php双向队列实例讲解
2021/11/17 PHP
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers