吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 808|回复: 3
收起左侧

[学习记录] 批量下载B站视频

[复制链接]
tinyzimu 发表于 2024-3-28 14:53
[Python] 纯文本查看 复制代码
import json
import os
import re

import requests
from lxml import etree

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
    'referer': 'https://www.bilibili.com/'
}



def downloadVideoAudio(file_name,url):
    # 获取页面源码
    page_source = requests.get(url, headers=headers).text
    html = etree.HTML(page_source)
    # 解析出标题
    title = html.xpath('//*[@id="viewbox_report"]/h1/text()')[0]
    # 使用正则表达式匹配出视频数据JSON,并解析出视频地址和声音地址
    json_text = re.findall('window.__playinfo__=(.*?)</script>', page_source)[0]
    data = json.loads(json_text)
    video_url = data['data']['dash']['video'][0]['baseUrl']
    audio_url = data['data']['dash']['audio'][0]['baseUrl']
    #     下载视频和声音
    if not os.path.exists(f'./videos/{dir_name}/'):
        os.makedirs(f'./videos/{dir_name}/')
    print(f"正在下载视频{file_name}")
    content = requests.get(video_url, headers=headers).content
    video_file=f"./videos/{file_name}.mp4"
    with open(video_file, "wb") as f:
        f.write(content)
    print(f"正在下载音频{file_name}")
    content = requests.get(audio_url, headers=headers).content
    audio_file=f"./videos/{file_name}.mp3"
    with open(audio_file, "wb") as f:
        f.write(content)
    out_video_file=f"./videos/{dir_name}/{file_name}.mp4"
    mergeVideoAndAudio(video_file,audio_file,out_video_file)
    #删除下载的音频和视频文件
    os.remove(video_file)
    os.remove(audio_file)
def mergeVideoAndAudio(video,audio,out_video):
    print(f"ffmpeg -i {video} -i {audio} {out_video}")
    os.system(f'ffmpeg -i "{video}" -i "{audio}" "{out_video}"')



dir_name="高斯数学动画"
url="https://www.bilibili.com/video/BV15y4y1Z7nn"

page_source = requests.get(url, headers=headers).text
json_text = re.findall('window.__INITIAL_STATE__=(.*?);\(function\(\)', page_source)[0]
pages=json.loads(json_text)["videoData"]["pages"]

for i in range(1,len(pages)):
    file_name = pages[i-1]['part']
    downloadVideoAudio(file_name,f"{url}?p={i}")

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
lyn2018 + 1 + 1 谢谢@Thanks!
爱飞的猫 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

nbwww 发表于 2024-3-30 18:59
本帖最后由 nbwww 于 2024-3-30 19:20 编辑

学习了    可以下载了
heart8619 发表于 2024-4-14 14:38
LittiePang 发表于 2024-4-16 11:35
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 14:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表