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

目录

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

问题起源

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

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

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

网络分析

这里以《安娜》为例,开发者模式查询网络传输,先找到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. (0050)iOS开发之钥匙串存储
  2. XSLT基本语法和第一个实例
  3. python代码示例下载-Python实现多线程下载脚本的示例代码
  4. 企业IM,阿里钉钉“恶”企业微信“善”?
  5. 【面试招聘】阿里、腾讯 | 算法岗面试复盘
  6. linux fedora35设置双系统开机启动顺序
  7. 总结mysql的基础语法_mysql 基础sql语法总结 (二)DML
  8. java.io.FileNotFoundException: ...\ibs\library-1.0.17.jar (系统找不到指定的文件。)
  9. XML wsdl soap xslt xsl ide
  10. 软件测试面试1--软件测试基础理论(持续更新中...)
  11. 手把手OAuth2授权码模式(Authorization Code)
  12. microbiomeViz:绘制lefse结果中Cladogram
  13. [转]伽利略卫星导航系统2019年7月14日起的宕机事件
  14. 【C++】加油站加油
  15. 计算机电缆价格范围,计算机电缆DJYPVPR价格,报价
  16. Loj #3124. 「CTS2019 | CTSC2019」氪金手游
  17. 物联网设备安全保护,需要这三道防线
  18. win7系统怎么调计算机,分辨率,教您Win7如何调电脑的分辨率
  19. 数睿数据深度 | 中国软件网对话数睿数据总裁刘超:深挖数据驱动、企业级无代码
  20. vue 项目启动失败 ‘webpack-dev-server‘ 不是内部或外部命令,也不是可运行的程序

热门文章

  1. 哪怕荆棘满路,我们仍无畏前行
  2. [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(四) —— 应对反爬技术(选取 User-Agent、添加 IP代理池以及Cookies池 )
  3. asp 和 html 婚鞋,几招教会你搭配出完美婚鞋
  4. 如何通过在FMC上为FTD下发PBR以及FMC如何为FTD开启traceroute回显
  5. IOS开发UI-------button
  6. Unity GUI游戏界面
  7. Uniapp自定义相机界面
  8. SqlServer中 stuff 函数
  9. 面试题之利用call或者apply实现bind功能
  10. PS特效动作制作合成创意报纸人物效果