赞
踩
嗨喽!大家好,这里是魔王~
Python采集网站视频,下载流媒体m3u8格式视频
- requests >>> pip install requests (数据请求 第三方模块)
- re # 正则表达式 去匹配提取数据
- json
- Python 3.8 解释器
- Pycharm 2021.2 版本 建议
win + R 输入cmd 输入安装命令 pip install 模块名 如果出现爆红 可能是因为 网络连接超时 切换国内镜像源
- 确定目标网站 >>> 爬取网址是什么 数据是什么
- 通过开发者工具进行抓包分析
采集视频
- 先看network下面 media(媒体文件包含视频数据或者音频数据) [如果没有数据]
- 通过数据包数据慢慢分析
如果说url里面包含 ts 后缀 >>> 视频片段 >>> m3u8视频格式 (有专门m3u8文件保存所有ts文件内容)
m3u8 就是把一个整体视频, 分割成很多视频小片段 一个片段只有几秒时间…
(可以更好缓存, 你看多少,他就给加载多少, 减少服务器压力)通过上述分析可以知道 只需要获取m3u8文件, 可以获取所有ts视频片段…
- 发送请求, 对于视频详情页页面发送请求
- 获取数据, 获取网页源代码
- 解析数据, 提取我们想要数据内容 视频信息
- 发送请求, 对于m3u8 url地址发送请求
- 获取数据, 获取返回ts文件内容
- 解析数据, 提取所有ts文件
保存数据, 把视频内容保存本地, 把视频片段合成为一个完整视频
# 导入数据请求模块
import requests # 第三方模块 pip install requests
# 导入正则
import re # 内置模块 不需要安装
# 导入json
import json # 内置模块 不需要安装
# 导入格式化输出模块
import pprint # 内置模块 不需要安装
for page in range(8, 17): # 获取一页视频ID url = '网址' data = { 'quickViewId': 'ac-space-video-list', 'reqID': '1', 'ajaxpipe': '1', 'type': 'video', 'order': 'newest', 'page': page, 'pageSize': '20', 't': '1648129818743', } headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36' } response_1 = requests.get(url=url, params=data, headers=headers) video_ids = re.findall('ac(\d+)', response_1.text) for video_id in video_ids: """ 1. 发送请求, 对于视频详情页页面发送请求 https://www.acfun.cn/v/ac34063499 I. 确定请求网址 II. 确定请求方式 III. 如何实现伪装 如何防止被反爬 user-agent: 用户代理 表示浏览器基本身份信息 在开发者工具里面直接复制 等号左边都是自定义变量 (见名知意) """ url = f'https://www.acfun.cn/v/ac{video_id}' headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36' } # 通过requests这个模块里面get请求方式, 对于url地址发送请求, 并且携带上headers请求头, 最后用自定义变量response接收返回数据 response = requests.get(url=url, headers=headers) # <Response [200]> 表示对象 200状态码表示请求成功 # 2. 获取数据, 获取网页源代码 response.text 获取响应文本数据(字符串数据) # print(response.text) """ 3. 解析数据, 提取我们想要数据内容 视频信息 正则表达式 可以直接对于字符串数据进行提取解析 re.findall() 找到所有, 找数据 >>> 找什么样数据, 从哪里找数据 防止有一种情况, 我们想要数据中间, 突然出现一个分号 css 根据标签属性内容提取数据 xpath 根据标签节点提取数据 re 直接提取字符串数据 """ html_data = re.findall('window.pageInfo = window.videoInfo = (.*)', response.text)[0].replace(';', '') json_data = json.loads(html_data) # print(json_data) # pprint.pprint(json_data) # json_data 字典数据类型, 就可以根据键值对取值 根据冒号左边的内容(键) 提取冒号右边的内容(值) title = json_data['title'] # 提取视频标题 m3u8_url = json.loads(json_data['currentVideoInfo']['ksPlayJson'])['adaptationSet'][0]['representation'][0]['backupUrl'][0] m3u8_data = requests.get(url=m3u8_url, headers=headers).text # print(m3u8_data) m3u8_data = re.sub('#E.*', '', m3u8_data).split() # split() 字符串分割 返回列表数据 for ts in m3u8_data: ts_url = '/'.join(m3u8_url.split('/')[:-1]) + '/' + ts print(ts_url) # ts_url = 'https://tx-safety-video.acfun.cn/mediacloud/acfun/acfun_video/hls/' + ts # ts_url_1 = 'https://tx-safety-video.acfun.cn/mediacloud/acfun/acfun_video/' + ts # https://tx-safety-video.acfun.cn/mediacloud/acfun/acfun_video/hls/ ts_content = requests.get(url=ts_url, headers=headers).content # ab 以二进制数据追加保存不会覆盖 wb 二进制数据保存 会覆盖 with open(title + '.mp4', mode='ab') as f: # as f.write(ts_content) print(title, '视频保存成功', url)
更多资源、解答可点击
【python】采集优质阿婆主全部视频~下载流媒体m3u8格式
好了,我的这篇文章写到这里就结束啦!
有更多建议或问题可以评论区或私信我哦!一起加油努力叭(ง •_•)ง
喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。