一、数据来源分析
1.明确需求
明确采集的网站以及数据内容
- 网站:(www.acfun.cn/v/ac3656470…)
- 数据:视频内容、视频标题
- 格式:m3u8流媒体文件
2.抓包分析
- 开发者工具
- 刷新网页
- 关键字查找对应数据
正常视频网站
1. 开发者工具 ————》 网络 ————》媒体 ————》查看对应视频链接地址
2.以链接一段参数进行搜索 ————》分析视频链接所在
m3u8流媒体
在流媒体文件中查找到视频标题,请求网址为www.acfun.cn/v/ac3656470…
二、代码
import requests
import re
import json
from pprint import pprint
# 导入进度条模块
from tqdm import tqdm
# 模拟浏览器
headers = {
'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0'
}
# 请求网址
url = 'https://www.acfun.cn/v/ac36564705'
# 发送请求
response = requests.get(url = url, headers=headers)
# 获取数据
html = response.text
# 响应的文本数据
# re.findall(r'<h1 class="title"><span>《****》第二十九天。***视角。</span></h1>')
# 提取标题
title = re.findall(r'<h1 class="title"><span>(.*?)</span></h1>',html)[0]
#print(title)
# 提取视频信息
info = re.findall(r'window.videoInfo = (.*?);',html)[0]
# 将json字符串转换json字典
json_data = json.loads(info)
#pprint(json_data)
# 提取m3u8链接地址
m3u8_url = json.loads(json_data['currentVideoInfo']['ksPlayJson'])['adaptationSet'][0]['representation'][0]['url']
#pprint(m3u8_url)
# 对于m3u8链接发送请求,获取文本数据
m3u8 = requests.get(url = m3u8_url, headers=headers).text
# 提取ts片段
ts_list = re.findall(',\n(.*?)\n#',m3u8)
#print(ts_list)
print('开始下载视频',title)
# 循环遍历,提取元素
for ts in tqdm(ts_list):
# 拼接ts片段的完整链接
ts_url = 'https://ali-safety-video.acfun.cn/mediacloud/acfun/acfun_video/' + ts
# 发送请求,获取ts片段
#print(ts_url)
# 获取视频片段内容
ts_content = requests.get(url = ts_url, headers=headers).content
# 保存视频片段
with open(r'D:\learn\爬取小姐姐视频\video' + title + '.mp4','ab') as f:
f.write(ts_content)
三、总结
爬取数据内容,只可以爬取单个视频,想要获取更多需要将其他网页内容页获取,后续继续补充代码。