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

分析视频是从哪里来的 - F12,找到User-Agent:

源码
"""
# 导入模块
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的文件就可以了。
视频文件:

如何合成ts文件变成mp4呢?
添加到压缩文件——更改压缩文件后缀名以及压缩方式——后缀名改为:.mp4,压缩方式改
为:存储,然后点击确定即可。
播放视频:

特别说明:这样合并的前提是你的ts文件都是0000,然后0001 这样按照顺
序排列的,不然你合并出来之后播放顺序是乱的。
END
原文公众号:Python顾木子吖

浙公网安备 33010602011771号