爬取A站视频,涉及m3u8格式的处理

一、抓包分析

1.进入A站进行抓包分析

进入一个页面,右点击鼠标按钮,点击检查

接着点击network,点击Fetxh/XHR,然后刷新网页,得到下面的页面

发现其中有许多d595开头的文件,它们是ts文件,点击其中一个。在General中复制其requests URL在浏览器打开,会自动下载一个文件,保存为ts,用视频打开发现是一个三四秒的视频。复制其中的一部分进行搜索。

点击搜索中的最后一个包,查看这 个包,点击preview,可以得到我们想要的下载ts的地址。

现在的问题来到,如何找到这个包的url,最后可以在源代码中找到这个包的url。

2.爬虫步骤分解

首先访问该页面源代码,提取到含有视频ts格式地址的包的url,然后访问这个url,提取所有的视频ts地址,然后对视频ts地址进行访问保存视频,最后将视频合成一个。

二、代码展现与讲解

python 复制代码
import re
import requests
import time
import os
import zipfile
from tqdm import tqdm

ac_id = input('请输入你想要下载的视频ID:')
url = f'https://www.acfun.cn/v/{ac_id}'  # 网页源代码的url地址
headers = {
    "User-Agent":
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
response = requests.get(url=url,headers=headers)  # 得到网页源代码

m3u8_url = re.findall('backupUrl(.*?)\"]',response.text)[0].replace('"','').split('\\')[2]  # 利用正则提取我们想要抓取的包的url
title = re.findall('<title >(.*?) - AcFun弹幕视频网 - 认真你就输啦 \(\?ω\?\)ノ- \( ゜- ゜\)つロ</title>',response.text)[0] # 获取视频的名称
m3u8_data = requests.get(url=m3u8_url,headers=headers).text  # 获取报的内容
m3u8_data = re.sub('#EXTM3U','',m3u8_data)     # 利用正则剔除无用的内容
m3u8_data = re.sub('#EXT-X-VERSION:\d','',m3u8_data)
m3u8_data = re.sub('#EXT-X-TARGETDURATION:\d','',m3u8_data)
m3u8_data = re.sub('#EXT-X-MEDIA-SEQUENCE:\d','',m3u8_data)
m3u8_data = re.sub('#EXTINF:\d\.\d+,','',m3u8_data)
m3u8_data = re.sub('#EXT-X-ENDLIST','',m3u8_data)

filename = f'{title}\\'        # 生成一个文件夹保存视频
if not os.path.exists(filename):
    os.mkdir(filename)
m3u8_data = m3u8_data.split()# 以空格分割     # 分割后,将字符串转化为列表
print('正在下载ts文件内容,请稍后..........')

for link in tqdm(m3u8_data):
    link_url = 'https://ali-safety-video.acfun.cn/mediacloud/acfun/acfun_video/'+link  # 观察ts的下载地址,对url进行补全
    link_name = link.split('.')[1]   # 获取每一个ts的名称
    link_content = requests.get(url=link_url,headers=headers).content  #以二进制保存视频
    with open(filename+link_name+'.ts',mode='wb') as f:
        f.write(link_content)

print('ts视频片段下载完成.........')

三、总结

1.学到一个库tqdm的使用

2.m3u8视频是分成许多部分的,要找到那个含有所有部分url的包,然后就是找这个包的url

3.合成视频使用zipfile库

复制代码
files = os.listdir(filename)  # 获取文件夹下所有的小视频
复制代码
with zipfile.ZipFile(filename+title+'.mp4',mode='w') as z:

z.write(content)

相关推荐
voipmaker14 小时前
GB28181 对接踩坑实录:注册不上、目录不全、流卡顿,一次说清(附 2022 版变更清单)
物联网·音视频·实时音视频·信息与通信·iot·gb28181·国标gb28181
2601_9583529016 小时前
23.5×19mm 换掉一整条音频链?|A-68 集成了什么:ADC / DAC / 24.576MHz 时钟 / AEC / 波束降噪,主控仅需 6 根线
前端·音视频·ai降噪·回声消除·语音模块
2601_9654488716 小时前
AI视频制作:做系列历史人物视频音色不搭,AI 音色克隆的方法实测
人工智能·音视频
码上观世界16 小时前
多余的一声「嗯」:Fun-CosyVoice3 zero_shot 开头伪影排查实录
音视频
manyingAi16 小时前
AI漫剧生产系统架构解析:从文本拆解到音视频合成
人工智能·音视频
技灵AI20 小时前
MiniMax H3 能做哪些视频?商品广告、人物表演与运镜怎么选
人工智能·prompt·aigc·音视频
AIsoft_86891 天前
职场音频文件怎么整理?录音APP有哪些用法
android·音视频
EasyCVR1 天前
多厂区值守点分散,视频汇聚/视频融合/视频分析平台EasyCVR人员离岗AI监测怎么做才省事?
音视频·easycvr·国标gb28181
TK泰妞1 天前
TikTok 商品视频有播放却没点击?从 4 个环节定位内容问题
音视频
Raymond16881 天前
零样本TTS长视频配音的工程取舍:自回归、非自回归与韵律边界
人工智能·数据挖掘·回归·音视频·音频