阅前声明:本文旨在交流技术,尊重版权尊重原创,科学上网,不得用于违法途径,安全使用技术,因技术使用不当导致不良后果,本人概不负责

目录

  • 问题起源
  • 网络分析
  • 代码示例
  • 结果展示

问题起源

最近想学学英语,看了几个课程,里面建议看看美剧,里面推荐了几部美剧应该还不错,还没看完,有兴趣的可以瞅瞅!!
影单目录如下:

  • 《安娜》
  • 《时尚女魔头》
  • 《行动目标希特勒》

朋友推荐了【人人影视】的资源,不知道是我自己的网络问题还是因为网站服务器在外部或者其他原因,一秒卡三下,在线播放就贼痛苦,所以就想下载下来看,顺便为打发国庆高铁的无聊囤点儿货,为了看点儿美剧也是拼了。

网络分析

这里以《安娜》为例,开发者模式查询网络传输,先找到m3u8的请求,这里是双层嵌套,但是好在没有加密,
加密的暂时没啥办法,网上有很多案例,试了好多没成功

解释一下:m3u8是一种流媒体格式,以文件列表的形式存在,里面记录了版本号、加密方式、文件列表等信息

如下图所示,先找到第一层索引文件
直接复制请求url到浏览器,下载m3u8文件,使用记事本/notepad++打开,文件内容如下,这里放的是真实m3u8文件路径

播放一段,找到一段ts,解析出当前请求域路径

把前面的域路径和前面第一层的m3u8路径拼接
得到真实m3u8请求

重复前面步骤:把完整连接复制到浏览器–>下载

这里就得到了全部的ts路径和顺序,解析出来合并就可以了

代码示例

import requests,osdef download_ts_file(url,num,total):"""单个ts文件下载"""# 这里可以用自己的,也可以使用 fake_useragent 生成随机请求头headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}response=requests.get(url,headers=headers)data = response.contentfile_name = url.split("/")[-1]ts_path = os.path.join(tmp_path,file_name)with open(ts_path,'wb') as f:f.write(data)f.close()print(f"第【{num+1}/{total}】个ts片段{file_name}下载完成")return None# ts临时存储路径
tmp_path = os.path.join(os.getcwd(),"tmp_path")# 读取并解析ts链接
f = open("index.m3u8","r",encoding="utf-8")
m3u8 = f.readlines()
f.close()url_list = [url.split("\n")[0] for url in m3u8 if "https" in url]# 循环下载各个ts片段--这里可以使用多线程,这里出于安全考虑没有加速,感兴趣的可以自己试试
[download_ts_file(url,url_list.index(url),len(url_list)) for url in url_list]----------重要的事情说三遍,注意安全注意安全注意安全--------
----------重要的事情说三遍,注意安全注意安全注意安全--------
----------重要的事情说三遍,注意安全注意安全注意安全--------
—————————————————————————————————————————————————————
-----------分割线,多线程速度贼快,注意安全哦!----------
-----------本来不想用多线程的,奈何单线程实在太慢----------
import requests,osdef download_ts_file(num,url_list):"""单个ts文件下载"""url,total = url_list[num],len(url_list)# 这里可以用自己的,也可以使用 fake_useragent 生成随机请求头headers={'User-Agent':'xxxxx'}response=requests.get(url,headers=headers)data = response.contentfile_name = url.split("/")[-1]ts_path = os.path.join(tmp_path,file_name)with open(ts_path,'wb') as f:f.write(data)f.close()print(f"第【{num+1}/{total}】个ts片段{file_name}下载完成")return None# ts临时存储路径
tmp_path = os.path.join(os.getcwd(),"tmp_path")# 读取并解析ts链接
f = open("index.m3u8","r",encoding="utf-8")
m3u8 = f.readlines()
f.close()url_list = [url.split("\n")[0] for url in m3u8 if "https" in url]# 循环下载各个ts片段--这里可以使用多线程,这里出于安全考虑没有加速,感兴趣的可以自己试试
from concurrent.futures import ThreadPoolExecutor  # 线程池p = ThreadPoolExecutor(8)
for num in range(len(url_list)):p.submit(download_ts_file, num,url_list)———————————————————我又是一条分割线——————————————
——————————————下面是怎么把ts合成成MP4格式——————————#方法一:直接读取写入,注意按照m3u8文件给出的顺序读取写入
import os# ts临时存储路径
tmp_path = os.path.join(os.getcwd(),"tmp_path")# 读取并解析ts链接
f = open("index.m3u8","r",encoding="utf-8")
m3u8 = f.readlines()
f.close()url_list = [url.split("\n")[0] for url in m3u8 if "https" in url]with open('安娜2019.mp4','wb') as f2:for url in url_list:file_name = url.split("/")[-1]ts_path = os.path.join(tmp_path,file_name)f1 = open(ts_path,"rb")data = f1.read()f1.close()f2.write(data)
f2.close()

合并ts还有一种方法,但是上限只能合并450个,我们这里是大视频不适用,可以了解参考下,当然有方法规避这个bug,这里不细讲了,有兴趣的自己查下资料

python合并大量ts文件成mp4格式(ps:上限是450,亲测)

结果展示

python爬虫美剧下载相关推荐

  1. python爬虫教程下载-Python爬虫视频教程全集下载

    原标题:Python爬虫视频教程全集下载 Python作为一门高级编程语言,在编程中应用得非常广泛.随着人工智能的发展,python人才的需求更大.当然,这也吸引了很多同学选择自学Python爬虫.P ...

  2. python爬虫实现批量下载百度图片

    今天和小伙伴们合作一个小项目,需要用到景点图片作为数据源,在百度上搜索了一些图片,感觉一个一个手动保存太过麻烦,于是想到用爬虫来下载图片. 本次代码用到了下列一些python模块,需要预先安装Beau ...

  3. Python 爬虫 m3u8的下载及AES解密

    python爬虫 m3u8的下载及AES加密的解密 前言 2023.1.23更新 线程池版 完整代码 异步协程版 前言 这里与hxdm分享一篇关于m3u8视频流的爬取下载合并成mp4视频的方法,并且支 ...

  4. python爬虫实现音乐下载

    python爬虫实现音乐下载 音乐下载功能模块 # !/usr/bin/env python # -*- coding:UTF-8 -*- # # @Version : 1.0 # @Time : 2 ...

  5. 使用Python爬虫示例-自动下载网页音频文件

    使用Python爬虫示例-自动下载网页音频文件 使用库 目标网站 获取并解析网页源代码 访问下载链接 使用库 requests 用来发送http请求. BeautifulSoup 一个灵活又方便的网页 ...

  6. python爬虫,爬取下载图片

    python爬虫,爬取下载图片 分别引入以下三个包 from urllib.request import urlopen from bs4 import BeautifulSoup import re ...

  7. Python爬虫之scrapy下载文件和图片

    Python爬虫之scrapy下载文件和图片 一:pipeline 二:使用scrapy下载图片 2.1 创建scrapy项目 1.2 创建爬虫 1.3 配置文件设置 1.4 编写启动文件 1.5 爬 ...

  8. mac用python爬虫下载图片_使用Python爬虫实现自动下载图片

    python爬虫支持模块多.代码简洁.开发效率高 ,是我们进行网络爬虫可以选取的好工具.对于一个个的爬取下载,势必会消耗我们大量的时间,使用Python爬虫就可以解决这个问题,即可以实现自动下载.本文 ...

  9. python爬虫+ffmpeg批量下载ts文件,解密合并成mp4

    标题 python爬虫+ffmpeg批量下载ts文件,解密合并成mp4 文章目录 标题 前言 一.分析目标 二.寻找url规律 三.写代码 总结 前言 (第一次写博客,写的不好请见谅哈~~) 目标是大 ...

最新文章

  1. 阿里,腾讯,拼多多面试必挂:面对千万级、亿级流量怎么处理?
  2. 导入Java文件还是class文件_java程序运行的时候,是把所有的class文件都加载到内存吗?还是用的什么加载什么?...
  3. 在哪里能收到python实例代码-python下10个简单实例代码
  4. 如何在AWS中启动EC2实例
  5. java数组排序源码_Java 数组工具类排序,最大值最小值等
  6. MySQL中使用外键约束的注意事项
  7. java server 参数_java serversocket参数详解
  8. 读写锁分离的循环队列
  9. atomic的安全性?
  10. python 列表切片学习
  11. shell php的守护进程,实例详解shell编写守护进程的方法
  12. 隐藏水滴屏的软件_手机隐藏水滴屏的APP
  13. 计算两个坐标经纬度之间的距离(5种方式)
  14. @Aspect相关注解和属性详解
  15. linux下传输文件命令
  16. 笔记本电脑无法连接自己家的网络
  17. unity warning CS0108: test4.name' hides inherited memberUnityEngine.Object.name’.
  18. 计算机二级vb考试教材,计算机二级考试VB基础题教材.doc
  19. 数学建模笔记 day-03
  20. mysql 一些命令 杂乱

热门文章

  1. 价值规律的作用是什么
  2. 华为手机手电筒怎么改变颜色_华为手机设置手电筒亮度 华为手机手电筒设置...
  3. java手电筒_android--超级手电筒的开发记录
  4. 爬虫selenium教程
  5. aop - spring如何选择、创建代理bean
  6. 【服务器数据恢复】XFS文件系统分区丢失怎么恢复数据?
  7. vue项目启动报错Cannot find module ‘xxx’
  8. ps简单合成一个微小人像
  9. C#开发笔记之02-什么时候使用OnXXX方法,这种命名是什么意思?
  10. 【附源码】计算机毕业设计java疫情期间优化旅游平台设计与实现