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