爬取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, '保存完成')

讨论数量: 1

能不能活的有价值一点。

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!