前言
大家早好、午好、晚好吖 ❤ ~欢迎光临本文章
环境使用:
-
Python 3.8
-
Pycharm 专业版
模块使用:
-
import requests >>> pip install requests
-
import re 正则表达式 解析数据
-
import json
基本步骤去实现
一. 数据来源分析
-
通过开发者工具进行抓包分析, 分析我们想要采集数据可以请求那个链接地址得到
m3u8格式是什么样的?
会把完整内容, 分割为N个视频片段<ts文件>
所有片段, 都会保存在 m3u8 文件里面
-
找m3u8链接地址 --> 通过搜索直接可以找
二. 代码实现步骤: 基本四大步骤: 发送请求 获取数据 解析数据 保存数据
-
发送请求
-
获取数据
获取: 网页源代码
-
解析数据
提取: 标题 + m3u8链接地址
-
发送请求
请求: m3u8链接地址
-
获取数据
获取: m3u8文件内容
-
解析数据
提取: 所有ts片段
-
保存数据
保存所有片段, 合并成完整内容
代码展示
# 导入数据请求模块 第三方模块, 需要安装 pip install requests
import requests
# 导入正则表达式模块 内置模块
import re
# 导入json
import json
# 导入格式化输出模块
from pprint import pprint
def get_response(html, data=None):
# 伪装浏览器
headers = {
'Referer': 'https://*****',
# User-Agent 用户代理 表示浏览器基本身份信息
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
# 发送请求
response = requests.get(url=html, params=data, headers=headers)
return response
def get_m3u8_data(html):
html_data = get_response(html).text
title = re.findall('"title":"(.*?)"', html_data)[1]
# 提取视频信息: 请问 html_data 是什么数据类型 答案: 字符串
html_data = re.findall('window.pageInfo = window.videoInfo = (.*?);', html_data)[0]
# 转成字典数据类型
# 完整源码、教程、资料加V:qian97378免费获取
json_data = json.loads(html_data)
# 字典取值
video_url = \
json.loads(json_data['currentVideoInfo']['ksPlayJson'])['adaptationSet'][0]['representation'][0]['backupUrl'][0]
"""
4.发送请求
请求: m3u8链接地址
5.获取数据
获取: m3u8文件内容
"""
# 获取m3u8_data数据
m3u8_data = get_response(video_url).text
# 把没有必要的内容替换, split分割
m3u8_data = re.sub('#E.*', '', m3u8_data).split()
return title, m3u8_data
def save(ts_url, title):
# 请求ts链接获取二进制数据
ts_content = get_response(ts_url).content
"""
7.保存数据
保存所有片段, 合并成完整内容
"""
with open('video\\' + title + '.mp4', mode='ab') as f:
# 写入数据
f.write(ts_content)
print(ts_url)
def get_ac(page):
url = 'https://*****/u/29946310'
data = {
完整源码、教程、资料加V:qian97378免费获取
'quickViewId': 'ac-space-video-list',
'reqID': '1',
'ajaxpipe': '1',
'type': 'video',
'order': 'newest',
'page': page,
'pageSize': '20',
't': '1687179435071',
}
ac_data = get_response(html=url, data=data).text
video_id_list = re.findall('"atomid.*?:.*?"(\d+).*?"', ac_data)
return video_id_list
def main(ac):
link = f'https://****/v/ac{ac}'
title, m3u8_data = get_m3u8_data(html=link)
ts_url_list = ['https://ali-safety-video.*****cn/mediacloud/acfun/acfun_video/' + ts for ts in m3u8_data]
for ts_url in ts_url_list:
save(ts_url, title)
if __name__ == '__main__':
# for page in range(1, 30):
# video_id_list = get_ac(page)
# for video_id in video_id_list:
# main(ac=video_id)
import subprocess
word = input('请输入你想要下载地址: ')
cmd = f'you-get {word}'
subprocess.run(cmd)
尾语 💝
好了,今天的分享就差不多到这里了!
完整代码、更多资源、疑惑解答直接点击下方名片自取即可。
对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง
喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!