python采集A站m3u8视频格式视频
基本开发环境 (https://jq.qq.com/?_wv=1027&k=NofUEYzs)
- Python 3.6
- Pycharm
相关模块的使用 (https://jq.qq.com/?_wv=1027&k=NofUEYzs)
import requests
import re
from tqdm import tqdm
import os
安装Python并添加到环境变量,pip安装需要的相关模块即可。
确定目标需求 (https://jq.qq.com/?_wv=1027&k=NofUEYzs)
既然选择爬取视频了,那肯定优先选择小姐姐的视频呀
懂得都懂~
网页数据分析,找寻数据来源 (https://jq.qq.com/?_wv=1027&k=NofUEYzs)
A站视频是m3u8格式,整个视频分为很多小段,一段对应一个ts文件。
所以只需要找到这个m3u8的数据来源就可以获取所有的ts文件。
url链接的请求参数 pkey 是会改变的。但是这个参数是可以在网页源代码中找到的。包括m3u8的请求链接也是在网页源代码中可以获取的。
整体思路 (https://jq.qq.com/?_wv=1027&k=NofUEYzs)
1、请求视频地址,获取源代码中的m3u8的url地址。
2、请求m3u8的地址,获取所有的ts文件地址
3、保存ts文件并且合并ts文件成mp4视频格式
实现代码 (https://jq.qq.com/?_wv=1027&k=NofUEYzs)
import requests
import re
from tqdm import tqdm
import os
def change_title(title):
pattern = re.compile(r"[\/\\\:\*\?\"\<\>\|]") # '/ \ : * ? " < > |'
new_title = re.sub(pattern, "_", title) # 替换为下划线
return new_title
def get_response(html_url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
response = requests.get(url=html_url, headers=headers)
return response
def save(name, video, title):
path = f'{name}\\'
if not os.path.exists(path):
os.makedirs(path)
with open(path + title + '.ts', mode='wb') as f:
f.write(video)
def get_m3u8_url(html_url):
html_data = get_response(html_url).text
m3u8_url = re.findall('backupUrl(.*?)\"]', html_data)[0].replace('"', '').split('\\')[-2]
title = re.findall('"title":"(.*?)"', html_data)[0]
new_title = change_title(title)
m3u8_data = get_response(m3u8_url).text
m3u8_data = re.sub('#EXTM3U', "", m3u8_data)
m3u8_data = re.sub(r'#EXT-X-VERSION:\d', "", m3u8_data)
m3u8_data = re.sub(r'#EXT-X-TARGETDURATION:\d', "", m3u8_data)
m3u8_data = re.sub(r'#EXT-X-MEDIA-SEQUENCE:\d', "", m3u8_data)
m3u8_data = re.sub(r'#EXT-X-ENDLIST', "", m3u8_data)
m3u8_data = re.sub(r'#EXTINF:\d\.\d,', "", m3u8_data)
m3u8 = m3u8_data.split()
for link in tqdm(m3u8):
ts_url = 'https://tx-safety-video.acfun.cn/mediacloud/acfun/acfun_video/hls/' + link
video = get_response(ts_url).content
ts_title = link.split('?')[0].split('.')[1]
save(new_title, video, ts_title)
print(f'{title}已经下载完成,请验收....')
if __name__ == '__main__':
video_id = input('请输入你要下载的视频ID:')
url = f'认真你就输啦 (?ω?)ノ- ( ゜- ゜)つロ'
print('正在下载请稍后.....')
get_m3u8_url(url)
最简单的合并方式有手就行
python采集A站m3u8视频格式视频的更多相关文章
- 基于python对B站收藏夹按照视频发布时间进行排序
基于python对B站收藏夹按照视频发布时间进行排序 前言 在最一开始,我的B站收藏一直是存放在默认收藏夹中,但是随着视频收藏的越来越多,没有分类的视频放在一起,想在众多视频中找到想要的视频非常困难, ...
- Python 爬虫实例(13) 下载 m3u8 格式视频
Python requests 下载 m3u8 格式 视频 最近爬取一个视频网站,遇到 m3u8 格式的视频需要下载. 抓包分析,视频文件是多个 ts 文件,什么是 ts文件,请去百度 ...
- ffmpeg+Python实现B站MP4格式音频与视频的合并
目录 安装 官网下载 环境变量 验证 ffmpeg的使用 Python实现自动处理 文件结构 番剧缓存结构 常规缓存结构 文件信息 代码 具体代码 代码说明 安装 官网下载 http://ffmpeg ...
- ffmpeg 安装,转视频格式为m3u8,压缩视频
# ffmpegffmpeg 安装,转视频格式为m3u8,压缩视频 ## ffmpeg 安装直接安装: apt-get install ffmpeg 运行 `ffmpeg` 看是否出现版本号以判断是否 ...
- m3u8视频格式分析
“ 学习m3u8格式.” 一段时间之前,乘着某美女CEO的东风,学习了一个新的数据格式,即m3u8格式. 经过一段时间的沉淀,美女CEO的热潮大概已经褪去,今天才对这个格式进行分析,嘻嘻. 先介绍下来 ...
- Vue中如何插入m3u8格式视频,3分钟学会!
大家都知道video只支持ogg.webm.MP4格式,但是要是m3u8格式的视频怎么办?最近遇到这个问题在网上找了好多办法都不行,最后找到video.js后才完美解决,所以决定写一 ...
- 前端播放m3u8格式视频
一.前端播放m3u8格式视频 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta chars ...
- 如何手动写一个Python脚本自动爬取Bilibili小视频
如何手动写一个Python脚本自动爬取Bilibili小视频 国庆结束之余,某个不务正业的码农不好好干活,在B站瞎逛着,毕竟国庆嘛,还让不让人休息了诶-- 我身边的很多小伙伴们在朋友圈里面晒着出去游玩 ...
- 【FFMPEG】各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
目录(?)[-] 编解码学习笔记二codec类型 编解码学习笔记三Mpeg系列Mpeg 1和Mpeg 2 编解码学习笔记四Mpeg系列Mpeg 4 编解码学习笔记五Mpeg系列AAC音频 编解码学习笔 ...
随机推荐
- vue 滚动条样式设置
App.vue 文件下加入下面css // 滚动条宽度 ::-webkit-scrollbar{ width: 6px; } /* 定义滚动条轨道 */ ::-webkit-scrollb ...
- 『现学现忘』Git基础 — 6、Git的操作流程
目录 1.Git的基本操作流程 2.工作区.暂存区.版本库的区别 (1)工作区 (2)版本库 (3)暂存区 (4)通过新增文件理解三个区的关系 (5)说明 1.Git的基本操作流程 初始化一个本地版本 ...
- UnrealEngine创建自定义资产类型
导语 这篇文章记录了将UObject实例保存在Asset文件的方法,用这个方法可以将自定义的UObject数据序列化保存到文件,可以用于自定义UE资源类型. 创建UObject类 这一步比较简单,按照 ...
- SMTP协议解读以及如何使用SMTP协议发送电子邮件
电子邮件协议中POP3协议用于接收邮件,SMTP协议用于发送邮件.SMTP的全称为Simple Mail Transfer Protocol,也就是简单邮件传输协议,字如其名. 相较于POP3而言 ...
- XCTF练习题---MISC---pdf
XCTF练习题---CRYPTO---混合编码解析 flag:flag{security_through_obscurity} 解题步骤: 1.观察题目,下载附件 2.根据题目提示,下载文件,发现是一 ...
- [AcWing 36] 合并两个排序的链表
点击查看代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * L ...
- C#自定义配置文件(一)
C#自定义配置文件 .NET程序中,经常使用Config文件来配置应用程序中经常使用的值,比如数据库连接字符串.最近项目遇到一个需要配置好多节点在配置文件中的需求.为了使配置节点整洁易维护,在代码调用 ...
- axios源码解析 - 请求方法的别名实现
axios中的创建请求方式很多,比如axios(url),axios.get(url),axios.post(url),axios.delete(url),方便快捷的api设计让axios火得一塌糊涂 ...
- DDoS攻击--Syn_Flood攻击防护详解(TCP)
https://blog.csdn.net/qq_34777600/article/details/81946514
- How to fetch data with React Hooks
Where can I make API call with hooks in react? Async useEffect is pretty much unreadable How to fetc ...