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

一、抓包分析

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

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

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

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

 

 

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

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

2.爬虫步骤分解

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

二、代码展现与讲解

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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/342955.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

v38.Switch语句

1.Switch语句可以替代if-else语句 2.具体使用 Switch&#xff08;expression&#xff09; &#xff5b; case label&#xff1a;...... &#xff5d; ①将x与case后的label 进行比较&#xff1b; ②注意后面有冒号&#xff1b; ③从上往下开始检查case&#xff1b; ④如果…

Transform模型详解

Transformer模型详解 Encoder与Decoder输入单词Embedding位置 Embedding 自注意力机制Self-Attention 结构Self-Attention 的输出Multi-Head Attention Encoder 结构Add & NormFeed Forward组成 Encoder Decoder结构Decoder第一个 Multi-Head AttentionDecoder第二个 Multi…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-9 HTML5 表单验证

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>HTML5 表单验证</title> </head><body> <form action"#" method"get">请输入您的邮箱:<input type"email&q…

【AI的未来 - AI Agent系列】【MetaGPT】6. 用ActionNode重写技术文档助手

文章目录 0. 前置推荐阅读1. 重写WriteDirectory Action1.1 实现WriteDirectory的ActionNode&#xff1a;DIRECTORY_WRITE1.2 将 DIRECTORY_WRITE 包进 WriteDirectory中 2. 重写WriteContent Action2.1 思考重写方案2.2 实现WriteContent的ActionNode2.3 改写WriteContent Act…

记录一下对集合排序,处理属性为空且参与排序方法

一、需求 实际项目中经常存在对集合某个或多个属性进行排序&#xff0c;例如根据姓名排序&#xff0c;根据金额排序&#xff1b;或者多个字段排序&#xff0c;例如姓名首字母升序金额降序两个字段排序等等。 但是有时候姓名或金额会为空&#xff0c;之前我们排序的时候需要拿出…

(Bean工厂的后处理器入门)学习Spring的第七天

一 . Bean工厂的后处理器入门 : 直接上图 BeanDefinitionRegistyPostProcessor 为 BeanFactoryProcessor的子接口 , 前者先执行(图里只有Bean工厂的后处理器第一个类型) 如下图 : 这两个接口可改变两个Map(BeanDefinitionMap , singletonObject)里的信息 (黑马只讲了BeanFact…

linux LPT和COM回路测试(基于python+Qt+C++)

软件UI: 回路治具&#xff08;COMLPT&#xff09;&#xff1a; lpt_test.cpp&#xff08;c 源代码&#xff09;&#xff1a; #include <iostream> #include <fstream> #include <sstream> #include <unistd.h> #include <fcntl.h> #include <…

SCDN高防如何保护你的服务器

随着互联网的发展&#xff0c;如今的网络世界&#xff0c;虽说给我们的衣食住行带来了非常大的便利&#xff0c;但同时它存在着各种各样的威胁。比如我们的网站&#xff0c;如果不做任何保护措施的话&#xff0c;就很容易被DDoS、CC等攻击堵塞网络、窃取目标系统的信息&#xf…

惬意上手Python —— 装饰器和内置函数

1. Python装饰器 Python中的装饰器是一种特殊类型的函数&#xff0c;它允许用户在不修改原函数代码的情况下&#xff0c;增加或修改函数的行为。 具体来说,装饰器的工作原理基于Python的函数也是对象这一事实&#xff0c;可以被赋值给变量、作为参数传递给其他函数或者作为其他…

【易经】-- 风水基础

目录 一、基础概念 1、五行 2、十天干 3、十二地支 4、八卦 4.1 伏羲八卦次序图 4.2 八卦对应自然界的基本事物 4.3 八卦及所代表的意像 ​编辑 5、生辰八字 5.1 定义 5.2 换算方法 5.3 举例 5.4 八字排盘示例 5.5 算法实现 二、举例 1、计算某年的生肖和年的属…

【nginx实战】nginx正向代理、反向代理、由反向代理实现的负载均衡、故障转移详解

文章目录 一. 正向代理与反向代理的概念二. Nginx服务器的正向代理服务1. Nginx服务器正向代理服务的配置的3个指令1.1. resolver指令1.2. resolver_timeout指令1.3. proxy_pass指令 2. Nginx服务器正向代理服务的使用 三. Nginx服务器的反向代理服务1. 反向代理的基本指令1.1.…

高数总结(1

目录 1.总结&#xff1a;小结&#xff1a; 1.总结&#xff1a; 小结&#xff1a; 关注我给大家分享更多有趣的知识&#xff0c;以下是个人公众号&#xff0c;提供 ||代码兼职|| ||代码问题求解|| 由于本号流量还不足以发表推广&#xff0c;搜我的公众号即可&#xff1a;

基于51单片机的超声波物位测量系统[proteus仿真]

基于51单片机的超声波物位测量系统[proteus仿真] 超声波检测系统这个题目算是课程设计和毕业设计中常见的题目了&#xff0c;本期是一个103基于51单片机的超声波物位测量系统 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文章 2&#xf…

Redis 笔记二

概览 1.高并发秒杀问题及可能出现的bug 2.秒杀场景JVM级别锁和分布式锁 3.大厂分布式锁Redisson框架 4.从Redisson源码剖析lua解决锁原子性问题 5.从Redisson源码剖析经典锁续命问题 6.Redis主从架构锁失效如何解决 7.Redlock分布式锁高并发下可能存在的问题 8.双十一大促如何将…

【学习】FPN特征金字塔

论文&#xff1a;Feature Pyramid Networks for Object Detection &#xff08;CVPR 2016) 参考blog&#xff1a;https://blog.csdn.net/weixin_55073640/article/details/122627966 参考视频讲解&#xff1a;添加链接描述 卷积网络中&#xff0c;深层网络容易响应语义特征&am…

【C++】list容器功能模拟实现

介绍 上一次介绍了list队容器的迭代器模拟&#xff0c;这次模拟实现list的简单功能&#xff0c;尤其要注意构造函数、析构函数、以及赋值运算符重载的实现。 list容器需要接纳所有类型的数据&#xff0c;因此&#xff0c;结构设置与迭代器设置同理&#xff0c;需要引入结点&…

Dirichlet Process 3

本节来介绍如何构造G&#xff0c;这里使用Stick-breaking construction算法 如下图H是关于的分布 对于G&#xff0c;这里面有2个变量&#xff0c;一个是&#xff0c;即采样的位置&#xff0c;一个是&#xff0c;即的权重 每次采样一次称为一个item 第一次采样 ,, 第二次采样…

c++的命名空间

命名空间 一.c的关键字二.命名空间2.1 命名空间定义2.1 命名空间的使用2.1.1加命名空间名称及作用域限定符2.1.2使用using将命名空间中某个成员引入 三.标准命名空间std 一.c的关键字 c中一共有63个关键字 关键字11111asmdoifreturntrycontinueautodoubleinlineshorttypedeff…

vue echarts地图

下载地图文件&#xff1a; DataV.GeoAtlas地理小工具系列 范围选择器右侧行政区划范围中输入需要选择的省份或地市&#xff0c;选择自己想要的数据格式&#xff0c;这里选择了geojson格式&#xff0c;点右侧的蓝色按钮复制到浏览器地址栏中&#xff0c;打开的geojson文件内容…

LeetCode 670 最大交换数

周一&#xff0c;非常冷&#xff0c;大风呼呼的&#xff0c;上班路都走不动。 好消息&#xff0c;马上要过年了。大风吹&#xff0c;天气好。 过年过年&#xff0c;回家过年~ 学生时代的迷茫是不应该存在的&#xff0c;最好的时光应该尽情享受&#xff0c;而不应该自己给加层…