HFrost0 / bilix

⚡️Lightning-fast async download tool for bilibili and more
Apache License 2.0
1.64k stars 168 forks source link

关于视频中的附属数据下载 #40

Closed aleeyangfu closed 2 years ago

aleeyangfu commented 2 years ago

您好,请问可以在批量下载视频的同时,爬取对应个视频的数据(如,弹幕数量,播放量,投币数据,视频的url,转发,收藏量..)吗?

HFrost0 commented 2 years ago

技术上可行,但目前主要功能专注于下载视频及其附属文件(弹幕,字幕等)

HFrost0 commented 2 years ago

或许未来添加一个--meta选项来保存相关元数据

aleeyangfu commented 2 years ago

感谢回复,期待有进一步功能增加。还有个问题,请问作者。 在下载视频的时候,有变量是表示视频的具体链接或者稿件aid(av号,哔哩哔哩对每个视频都有av号) 我感觉自己可以试试增加这个功能,如果可以获取到具体的视频链接或者稿件的aid. 我是个新手哈哈,有很多地方不懂,忘作者不吝赐教~

HFrost0 commented 2 years ago

@aleeyangfu 感谢你对本项目的关注👋,对你的这个问题我不是很理解,或许bilix.api.bilibili模块中的代码可供你参考,你提到的点赞数等信息其实api模块中的某些方法已经获取到了,只是没有对其进行解析和保存,所以这个功能在你理解bilix整个项目的基本框架之后应该是很容易添加的,如果有意自己实现,可以参考开发文档

aleeyangfu commented 2 years ago

嗯呢感谢知道。我的目的是批量下载b站的视频,并在下载b站每个视频的同时获取视频对应的链接,播放量,投币量等数据。我会认真阅读您提供的开发文档。感谢您的帮助

aleeyangfu commented 2 years ago

大佬,求帮助。我是爬虫小白。您可以告诉我bilix.api.bilibili模块中哪个语句(变量)可以获取点赞,播放量这些属性吗?或者您可以给一个可以参考的链接吗?

aleeyangfu commented 2 years ago

大佬,求帮助。我是爬虫小白。您可以告诉我bilix.api.bilibili模块中哪个语句(变量)可以获取点赞,播放量这些属性吗?或者您可以给一个可以参考的链接吗? 已经使用这个仓库解决 https://github.com/wolfbolin/BiliUtil

aleeyangfu commented 2 years ago

还有个问题(0-0),大佬 目前可以根据关键字进行批量下载吗

HFrost0 commented 2 years ago

鉴于你可能是刚接触python或者爬虫这一块,我大概讲一下b站的这些信息如何获取。 在bilix.api.bilibili模块中的get_video_info会请求b站前端页面,拿到前端html之后,b站对于该视频的基本信息都位于一个script标签内,对应代码

async def get_video_info(client: httpx.AsyncClient, url) -> VideoInfo:
    res = await req_retry(client, url, follow_redirects=True)  # 请求前端页面
    init_info = re.search(r'<script>window.__INITIAL_STATE__=({.*});\(', res.text).groups()[0]  # 搜索信息
    init_info = json.loads(init_info)   # 解析信息

其中点赞,硬币等信息位于

>>> init_info['videoData']['stat']

{'aid': 899323079,
 'view': 786358,
 'danmaku': 3983,
 'reply': 842,
 'favorite': 2070,
 'coin': 4231,
 'share': 1879,
 'now_rank': 0,
 'his_rank': 0,
 'like': 26448,
 'dislike': 0,
 'evaluation': '',
 'argue_msg': '',
 'viewseo': 786358}

bilix对于这部分信息没有做任何处理,所以get_video_info的返回值中没有相关信息,所以你应当改写这个函数,使其返回这些信息,而在硬盘中保存这些信息的流程应当在downloader中去做。

已经使用这个仓库解决 https://github.com/wolfbolin/BiliUtil

bilix中所有跟网络请求相关的api方法都应当是async def的,并且第一个参数为httpx的AsyncClient实例对象,并且方法中使用该client进行网络请求,这保证了整体的统一性(对于cookie, header等东西的处理)以及对异步的支持(bilix最重要的特性优点),所以我不推荐你使用第三方api库,使用第三方库的pull request在不满足上述条件的情况下也不会被接受。推荐自己写api,这样才能保证性能最优。

另外,如果你的async技术不熟悉,我认为这属于python中较新也较为困难的内容,只有在对async有基本的认识的情况下才能理解这些设计原则,所以如果你还是新手的话暂时不建议在bilix上花过多时间,而是基础打牢,学习html,js,正则表达式,json等等最基础的知识,当你这些都融会贯通后再看看asyncio,学会后会发现bilix很简单。

HFrost0 commented 2 years ago

还有个问题(0-0),大佬 目前可以根据关键字进行批量下载吗

如果你说的是全站搜索功能的话,我曾经也想做过,但是应该没什么人用所以放弃了

aleeyangfu commented 2 years ago

好的 感谢大佬!!!

HFrost0 commented 8 months ago

provided in 1.0a5