爬取A站视频练练手,做笔记
爬取A站视频下载到本地,做个笔记直接上代码了
import requests
import re
import json
import os
from tqdm import tqdm
# 要爬取的视频地址
url = 'https://www.acfun.cn/v/ac37398137'
# 仿造一个header头
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.42"
}
# 请求地址
html_data = requests.get(url=url, headers=headers)
# 视频标题
title = re.findall('<title >(.*?) - AcFun弹幕视频网 - 认真你就输啦 \(\?ω\?\)ノ- \( ゜- ゜\)つロ</title>', html_data.text)[0]
# 下载的视频存储到 对应的标题中
filename = f'{title}\\'
# 没有此文件夹直接创建
if not os.path.exists(filename):
os.mkdir(filename)
# 匹配视频信息 并转为json 进行解析
videoInfo = re.findall('window.pageInfo = window.videoInfo = (.*?);', html_data.text)[0]
videoInfoJson = json.loads(videoInfo)
ksPlayJson = json.loads(videoInfoJson['currentVideoInfo']['ksPlayJson'])
# 解析后的m3u8 地址
m3u8_url = ksPlayJson['adaptationSet'][0]['representation'][0]['backupUrl'][0]
# 请求m3u8地址并获取数据
m3u8_data = requests.get(url=m3u8_url, headers=headers).text
# 使用re.sub 进行替换
m3u8_data = re.sub('#EXTM3U', '', m3u8_data)
m3u8_data = re.sub('#EXT-X-VERSION:\d', '', m3u8_data)
m3u8_data = re.sub('#EXT-X-TARGETDURATION:\d', '', m3u8_data)
m3u8_data = re.sub('#EXT-X-MEDIA-SEQUENCE:\d', '', m3u8_data)
m3u8_data = re.sub('#EXTINF:\d.\d+,', '', m3u8_data)
m3u8_data = re.sub('#EXT-X-ENDLIST', '', m3u8_data).split()
# 从m3u8 url 中匹配 ts url
ts_url = re.findall('(.*?).m3u8', m3u8_url)[0]
# 加入tqdm 在下载时 显示进度条
for index in tqdm(m3u8_data):
indexSplit = index.split('.')
ts_name = indexSplit[1]
ts_suffix = indexSplit[2]
# ts 完整路径
ts_full_url = ts_url + '.' + ts_name + '.' + ts_suffix
# 请求ts 完整URL
ts_content = requests.get(url=ts_full_url, headers=headers).content
# 进行保存数据
with open(filename + title+'.mp4', mode='ab') as f:
f.write(ts_content)
print(title, '保存完成')
能不能活的有价值一点。