基本开发环境 (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视频格式视频的更多相关文章

  1. 基于python对B站收藏夹按照视频发布时间进行排序

    基于python对B站收藏夹按照视频发布时间进行排序 前言 在最一开始,我的B站收藏一直是存放在默认收藏夹中,但是随着视频收藏的越来越多,没有分类的视频放在一起,想在众多视频中找到想要的视频非常困难, ...

  2. Python 爬虫实例(13) 下载 m3u8 格式视频

    Python  requests  下载  m3u8 格式    视频 最近爬取一个视频网站,遇到  m3u8 格式的视频需要下载. 抓包分析,视频文件是多个  ts 文件,什么是 ts文件,请去百度 ...

  3. ffmpeg+Python实现B站MP4格式音频与视频的合并

    目录 安装 官网下载 环境变量 验证 ffmpeg的使用 Python实现自动处理 文件结构 番剧缓存结构 常规缓存结构 文件信息 代码 具体代码 代码说明 安装 官网下载 http://ffmpeg ...

  4. ffmpeg 安装,转视频格式为m3u8,压缩视频

    # ffmpegffmpeg 安装,转视频格式为m3u8,压缩视频 ## ffmpeg 安装直接安装: apt-get install ffmpeg 运行 `ffmpeg` 看是否出现版本号以判断是否 ...

  5. m3u8视频格式分析

    “ 学习m3u8格式.” 一段时间之前,乘着某美女CEO的东风,学习了一个新的数据格式,即m3u8格式. 经过一段时间的沉淀,美女CEO的热潮大概已经褪去,今天才对这个格式进行分析,嘻嘻. 先介绍下来 ...

  6. Vue中如何插入m3u8格式视频,3分钟学会!

    ​        大家都知道video只支持ogg.webm.MP4格式,但是要是m3u8格式的视频怎么办?最近遇到这个问题在网上找了好多办法都不行,最后找到video.js后才完美解决,所以决定写一 ...

  7. 前端播放m3u8格式视频

    一.前端播放m3u8格式视频 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta chars ...

  8. 如何手动写一个Python脚本自动爬取Bilibili小视频

    如何手动写一个Python脚本自动爬取Bilibili小视频 国庆结束之余,某个不务正业的码农不好好干活,在B站瞎逛着,毕竟国庆嘛,还让不让人休息了诶-- 我身边的很多小伙伴们在朋友圈里面晒着出去游玩 ...

  9. 【FFMPEG】各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式

    目录(?)[-] 编解码学习笔记二codec类型 编解码学习笔记三Mpeg系列Mpeg 1和Mpeg 2 编解码学习笔记四Mpeg系列Mpeg 4 编解码学习笔记五Mpeg系列AAC音频 编解码学习笔 ...

随机推荐

  1. vue 滚动条样式设置

      App.vue 文件下加入下面css   // 滚动条宽度 ::-webkit-scrollbar{   width: 6px; } /* 定义滚动条轨道 */ ::-webkit-scrollb ...

  2. 『现学现忘』Git基础 — 6、Git的操作流程

    目录 1.Git的基本操作流程 2.工作区.暂存区.版本库的区别 (1)工作区 (2)版本库 (3)暂存区 (4)通过新增文件理解三个区的关系 (5)说明 1.Git的基本操作流程 初始化一个本地版本 ...

  3. UnrealEngine创建自定义资产类型

    导语 这篇文章记录了将UObject实例保存在Asset文件的方法,用这个方法可以将自定义的UObject数据序列化保存到文件,可以用于自定义UE资源类型. 创建UObject类 这一步比较简单,按照 ...

  4. SMTP协议解读以及如何使用SMTP协议发送电子邮件

    电子邮件协议中POP3协议用于接收邮件,SMTP协议用于发送邮件.SMTP的全称为Simple Mail Transfer Protocol,也就是简单邮件传输协议,字如其名.   相较于POP3而言 ...

  5. XCTF练习题---MISC---pdf

    XCTF练习题---CRYPTO---混合编码解析 flag:flag{security_through_obscurity} 解题步骤: 1.观察题目,下载附件 2.根据题目提示,下载文件,发现是一 ...

  6. [AcWing 36] 合并两个排序的链表

    点击查看代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * L ...

  7. C#自定义配置文件(一)

    C#自定义配置文件 .NET程序中,经常使用Config文件来配置应用程序中经常使用的值,比如数据库连接字符串.最近项目遇到一个需要配置好多节点在配置文件中的需求.为了使配置节点整洁易维护,在代码调用 ...

  8. axios源码解析 - 请求方法的别名实现

    axios中的创建请求方式很多,比如axios(url),axios.get(url),axios.post(url),axios.delete(url),方便快捷的api设计让axios火得一塌糊涂 ...

  9. DDoS攻击--Syn_Flood攻击防护详解(TCP)

    https://blog.csdn.net/qq_34777600/article/details/81946514

  10. 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 ...