吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1010|回复: 8
收起左侧

[求助] 用python练手实现B站单个视频或根据作者专辑下载,报错了

[复制链接]
雪狼湖仔 发表于 2024-12-30 21:30
本帖最后由 雪狼湖仔 于 2024-12-30 21:37 编辑

代码功能概述
  • download_video 函数
    • 用于下载单个视频。
    • 接受视频URL和输出路径作为参数。
    • 使用 you_get 库下载视频,并保存到指定路径。
  • download_album 函数
    • 根据作者名和专辑名下载所有相关视频。
    • 使用 bilibili_api 获取作者信息和视频列表。
    • 过滤出标题中包含专辑名的视频,并逐个下载。
  • main 函数
    • 程序的主入口。
    • 获取用户输入的作者名和专辑名,并根据输入调用相应的下载函数。
  • 异常处理
    • 我在在每个函数中都添加了 try-except 块,用于捕获和处理可能发生的异常。
    同时,B站提供的api也已经正常安装,命令如下:
    [Shell] 纯文本查看 复制代码
    1
    pip show bilibili-api

最终执行打包文件时闪退,报以下错误信息:
[Shell] 纯文本查看 复制代码
1
2
3
4
Traceback (most recent call last):
  File "bilibili_downloader.py", line 2, in <module>
ModuleNotFoundError: No module named 'bilibili_api'
[PYI-42316:ERROR] Failed to execute script 'bilibili_downloader' due to unhandled exception!

问了好几个AI,提供的方法也都照做了,但是还是不行,特来求助


[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import os
from bilibili_api import user, video  # 导入bilibili_api库中的user和video模块
from you_get import common as you_get  # 导入you_get库并重命名为you_get
 
def download_video(url, output_path="downloads"):
    """下载单个视频"""
    try:
        # 检查输出路径是否存在,如果不存在则创建
        if not os.path.exists(output_path):
            os.makedirs(output_path)
        print(f"正在下载: {url}")
        # 使用you_get库下载视频,merge=True表示合并音视频
        you_get.any_download(url, output_dir=output_path, merge=True)
        print(f"下载完成: {url}")
    except Exception as e:
        # 如果下载失败,捕获异常并打印错误信息
        print(f"下载失败: {e}")
 
def download_album(author_name, album_name, output_path="downloads"):
    """根据作者名和专辑名下载所有视频"""
    try:
        # 根据作者名创建User对象
        u = user.User(name=author_name)
        # 获取作者的基本信息
        user_info = u.get_user_info()
        # 获取作者的mid(用户唯一标识)
        mid = user_info['mid']
        print(f"找到作者: {user_info['name']} (MID: {mid})")
 
        # 获取作者的所有视频列表
        videos = user.get_videos(mid)
        # 过滤出标题中包含专辑名的视频
        album_videos = [v for v in videos if album_name in v['title']]
        if not album_videos:
            # 如果没有找到相关视频,提示并退出函数
            print(f"未找到与 '{album_name}' 相关的视频")
            return
 
        # 打印找到的视频列表
        print(f"找到 {len(album_videos)} 个视频:")
        for i, v in enumerate(album_videos):
            print(f"{i + 1}. {v['title']}")
 
        # 遍历视频列表并下载每个视频
        for v in album_videos:
            # 构造视频的完整URL
            video_url = f"https://www.bilibili.com/video/{v['bvid']}"
            # 调用download_video函数下载视频
            download_video(video_url, output_path)
    except Exception as e:
        # 如果下载过程中发生错误,捕获异常并打印错误信息
        print(f"下载失败: {e}")
 
def main():
    """主函数,程序入口"""
    print("欢迎使用B站视频下载工具!")
    # 获取用户输入的作者名
    author_name = input("请输入作者名: ")
    # 获取用户输入的专辑名(可选)
    album_name = input("请输入专辑名(留空则下载单个视频): ")
 
    if album_name:
        # 如果用户输入了专辑名,则下载整个专辑的视频
        download_album(author_name, album_name)
    else:
        # 如果用户未输入专辑名,则下载单个视频
        video_url = input("请输入视频链接: ")
        download_video(video_url)
 
if __name__ == "__main__":
    main()

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

许我浅笑而安 发表于 2024-12-30 21:50
不都告诉你导包错误了吗
许我浅笑而安 发表于 2024-12-30 21:52
要是Pycharm的话在设置-你的项目-然后解释器那点下拉,全部显示把你的lib包路径加进去,要不然你就用绝对路径导包

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
gamingnow + 1 + 1 热心回复!

查看全部评分

DH91 发表于 2024-12-30 22:41
B的下载器到处都是,百花齐放。报错不会是库之类的没有打包进去吧。还是赶紧整整哎呦疼之类的吧。
 楼主| 雪狼湖仔 发表于 2024-12-30 22:46
许我浅笑而安 发表于 2024-12-30 21:52
要是Pycharm的话在设置-你的项目-然后解释器那点下拉,全部显示把你的lib包路径加进去,要不然你就用绝对路径 ...

搞定,灰常感谢啊,确实粗心漏了
bashen9 发表于 2024-12-31 03:11
报错翻译过来就是导包的问题
吖力锅 发表于 2024-12-31 09:41
努力啊哈哈
soyadokio 发表于 2024-12-31 11:08
我看pip上最新的版本是2021/11/24的,居然现在还能用?B站的后端是都裁了吗 (笑哭
qw1960 发表于 2025-1-1 09:35
加油老铁
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2025-8-14 04:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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