admin管理员组文章数量:1532440
一、网址
网址:https://v.qq/
二、爬取视频
找到需要爬取的视频,F12打开开发者工具。刷新网页,点击网络,ctrl+F弹出搜索框,输入m3u8,找到m3u8文件相关的请求。如下图所示url和post请求方式。
查看负载,可以发现post请求有data参数,其中包含了视频信息。所以复制粘贴进程序即可。
代码如下:
# 导入第三方库 import os import requests import json import re # data参数用上图,所说方法复制即可 data = input("请粘贴data:") # 伪装请求头 headers = { "origin": "https://v.qq", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36", "referer": "https://v.qq/", } url = "https://vd.l.qq/proxyhttp" # 发出post请求 resp = requests.post(url, data=data, headers=headers) resp.encoding = "utf-8" resp1 = resp.json()
得到resp1变量,里面就是返回的json数据。因此解析获得m3u8文件的请求url。
代码如下:
vinfo = resp1['vinfo'] vinfo = json.loads(vinfo) # url3就是m3u8的请求地址 url3 = vinfo['vl']['vi'][0]['ul']['ui'][0]['url'] title0 = vinfo['vl']['vi'][0]['ti'] print("正在下载:", title0) title = re.sub(r'[\\/:*?"<>|\n]', '_', title0) # print(url3) head = url3.rsplit("/", 1)[0]
接着请求url3,就可以得到m3u8文件,例如
m3u8 = requests.get(url3) print(m3u8.text)
m3u8文件介绍
m3u8 文件实质是一个播放列表(playlist),其可能是一个媒体播放列表(Media Playlist),或者是一个主列表(Master Playlist)。但无论是哪种播放列表,其内部文字使用的都是 utf-8 编码。
当 m3u8 文件作为媒体播放列表(Meida Playlist)时,其内部信息记录的是一系列媒体片段资源,顺序播放该片段资源,即可完整展示多媒体资源。其格式如下所示:
#EXTM3U #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-TARGETDURATION:13 #EXT-X-PLAYLIST-TYPE:VOD #EXTINF:12.000, 00_gzc_1000102_0b53veai4aaam4aimjbexzsmbkodr2xqbcsa.f322062.1.ts?index=0&start=0&end=12000&brs=0&bre=243647&ver=4&token=eeaafe37e525caef67e94b11dc5126a3 #EXTINF:11.080, 01_gzc_1000102_0b53veai4aaam4aimjbexzsmbkodr2xqbcsa.f322062.1.ts?index=1&start=12000&end=23080&brs=243648&bre=505907&ver=4&token=61381386b40689b77df43778dbe50bcf 。。。。。中间省略。。。。。 #EXTINF:12.000, 098_gzc_1000102_0b53veai4aaam4aimjbexzsmbkodr2xqbcsa.f322062.4.ts?index=98&start=1103840&end=1115840&brs=7201528&bre=7706683&ver=4&token=f2eae326fde8ebeffec01f417c6b0b85 #EXTINF:11.800, 099_gzc_1000102_0b53veai4aaam4aimjbexzsmbkodr2xqbcsa.f322062.4.ts?index=99&start=1115840&end=1127640&brs=7706684&bre=8416571&ver=4&token=8ade230a20460f3dc9b84d5581b2f489 #EXTINF:11.240, 0100_gzc_1000102_0b53veai4aaam4aimjbexzsmbkodr2xqbcsa.f322062.4.ts?index=100&start=1127640&end=1138880&brs=8416572&bre=9050507&ver=4&token=a6048f686963836d00fe4a5c92b115dd #EXTINF:9.536, 0101_gzc_1000102_0b53veai4aaam4aimjbexzsmbkodr2xqbcsa.f322062.4.ts?index=101&start=1138880&end=1148416&brs=9050508&bre=9539871&ver=4&token=d34012d8e76f50c3288063c80db858a2 #EXT-X-ENDLIST
其中每一个链接都包含了十几秒的视频。因此需要提取每个链接,并且下载,并且按照顺序命名文件,显然链接的前面部分是链接的顺序。
代码如下:
m3u8 = str(m3u8.content) # ②获取m3u8文件中所有链接 m3u8 = m3u8.split("\\n")[1:-1] m3u8_list = [] for line in m3u8: if line.startswith("#"): continue m3u8_list.append(line)
虽然拿到了所以的m3u8文件链接,但是他并没有网站域名,因此需要手动将url拼接。
下载所有ts文件
# ③下载所有ts文件 for i in m3u8_list: # 拼接url url = head+"/"+i response = requests.get(url).content # 拼接标题的名称,由于系统的排序规则问题,因此需要把文件命的长度保持一样,以便排序 min_title = i.split('_', 1)[0] + ".ts" while len(min_title) < 7: min_title = "0" + min_title # 保存文件 with open("ts_fragment/" + min_title, mode='wb') as f1: f1.write(response)
合并ts文件
# ④合并所有ts文件,就是将原来的所有ts文件,写入到一个新的文件里。 with open('vidio/'+title+'.ts', mode='wb') as f: for i in os.listdir('ts_fragment'): with open('ts_fragment/'+i, mode='rb') as f2: f.write(f2.read()) # 删除原来的文件 os.remove('ts_fragment/'+i)
三、全部代码展示
import os import requests import json import re # ①获取m3u8文件 data = input("请粘贴data:") headers = { # 若是有会员,可加上cookie可下载vip视频 "origin": "https://v.qq", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36", "referer": "https://v.qq/", } url = "https://vd.l.qq/proxyhttp" resp = requests.post(url, data=data, headers=headers) resp.encoding = "utf-8" resp1 = resp.json() # print(resp1) resp.close() vinfo = resp1['vinfo'] vinfo = json.loads(vinfo) url3 = vinfo['vl']['vi'][0]['ul']['ui'][0]['url'] title0 = vinfo['vl']['vi'][0]['ti'] print("正在下载:", title0) title = re.sub(r'[\\/:*?"<>|\n]', '_', title0) # print(url3) head = url3.rsplit("/", 1)[0] m3u8 = requests.get(url3).content m3u8 = str(m3u8) # ②获取m3u8文件中所有链接 m3u8 = m3u8.split("\\n")[1:-1] m3u8_list = [] for line in m3u8: if line.startswith("#"): continue m3u8_list.append(line) # print(m3u8) # print("拿到m3u8文件") print(head) print(m3u8_list) # ③下载所有ts文件 for i in m3u8_list: url = head+"/"+i response = requests.get(url).content min_title = i.split('_', 1)[0] + ".ts" while len(min_title) < 7: min_title = "0" + min_title with open("ts_fragment/" + min_title, mode='wb') as f1: f1.write(response) # ④合并所有ts文件 with open('vidio/'+title+'.ts', mode='wb') as f: for i in os.listdir('ts_fragment'): with open('ts_fragment/'+i, mode='rb') as f2: f.write(f2.read()) os.remove('ts_fragment/'+i)
四、结果展示
以上就是“Python下载腾讯视频”的全部内容,希望对你有所帮助。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、Python练习题
检查学习结果。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最后祝大家天天进步!!
上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。
版权声明:本文标题:Python下载腾讯视频 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1725972789a1051056.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论