🍀我是谁?🍀
常用名: MoyuScript
爱好: 🎵编曲、👨💻编程、🎮ACG、🐟摸鱼、♀︎炼铜
职业: 灵活就业人员
长期目标: 💤摆烂
活跃平台: 哔哩哔哩、GitHub、 网易云音乐(音乐人)、 知乎、 YouTube
个人主页: 👉 摸鱼小站 👈
纵使那是铺满火的道路,也要欢歌前行。
哔哩哔哩的API调用模块
Home Page: https://bili.moyu.moe
License: GNU General Public License v3.0
我尝试爬取视频的评论,但是发现有一些评论被吞了。
import bilibili_api
a = bilibili_api.video.get_comments(bvid='BV13E411p7pu') # 当时实际评论数为9865
len(a) # 7618
如果是一些评论数比较少的,就不会出现这个问题,
from bilibili_api.user import UserInfo
from bilibili_api import Verify
from bilibili_api.video import VideoOperate
from bilibili_api.video import VideoInfo
video_info = VideoInfo(bvid=BV号,verify=Verify(sessdata=, csrf=))
a=video_info.get_media_list()
print(a)
video_info = VideoOperate(bvid=BV号,verify=Verify(sessdata=, csrf=))
print(video_info)
video_info.like(1)
video_info.favorite(media_list=["id号"],mode=1)
其中like功能可以正常使用,而favorite功能报错
Traceback (most recent call last):
File "D:/python/Python37-32/bili007.py", line 11, in
video_info.favorite(media_list=[""],mode=1)
File "D:\python\Python37-32\lib\site-packages\bilibili_api\src\video.py", line 407, in favorite
post()
File "D:\python\Python37-32\lib\site-packages\bilibili_api\src\utils.py", line 176, in call
raise exception.BiliException(con["code"], con["message"])
bilibili_api.src.exception.BiliException: 返回code不为0。错误代码:-400, 信息:请求错误
不知道是哪里出问题了,大佬可以帮忙看下吗
因为确实是看到 https://github.com/Passkou/bilibili_api/blob/690d98d6b041910eab71c8e9900f7a261288b03d/bilibili_api/src/dynamic.py#L281 那边的 560 是 Hardcode 进去的
我在一个 2000 转发的动态里,如果把 560 去掉,能得到 618 条信息,但还是没办法得到所有的转发
即使是在网页里滚到”没有更多啦(〜 ̄△ ̄)〜“也拿不到 T.T
也在一些讨论自制 JS 脚本抽奖的文章里看到非官方途径是不可能拿到所有转发信息
我就好奇是否 Bilibili 确实不允许获取所有转发情况……不能的话会不会很对不起没有走非官方抽奖途径的用户 0.0
【提问】
版本:bilibili-api 2.1.2
我在使用以下代码(简化过的)时获得的数据只有一个{},想问问这是怎么回事(我是萌新)
from bilibili_api import user
uid = 114514
x = user.get_up_info(uid=uid)
print(x)
输出:
{}
能不能麻烦给个例子?
get_videos_g()方法中用迭代器生成对象。怎么获取投稿视频详细信息,如封面ur和描述l等。
希望能写个文档或者定义一下用法。
类型:建议
版本:V2
我想要个设置分组的接口可以吗qwq
类型:提问
版本:2.1.4
作者大大,有没有好用的代理,今天一直被B站屏蔽,而且就只是循环爬取10个视频的评论而且。
我翻了下API,没法获取动态列表啊,就是自己关注的人的最近动态列表
类型:提问
版本:2.1.2
您好,我试着用LiveDanmaku类的wss连接弹幕服务器功能做一个开播提醒工具,因为connect_all_livedanmaku是阻塞的所以用thread开了个子线程跑,但是通过该观察log发现经常有
[WARNING] 连接被断开
的记录。
想问一下默认情况下wss连接被断开以后会有重连操作吗?如果希望他重连的话应该如何调整调用方法呢?
调试用程序代码:
import sqlite3
import threading
import asyncio
from bilibili_api import user, live, Verify
from bilibili_api.live import LiveDanmaku
from functools import partial
def initialize_room_wss():
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
db_conn = sqlite3.connect("rec.db")
db = db_conn.cursor()
room_id_list = list(db.execute("select caster_id, caster_room_id from on_air"))
rooms = []
if (len(room_id_list)>0):
for i in range(len(room_id_list)):
rooms.append(LiveDanmaku(room_id_list[i][1]))
rooms[i].add_event_handler("LIVE",partial(notify_onair,userid=room_id_list[i][0]))
rooms[i].add_event_handler("PREPARING",partial(notify_offair,userid=room_id_list[i][0]))
live.connect_all_livedanmaku(*rooms)
wss = threading.Thread(target=initialize_room_wss)
wss.start()
类型:需求
版本:2.1.2
能不能实现 “获取用户的视频总浏览数和观看总时间” 呢?
原来一切正常,在没有改代码的前提下,突然有一天之后无法发动态。
同样的代码,借一个其他账号一切正常。
如果返回的数据没有code关键词就会报错
【提问】
版本:bilibili-api 2.1.2
怎么样获取一个用户的粉丝数啊,有方法吗?
P大,想用您的API爬数据,第一步就报错了,看了很久也不知道是哪里出了问题。我是初学者,基本的Python语法都不熟,如果有些低级错误请见谅。
from bilibili_api import Verify
from bilibili_api.video import VideoInfo
from bilibili_api.video import Danmaku
verify = Verify(sessdata="6b49d6ef..........", csrf="a2e7f2dc44............")
video_info = VideoInfo(bvid="BV1gC4y1h722", verify=verify)
danmu = video_info.get_danmaku()
for i in danmu:
print(i.text)
报错是这样的:
File "", line 1
from bilibili_api import Verify
^
SyntaxError: invalid character in identifier
海外党想翻墙回去看
打算国内部署台vps翻墙回去
from bilibili_api import video, Verify,bangumi
......
comments=bangumi.get_short_comments(season_id=bangumi.get_meta(media_id=md)['media']['season_id'])
#AttributeError: module 'bilibili_api.bangumi' has no attribute 'get_short_comments'
输入:
from bilibili_api import video
v = video.get_danmaku("BV1e7411o7GG")
print(v)
输出:
[]
要获取一个bv/av号下的所有评论该怎么做
类型:提问
版本:2.1.4
使用的Python版本:3.7.7
先给老哥点个赞👍。
10月9号晚上的时候,在使用中get_comments函数爬取评论的时候遇到了网络错误,错误代码412的问题。之前没遇到过,这是B站的问题么?
Traceback (most recent call last):
File "d:/专业综合实训/test.py", line 3, in <module>
text = video.get_comments(bvid=Bvid)
File "D:\python37\lib\site-packages\bilibili_api\video.py", line 486, in get_comments
replies = common.get_comments(aid, "video", order, limit, callback, verify)
File "D:\python37\lib\site-packages\bilibili_api\common.py", line 171, in get_comments
resp = get_comments_raw(oid=oid, pn=page, order=order, verify=verify, type_=type_)
File "D:\python37\lib\site-packages\bilibili_api\common.py", line 148, in get_comments_raw
resp = utils.get(api["url"], params=params, cookies=verify.get_cookies())
File "D:\python37\lib\site-packages\bilibili_api\utils.py", line 400, in get
resp = request("GET", url=url, params=params, cookies=cookies, headers=headers, **kwargs)
File "D:\python37\lib\site-packages\bilibili_api\utils.py", line 387, in request
raise exceptions.NetworkException(req.status_code)
bilibili_api.exceptions.NetworkException: 网络错误。状态码:412
用大佬项目爬收藏夹的时候发现有一些视频无法获取下载链接
比如这个
https://www.bilibili.com/video/av413587
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/mnt/d/Code/bilibili_tool/.venv/lib/python3.6/site-packages/bilibili_api/src/video.py", line 173, in get_playurl
self.__get_self_info()
File "/mnt/d/Code/bilibili_tool/.venv/lib/python3.6/site-packages/bilibili_api/src/video.py", line 29, in __get_self_info
self.info = self.get_video_info()
File "/mnt/d/Code/bilibili_tool/.venv/lib/python3.6/site-packages/bilibili_api/src/video.py", line 40, in get_video_info
self.info = get()
File "/mnt/d/Code/bilibili_tool/.venv/lib/python3.6/site-packages/bilibili_api/src/utils.py", line 143, in __call__
raise exception.BiliException(con["code"], con["message"])
bilibili_api.src.exception.BiliException: 返回code不为0。错误代码:-403, 信息:访问权限不足
类型:建议
版本:v3
B站最近搞出了个给弹幕点赞的功能,不知道可不可以加进来?
I got the following error:
danmuku = my_video.get_history_danmaku(date="2020-08-01", page=0)
Traceback (most recent call last):
File "", line 1, in
File "D:\Anaconda\envs\pytorch\lib\site-packages\bilibili_api\src\video.py", line 119, in get_history_danmaku
con = req.content.decode("utf-8")
File "D:\Anaconda\envs\pytorch\lib\xml\dom\minidom.py", line 1968, in parseString
return expatbuilder.parseString(string)
File "D:\Anaconda\envs\pytorch\lib\xml\dom\expatbuilder.py", line 925, in parseString
return builder.parseString(string)
File "D:\Anaconda\envs\pytorch\lib\xml\dom\expatbuilder.py", line 223, in parseString
parser.Parse(string, True)
xml.parsers.expat.ExpatError: not well-formed (invalid token): line 1, column 0
想用类区分一下监听不同的房间,不知道此处开头的self会不会影响到数据传递?
请问如何实现多个用户同时登陆?
很奇怪把video_info.get_playurl()
放在video_info.get_video_info()
后面就会报错
from bilibili_api import video
video_info = video.VideoInfo(44566179)
print(video_info.get_video_info())
print(video_info.get_playurl())
Traceback (most recent call last):
File "./text1.py", line 6, in <module>
print(video_info.get_playurl())
File "/mnt/d/Code/bilibili_tool/.venv/lib/python3.6/site-packages/bilibili_api/src/video.py", line 174, in get_playurl
if page + 1 > len(self.info["pages"]):
TypeError: 'Get' object is not subscriptable
类型:需求
版本:2.1.4
有办法获取单个视频的日观看量或观看时间索引吗?
谢谢!
b站使用新的BV号,有时间更新一下BV号api嘛?
基本按照文档的调用方法
from bilibili_api.live import LiveDanmaku
from bilibili_api import Verify
veri = Verify('xxxxxx', 'xxxxxxx')
danmu = LiveDanmaku(room_display_id=xxxxx, debug=True, verify=veri)
@danmu.on("DANMU_MSG")
async def on_danmu(msg):
print(msg)
if __name__ == "__main__":
danmu.connect()
因为打开了debug, debug信息如下
正在获取真实房间号
获取成功,真实房间号:xxxx
正在获取聊天服务器配置
聊天服务器配置获取成功
准备连接直播间
正在尝试连接主机: wss://tx-gz-live-comet-03.chat.bilibili.com:443/sub
连接主机成功, 准备发送认证信息
紧接着就出错了, 具体的Traceback如下:
Traceback (most recent call last):
File "main.py", line 17, in <module>
danmu.connect()
File "/home/reina/.local/lib/python3.6/site-packages/bilibili_api/live.py", line 403, in connect
loop.run_until_complete(self.__main())
File "/usr/lib/python3.6/asyncio/base_events.py", line 484, in run_until_complete
return future.result()
File "/home/reina/.local/lib/python3.6/site-packages/bilibili_api/live.py", line 444, in __main
await self.__loop()
File "/home/reina/.local/lib/python3.6/site-packages/bilibili_api/live.py", line 456, in __loop
asyncio.create_task(self.__heartbeat())
AttributeError: module 'asyncio' has no attribute 'create_task'
请问该如何解决?
顺带一提, 好像现在直播房间的real_id和display_id一样了(不大确定)
如果能解答的话就太感谢了!
exception返回的message就是bilibili_api.src.exception.BiliException: 返回code不为0。错误代码:-111, 信息:csrf 校验失败
可以获取视频的信息,但是不能三连或者弹幕。不知道是我太蠢还是b站不给力😂
各位好!我是这个项目的发起者Passkou。
首先感谢大家使用这个模块,也感谢众多贡献者们对这个项目作出贡献。截至目前这个项目已经获得了370+的stars,这是我第一个在Github和pip上发布的项目,是大家的共同努力才让这个项目变得更完善的,在此我非常感谢大家对这个项目的支持!
因我学业繁忙,加上最近在深入研究前端技术,所以这个项目的更新频率会放缓了,在此我向大家表示歉意。
关于本模块,目前常用的功能基本都已经覆盖,如果大家还有什么需要的功能,还请尽量自己实现,你也可以给这个仓库发pull request来加入你自己写的功能。如果在开发过程中有任何不明白之处欢迎发Issue垂询!我很乐意解答大家在技术上的各种问题!
如有措辞不当还请见谅,感谢大家一如既往的支持!
我最近用这个api+tkinter写了一个小的三连GUI玩具,但是cookie的获取还是比较麻烦。可不可以直接通过账号密码方式获取到cookie?
另外这个小玩具方便的话,也想请大大指教一下,看看还有无什么进一步的空间,谢谢。
建议在Exception中附加b站API接口,返回的msg,以便区分
点赞投币加关注~
有没有类似的接口能返回进度状态数据之类的,整个进度条
运行代码
from bilibili_api import video, Verify
# verify = Verify(sessdata="your sessdata", csrf="your csrf")
my_video = video.VideoInfo(aid="40473736"
# , verify=verify
)
错误:
TypeError Traceback (most recent call last)
<ipython-input-2-9d982306d6e5> in <module>
1 # verify = Verify(sessdata="your sessdata", csrf="your csrf")
----> 2 my_video = video.VideoInfo(aid="40473736"
3 # , verify=verify
4 )
C:\ProgramData\Anaconda3\lib\site-packages\bilibili_api\src\video.py in __init__(self, bvid, aid, verify)
29 raise exception.bilibiliApiException("bvid和aid至少指定其中一个")
30 if bvid == "":
---> 31 self.__aid2bvid()
32 elif aid == 0:
33 self.__bvid2aid()
C:\ProgramData\Anaconda3\lib\site-packages\bilibili_api\src\video.py in __aid2bvid(self)
37
38 def __aid2bvid(self):
---> 39 self.bvid = utils.aid2bvid(self.aid)
40
41 def __get_self_info(self):
C:\ProgramData\Anaconda3\lib\site-packages\bilibili_api\src\utils.py in aid2bvid(aid)
228 return ''.join(r)
229
--> 230 return enc(aid)
C:\ProgramData\Anaconda3\lib\site-packages\bilibili_api\src\utils.py in enc(x)
222
223 def enc(x):
--> 224 x = (x ^ xor) + add
225 r = list('BV1 4 1 7 ')
226 for i in range(6):
TypeError: unsupported operand type(s) for ^: 'str' and 'int'
视频上传后显示转码失败,相同的视频通过浏览器可上传
Readme 里面详细教程和有关verify的链接好像失效了
链接会导回Readme
谢谢!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.