资讯专栏INFORMATION COLUMN

python爬虫美剧下载

阿罗 / 1270人阅读

摘要:阅前声明本文旨在交流技术,尊重版权尊重原创,科学上网,不得用于违法途径,安全使用技术,因技术使用不当导致不良后果,本人概不负责目录问题起源网络分析代码示例结果展示问题起源最近想学学英语,看了几个课程,里面建议看看美剧,

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

问题起源

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

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

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

网络分析

这里以《安娜》为例,开发者模式查询网络传输,先找到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.content    file_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.content    file_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,亲测)

结果展示

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/121382.html

相关文章

  • nodejs练手爬虫+API测试

    摘要:知乎日报代理首先感谢提供的分析使用详情请参考他提供的参数和地址代理转发的使用为前缀进入代理路由启动界面图像获取后为图像分辨率,接受任意的格式,为任意非负整数,返回值均相同返回值示例最新消息等具体参考提供的分析中的使用方式以及参数含义。 项目说明 这是一个基于express的node后端API服务,当时只是想抓取字幕组网站的下载资源,以备以后通过nas的方式去自动下载关注的美剧。不过后来...

    bigdevil_s 评论0 收藏0
  • Hello World!一个计算机准大一小白的学习路径规划

    摘要:今天主要说一下个人情况和学习路径规划。个人情况作为浙江新高考最后一届小白鼠,经历了许许多多手动和谐的事情,但是七选三有技术是唯一好的一件事情,让我有了一点编程的基础。 前言 Hello World!这是我思否的第一篇技术博客(不知道算不算),刚刚经历了高考,有个10+分的滑铁卢,现坐标浙江杭州,被西南某末流211机械专业录取。虽然被苦x的机械录取,但还是对计算机有着幻想。以后想通...

    Fourierr 评论0 收藏0
  • Hello World!一个计算机准大一小白的学习路径规划

    摘要:今天主要说一下个人情况和学习路径规划。个人情况作为浙江新高考最后一届小白鼠,经历了许许多多手动和谐的事情,但是七选三有技术是唯一好的一件事情,让我有了一点编程的基础。 前言 Hello World!这是我思否的第一篇技术博客(不知道算不算),刚刚经历了高考,有个10+分的滑铁卢,现坐标浙江杭州,被西南某末流211机械专业录取。虽然被苦x的机械录取,但还是对计算机有着幻想。以后想通...

    X1nFLY 评论0 收藏0
  • 为了边看美剧边学英语,我写了个字幕处理脚本

    摘要:意味着字符串必须以结束。匹配不在方括号内的任意字符中转义字符使用倒斜杠。你需要输入转义字符,才能打印出一个倒斜杠。但是,通过在字符串的第一个引号之前加上,可以将该字符串标记为原始字符串,它不包括转义字符。 每个英语学渣(好吧,其实这个说的就是学渣本渣了♀)都有这样一个梦想: 能够一边轻松愉快地看着美剧,一边自己的英语听力水平还能蹭蹭地往上涨 。知乎上也有很多人分享了自己通过美剧练习听力...

    xbynet 评论0 收藏0
  • 基于python的百度云网盘资源搜索引擎设计架构

    摘要:大家都知道百度云网盘上有很多分享的资源,包括软件各类视频自学教程电子书甚至各种电影种子应有尽有,但百度云却没有提供相应的搜索功能。于是就尝试开发一个百度云资源的搜索系统。 大家都知道百度云网盘上有很多分享的资源,包括软件、各类视频自学教程、电子书、甚至各种电影、BT种子应有尽有,但百度云却没有提供相应的搜索功能。个人平时要找一些软件、美剧觉得非常蛋疼。于是就尝试开发一个百度云资源的搜索...

    williamwen1986 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<