贼快

代码:

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()# 每个线程每次下载大小为5Msize = 5242880# 当前文件大小需大于5Mif file_size > size:# 获取总线程数all_thread = int(file_size / size)# 设最大线程数为10,如总线程数大于10# 线程数为10if all_thread > 10:all_thread = 10part = file_size // all_threadthreads = []starttime = datetime.datetime.now().replace(microsecond=0)for i in range(all_thread):# 获取每个线程开始时的文件位置start = part * i# 获取每个文件结束位置if i == all_thread - 1:end = file_sizeelse:end = start + partif i > 0:start += 1headers = 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 - startdownsize = 0startTime = 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 实现多线程下载视频相关推荐

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

    代码: def thread(url): r = requests.get(url, headers=None, stream=True, timeout=30) # print(r.status_c ...

  2. python多线程下载视频_python 实现多线程下载m3u8格式视频并使用fmmpeg合并

    电影之类的长视频好像都用m3u8格式了,这就导致了多线程下载视频的意义不是很大,都是短视频,线不线程就没什么意义了嘛. 我们知道,m3u8的链接会下载一个文档,相当长,半小时的视频,应该有接近千行ts ...

  3. 【python】多线程下载m3u8分段视频

    1.说明 m3u8是一种传输数据的方式,比如说一集20分钟的完整视频被分割成一千多段一两秒的小视频,客户端播放的时候是感觉是连续,但如果你要下载这集视频,那就要把一千多个小视频全都下载然后自己拼接成一 ...

  4. python代码示例下载-Python实现多线程下载脚本的示例代码

    0x01 分析 一个简单的多线程下载资源的Python脚本,主要实现部分包含两个类: Download类:包含download()和get_complete_rate()两种方法.download() ...

  5. python + wget多线程下载

    python + wget多线程下载 读取链接 下载函数 MyThread 并行下载 代码 由于有个项目需要下载大量数据,数据大多是每个100MB左右,所以我想使用python + wget多线程下载 ...

  6. 用Python打造批量下载视频并能可视化下载进度的炫酷下载器

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 吾日三省吾身:为人谋而不忠乎?与朋 ...

  7. 爬虫python下载视频_用python做爬虫下载视频

    用python有一段时间了,对python是十二分喜爱,在我看来python是个好工具,可以轻松简洁的帮我完成一些我想要完成的工作.下面和大家分享一下我用python爬取某网站视频的案例.用pytho ...

  8. python使用you-get下载视频

    B站视频想下载,但是没有下载按钮,于是找其他方法----使用you-get下载: 一.电脑安装python 二.win+R键,在打开的运行窗口中输入"cmd",打开命令行 三.安装 ...

  9. python实现多线程下载_多线程分段下载研究的python实现(一)

    我一直对下载文件比较感兴趣.现在我下载文件大部分是用迅雷,但迅雷也有一些不如意的地方,内存占用大,一些不必要的功能太多,不可定制.尤其是最后一点.现在有些下载对useragent,cookie,aut ...

最新文章

  1. 数学仍然是人类的“火炬”
  2. linux设置证书登录密码修改,centos7 配置使用证书登录
  3. 程序集信息设置.net
  4. 音视频技术开发周刊 | 152
  5. C orm mysql_Simple MySQL-C ORM
  6. JZ46把数字翻译成字符串
  7. reflections歌词翻译_Reflections中文歌词
  8. 天才AI少年范浩强坚信“弄斧要到班门”
  9. 为什么计算机休眠风扇还转,Win10电脑睡眠但风扇还在转怎么办
  10. 【BZOJ】【P3110】【ZJOI2013】【K大数查询】【题解】【树套树】
  11. VM虚拟机安装win7系统
  12. 【51Job数据爬取日志】前程无忧URL请求字段分析
  13. Variable Rate Gradual Dutch Auctions:一种出售元宇宙虚拟土地的新方式
  14. C++读取Wav文件
  15. centos 阿帕奇无法解析php_PHP文件包含漏洞利用思路与Bypass总结手册(二)
  16. 二、8.根据一个收件人列表,输出姓名:xxx 电话:xxx 收货地址:xxx姓名:xxx 电话:xxx 收货地址:xxx的格式.
  17. NameValuePair
  18. java将图片变灰、去噪、反色
  19. UltraEdit编辑器的宏使用
  20. 新产品开发之C流程 (C-flow)

热门文章

  1. Google Colab的使用
  2. NSA,放开那头魔兽!
  3. 表单查询显示翻页等不可用,提示对象不支持此属性或方法,切记查询按钮的name值不能为submit
  4. OSChina 周二乱弹 —— 前方到站,妙鲜路
  5. C# 异常关于对象不能从DBNull转换为其他类型
  6. Improved Techniques for Training GANs论文中的创新和理解
  7. Java设计模式--代理模式
  8. Vue + nightwatch + Chrome76进行e2e测试的正确配置(一)
  9. 从零实现深度学习框架——LSTM从理论到实战【理论】
  10. 如何在网页标题栏中加入图片!