Python 之 爬虫实战 -- 视频网站m3u8格式

视频网站m3u8格式

运行环境

Python3(解释器版本我用的3.7,识别代码)Pycharm(编辑器编辑代码滴 )

模块安装如下——

requests——pip install +模块名 或镜像源安装:

pip install -i https://pypi.douban.com/simple/+模块名

内置模块:import re import json 安装好Python环境即可。

爬虫的基本流程

数据来源分析 :

明确自己的需求---> 视频内容以及视频标题 - 通过开发者工具<>抓包分析,

分析视频是从哪里来的 - F12 fn+f12 右击页面点击检查 - a站 m3u8视频格

式 ---> media 是没有数据 mp4文件 ---> 整个视频内容 m3u8视频格式 --->

把整个视频内容 分割非常多小片段 - 代码的实现步骤 1. 发起请求 2. 获取

数据 3. 解析数据 4. 保存数据

爬取目标

https://www.acfun.cn/v/ac13524296
ldyf8xj2.png
分析视频是从哪里来的 - F12,找到User-Agent:
ldyf9bpu.png

源码

"""
# 导入模块
import requests
# 导入正则模块
import re
# 导入数据格式化模块
from pprint import pprint
import json
url = 'https://www.acfun.cn/v/ac13524296'
# 模拟浏览器 请求头
# User-Agent 用户代理
headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
}
# 1. 发起请求
response = requests.get(url, headers=headers)
# 2. 获取数据 获取响应
# print(response.text)
# 3.数据解析
"""
.*? 元字符
. 匹配任意字符除了换行符之外
*匹配前一个字符0或者无限个
? 非贪婪匹配
"""
# 提取标题p
title = re.findall('"title":"(.*?)",',response.text)[1]
# print(title)
# 通过re提取视频内容信息
html_data = re.findall('window.pageInfo = window.videoInfo =(.*?);',response.text)[0]
# 数据转化json
json_data = json.loads(html_data)
# pprint(json_data)
# 字典取值 dict = {键值:value值} dict[键值]
m3u8_url = json.loads(json_data['currentVideoInfo']['ksPlayJson'])['adaptationSet'][0]['representation'][0]['backupUrl'][0]
pprint(m3u8_url)
m3u8_data = requests.get(m3u8_url, headers=headers).text
# print(m3u8_data)
m3u8_data=re.sub('#E.*','',m3u8_data).split()
# print(m3u8_data)
for ts in m3u8_data:
        # print(ts)
        ts_url = 'https://ali-safety-video.acfun.cn/mediacloud/acfun/acfun_video/hls/'+ts
        ts_name = ts.split('.')[1]
        # print(ts_url,ts_name)
        ts_content = requests.get(url=ts_url,headers=headers).content
        #  保存 图片 音频 视频 都是字节流 二进制
        with open('video\\'+ts_name+'.mp4' , mode='wb') as f:
                f.write(ts_content)

效果展示

A站是m3u8的数据格式,很多人就会问了,你怎么知道,你为什么知道,你凭什么知道。

这些咱们都是可以通过开发者工具对于网页内容的分析,可以看到链接的后缀都是ts结尾的,

这样的文件内容都是你m3u8格式,是把整个视频分成多段的ts文件。

我们可以看到一段视频仅仅只有5秒钟的时间。对于ts文件有一个特性,它就是会存在一个

m3u8文件里面,所有的ts文件都在那,所以只需要找到m3u8的文件就可以了。

视频文件:
ldyfagz7.png
如何合成ts文件变成mp4呢?

添加到压缩文件——更改压缩文件后缀名以及压缩方式——后缀名改为:.mp4,压缩方式改

为:存储,然后点击确定即可。

播放视频:
ldyfb1d7.png
特别说明:这样合并的前提是你的ts文件都是0000,然后0001 这样按照顺

序排列的,不然你合并出来之后播放顺序是乱的。

END

原文公众号:Python顾木子吖

posted @ 2023-09-18 17:58  Ivan丶ky  阅读(590)  评论(0)    收藏  举报