IDEA JAVA使用BilibiliClient抓取哔哩哔哩用户动态等数据信息
关于
一直在想办法获取哔哩哔哩的相关对象,对媒体运营数据进行自动管理,于是写了一个BiliClient的JAR包,自己使用,也分享出来,希望可以帮助大家,目前该项目已经上传GITHUB和Maven中央仓库,可以直接使用依赖引入。
引入Maven依赖包
在IDEA中新建Maven项目,并在POM文件中加入如下依赖
<!-- https://mvnrepository.com/artifact/cn.hll520.linclient/BilibiliClient --><dependency><groupId>cn.hll520.linclient</groupId><artifactId>BilibiliClient</artifactId><version>1.0.2</version></dependency>
1.配置连接(可选)
调用BaseClientConfig
的静态方法对相关属进行配置,目前支持如下配置,不进行配置也可以,将使用默认配置
BaseClientConfig baseClientConfig=new BaseClientConfig();// 协议baseClientConfig.setProtocol(String protocol);// 服务hostbaseClientConfig.setHost(String host);// 服务host VcbaseClientConfig.setHostVc(String hostVc);// 配置端口baseClientConfig.setPort(Integer port);// 配置请求baseClientConfig.setRequestConfig(RequestConfig config);
若进行配置将会修改全局配置,对配置之后的全部请求生效
2. 获取BiliClient对象
目前仅支持使用工厂方法获取默认对象
BiliClient client = BiliClientFactor.getClient();
3. 使用
通过实例对象.类型.条件.方法()
获取对应的哔哩哔哩对象,有如下案例,以下均免登录获取,涉及用户的均以皮皮团
为例
3.1 获取用户信息
使用UID获取指定用户的信息。
public class Main {public static void main(String[] args) {BiliClient client = BiliClientFactor.getClient();User user = client.user().withUID(20165629L).get();System.out.println(user);System.out.println("姓名"+user.getName());System.out.println("签名"+user.getSign());System.out.println("生日"+user.getBirthday());System.out.println("头像"+user.getFace());System.out.println("认证信息"+user.getOfficial());System.out.println("直播间信息"+user.getLive_room());System.out.println("会员信息"+user.getVip());}
}
结果如下
User(mid=20165629, name=共青团中央, sex=保密, face=http://i1.hdslb.com/bfs/face/31a4594ba9e39c985e19d37594a794df752bf4b4.jpg, sign=新年快乐!这里皮皮团,等你很久啦!, rank=10000, level=6, silence=0, birthday=05-05, coins=0, fans_badge=true, official=Official(role=4, title=共青团中央 官方账号, desc=, type=1), vip=Vip(type=2, status=1, theme_type=0, label=Vip.Label(path=, text=年度大会员, label_theme=annual_vip), avatar_subscript=1, nickname_color=#FB7299), pendant=Pendant(pid=0, name=, image=, expire=0, image_enhance=, image_enhance_frame=), nameplate=Nameplate(nid=39, name=直播车神, image=http://i2.hdslb.com/bfs/face/a1bf58db4a48f4ec394627d96af7399456812bbb.png, image_small=http://i1.hdslb.com/bfs/face/9d1ab43e5064834e0081c46990c7f4d1228ac69c.png, level=稀有勋章, condition=直播主播等级>=30级), is_followed=false, top_photo=http://i1.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png, theme={}, sys_notice=SysNotice(id=null, content=null, url=null, notice_type=null, icon=null, text_color=null, bg_color=null), live_room=LiveRoom(roomStatus=1, liveStatus=0, url=https://live.bilibili.com/910884, title=共青团中央的投稿视频, cover=http://i0.hdslb.com/bfs/live/new_room_cover/3df1d45603474f67465a8dc9f0ad871c0597ce6d.jpg, online=10577, roomid=910884, roundStatus=1, broadcast_type=0))
姓名共青团中央
签名新年快乐!这里皮皮团,等你很久啦!
生日05-05
头像http://i1.hdslb.com/bfs/face/31a4594ba9e39c985e19d37594a794df752bf4b4.jpg
认证信息Official(role=4, title=共青团中央 官方账号, desc=, type=1)
直播间信息LiveRoom(roomStatus=1, liveStatus=0, url=https://live.bilibili.com/910884, title=共青团中央的投稿视频, cover=http://i0.hdslb.com/bfs/live/new_room_cover/3df1d45603474f67465a8dc9f0ad871c0597ce6d.jpg, online=10577, roomid=910884, roundStatus=1, broadcast_type=0)
会员信息Vip(type=2, status=1, theme_type=0, label=Vip.Label(path=, text=年度大会员, label_theme=annual_vip), avatar_subscript=1, nickname_color=#FB7299)
3.2 用户粉丝数据获取
使用UID获取指定用户的粉丝信息
public class Main {public static void main(String[] args) {BiliClient client = BiliClientFactor.getClient();Relation list = client.relation().toFollowers(20165629L).list();System.out.println(list);System.out.println("粉丝总数 --> "+list.getTotal());System.out.println("最新粉丝 --> "+list.getItems().get(0));System.out.println("最新粉丝ID --> "+list.getItems().get(0).getMid());System.out.println("最新粉丝名称 --> "+list.getItems().get(0).getUname());System.out.println("最新粉丝签名 --> "+list.getItems().get(0).getSign());System.out.println("粉丝列表 -->"+list.getItems());// 分页获取System.out.println(client.relation().toFollowers(20165629L).list(2L, 5L));}
}
结果如下
Relation(total=7746656, re_version=2668395765, items=[Follower(mtime=1613215557, uname=合法收集雨水), Follower(mtime=1613215551, uname=兲孖灬彳亍), Follower(mtime=1613215533, uname=bili_81165375252), Follower(mtime=1613215521, uname=bili_地狱阎王), Follower(mtime=1613215500, uname=天蓝色天空的你), Follower(mtime=1613215494, uname=在下别亦楠), Follower(mtime=1613215484, uname=bili_84916673050), Follower(mtime=1613215469, uname=徐龙芮), Follower(mtime=1613215462, uname=阿qia威), Follower(mtime=1613215438, uname=俞白同学), Follower(mtime=1613215394, uname=饭黎爱吃椰子), Follower(mtime=1613215351, uname=无住的心), Follower(mtime=1613215350, uname=Study_Committee), Follower(mtime=1613215347, uname=快活的阿柴汪), Follower(mtime=1613215337, uname=往事如烟流年), Follower(mtime=1613215332, uname=尼龙瞎), Follower(mtime=1613215330, uname=二哈哈哈叫), Follower(mtime=1613215320, uname=bili_95463935507), Follower(mtime=1613215281, uname=罗水水要加油), Follower(mtime=1613215266, uname=bili_43079631053), Follower(mtime=1613215255, uname=德意志111米卡), Follower(mtime=1613215248, uname=DK逍白衣), Follower(mtime=1613215227, uname=柚子哥哥家的兔叽), Follower(mtime=1613215226, uname=派大星爱吹泡泡), Follower(mtime=1613215218, uname=viola47), Follower(mtime=1613215204, uname=WHY笔巴卜), Follower(mtime=1613215198, uname=bili_46704847334), Follower(mtime=1613215197, uname=bili_42344310679), Follower(mtime=1613215182, uname=bili_24315745446), Follower(mtime=1613215180, uname=普通奶茶), Follower(mtime=1613215153, uname=怎样K), Follower(mtime=1613215131, uname=缃罗_), Follower(mtime=1613215119, uname=晴破长空), Follower(mtime=1613215071, uname=bili_18668806817), Follower(mtime=1613215059, uname=-张三的父亲_), Follower(mtime=1613215053, uname=Yachtsy), Follower(mtime=1613215048, uname=厨力准备-安应景), Follower(mtime=1613215045, uname=k_清以), Follower(mtime=1613215035, uname=梵雅清音), Follower(mtime=1613215028, uname=西北笙z), Follower(mtime=1613214985, uname=Performance艺术家), Follower(mtime=1613214956, uname=bili_84055320353), Follower(mtime=1613214946, uname=璇一kinal), Follower(mtime=1613214935, uname=Kirwtr), Follower(mtime=1613214933, uname=bili_58334347829), Follower(mtime=1613214913, uname=吉良吉影de奇妙冒险), Follower(mtime=1613214904, uname=脑子开过光的小查), Follower(mtime=1613214892, uname=66722378207_bili), Follower(mtime=1613214886, uname=asdnaruto), Follower(mtime=1613214883, uname=人生_就图一个成果)])
粉丝总数 --> 7746656
最新粉丝 --> Follower(mtime=1613215557, uname=合法收集雨水)
最新粉丝ID --> 439154941
最新粉丝名称 --> 合法收集雨水
最新粉丝签名 --> 行万里路,读万卷书。
粉丝列表 -->[Follower(mtime=1613215557, uname=合法收集雨水), Follower(mtime=1613215551, uname=兲孖灬彳亍), Follower(mtime=1613215533, uname=bili_81165375252), Follower(mtime=1613215521, uname=bili_地狱阎王), Follower(mtime=1613215500, uname=天蓝色天空的你), Follower(mtime=1613215494, uname=在下别亦楠), Follower(mtime=1613215484, uname=bili_84916673050), Follower(mtime=1613215469, uname=徐龙芮), Follower(mtime=1613215462, uname=阿qia威), Follower(mtime=1613215438, uname=俞白同学), Follower(mtime=1613215394, uname=饭黎爱吃椰子), Follower(mtime=1613215351, uname=无住的心), Follower(mtime=1613215350, uname=Study_Committee), Follower(mtime=1613215347, uname=快活的阿柴汪), Follower(mtime=1613215337, uname=往事如烟流年), Follower(mtime=1613215332, uname=尼龙瞎), Follower(mtime=1613215330, uname=二哈哈哈叫), Follower(mtime=1613215320, uname=bili_95463935507), Follower(mtime=1613215281, uname=罗水水要加油), Follower(mtime=1613215266, uname=bili_43079631053), Follower(mtime=1613215255, uname=德意志111米卡), Follower(mtime=1613215248, uname=DK逍白衣), Follower(mtime=1613215227, uname=柚子哥哥家的兔叽), Follower(mtime=1613215226, uname=派大星爱吹泡泡), Follower(mtime=1613215218, uname=viola47), Follower(mtime=1613215204, uname=WHY笔巴卜), Follower(mtime=1613215198, uname=bili_46704847334), Follower(mtime=1613215197, uname=bili_42344310679), Follower(mtime=1613215182, uname=bili_24315745446), Follower(mtime=1613215180, uname=普通奶茶), Follower(mtime=1613215153, uname=怎样K), Follower(mtime=1613215131, uname=缃罗_), Follower(mtime=1613215119, uname=晴破长空), Follower(mtime=1613215071, uname=bili_18668806817), Follower(mtime=1613215059, uname=-张三的父亲_), Follower(mtime=1613215053, uname=Yachtsy), Follower(mtime=1613215048, uname=厨力准备-安应景), Follower(mtime=1613215045, uname=k_清以), Follower(mtime=1613215035, uname=梵雅清音), Follower(mtime=1613215028, uname=西北笙z), Follower(mtime=1613214985, uname=Performance艺术家), Follower(mtime=1613214956, uname=bili_84055320353), Follower(mtime=1613214946, uname=璇一kinal), Follower(mtime=1613214935, uname=Kirwtr), Follower(mtime=1613214933, uname=bili_58334347829), Follower(mtime=1613214913, uname=吉良吉影de奇妙冒险), Follower(mtime=1613214904, uname=脑子开过光的小查), Follower(mtime=1613214892, uname=66722378207_bili), Follower(mtime=1613214886, uname=asdnaruto), Follower(mtime=1613214883, uname=人生_就图一个成果)]
Relation(total=7746656, re_version=4149428170, items=[Follower(mtime=1613215533, uname=bili_81165375252), Follower(mtime=1613215521, uname=bili_地狱阎王)])
3.3 获取用户动态列表
目前支持单次获取和分页获取,使用案例代码如下,支持动态类型包括普通内容,视频\小视频,转发动态
public class Main {public static void main(String[] args) {BiliClient client = BiliClientFactor.getClient();// 获取前6条DynamicItems list = client.dynamic().withHostUid(20165629L).list();System.out.println(list);System.out.println("是还有动态--> " + (list.getHasMore() == 1));// 动态集合List<Dynamic> items = list.getItems();System.out.println(items);// 最新一条Dynamic dynamic = items.get(0);System.out.println("动态类型-->" + dynamic.getType());// 动态数据DynamicData data = dynamic.getData();System.out.println(data);System.out.println("动态阅读-->" + data.getView());System.out.println("动态点赞-->" + data.getLike());System.out.println("动态转发-->" + data.getRepost());// 动态详情(普通类型)DynamicDetail detail = dynamic.getDetail();System.out.println(detail); // 若非普通类型为nullif (detail != null) {// 动态包含的图片List<Picture> pictures = detail.getPictures();System.out.println(pictures);}// 动态视频(视频类型)Video video = dynamic.getVideo();System.out.println("动态内容" + video.getDynamic());System.out.println("视频说明" + video.getDesc());// 获取之后六条---- 以此类推DynamicItems list2 = client.dynamic().withHostUid(20165629L).list(list.getNextOffset());System.out.println(list2);}
}
结果如下
因较长仅放出截图
3.4 动态分析工具
该工具可以获取用户全部动态,并对动态进行批量统计和分类,耗时较长
public class Main {public static void main(String[] args) {BiliClient client = BiliClientFactor.getClient();// 动态分类信息DynamicSortInfo dynamicSortInfo = DynamicTools.queryData(client, 20165629L);
// DynamicTools.queryAll(client, 20165629L); // 获取全部动态 但不分析System.out.println(dynamicSortInfo);List<Dynamic> dynamics = dynamicSortInfo.getDynamics();// 获取该用户的全部动态System.out.println(dynamics);System.out.println("用户总动态数量--> " + dynamicSortInfo.getCount());System.out.println("用户总动态阅读--> " + dynamicSortInfo.getViewAll());System.out.println("用户总动态点赞--> " + dynamicSortInfo.getLikeAll());System.out.println("用户总动态评论--> " + dynamicSortInfo.getCommentAll());System.out.println("用户总动态转发--> " + dynamicSortInfo.getRepostAll());System.out.println("用户总动态硬币--> " + dynamicSortInfo.getCoinAll());// 动态分类绘制Map<Dynamic.DType, DynamicInfo> sortInfo = dynamicSortInfo.getSortInfo();sortInfo.forEach((type, dynamicInfo) -> {System.out.println(type + "类型总硬币--> " + dynamicInfo.getCoinAll());System.out.println(type + "类型总点赞--> " + dynamicInfo.getLikeAll());System.out.println(type + "类型总转发--> " + dynamicInfo.getRepostAll());System.out.println(type + "类型总评论--> " + dynamicInfo.getCommentAll());System.out.println(type + "类型总阅读--> " + dynamicInfo.getViewAll());System.out.println(type + "类型总数量--> " + dynamicInfo.getCount());
// List<Dynamic> dynamics = dynamicInfo.getDynamics();// 获取该用户全部当前类型的动态});}
}
结果如下
3.5 获取指定动态
使用动态ID(网页动态详情地址或使用上述3.3或3.4中获取的MID)来获取某一特定动态详情
public class Main {public static void main(String[] args) {BiliClient client = BiliClientFactor.getClient();// 获取指定动态Dynamic dynamic = client.dynamic().withDynamicId(490734987491008394L).get();// 动态类型和作者System.out.println("类型为--> "+ dynamic.getType());System.out.println("作者为--> "+ dynamic.getName());System.out.println("作者ID为--> "+ dynamic.getUid());// 指定动态数据DynamicData data = dynamic.getData();System.out.println(data);System.out.println("动态阅读--> "+data.getView());System.out.println("动态点赞--> "+data.getLike());System.out.println("动态转发--> "+data.getRepost());// 指定动态内容DynamicDetail detail = dynamic.getDetail();System.out.println("动态类容--> "+detail.getDescription());System.out.println("动态发布时间--> "+detail.getUpload_time());// 获取动态图片List<Picture> pictures = detail.getPictures();System.out.println(pictures);}
}
结果如下
3.6 获取指定视频信息
public class Main {public static void main(String[] args) {BiliClient client = BiliClientFactor.getClient();// 工具BVVideo video = client.video().withBvid("BV1hz4y1k7jf").get();
// Video video = client.video().withBvid(585465570L).get(); // 工具AV获取System.out.println(video);System.out.println("视频AV号--> " + video.getAid());System.out.println("视频BV号--> " + video.getBvid());System.out.println("视频封面--> " + video.getPic());System.out.println("视频标题--> " + video.getTitle());System.out.println("视频时长(秒)--> " + video.getCtime());System.out.println("视频合作者信息--> " + video.getStaff());// 弹幕 播放等System.out.println("视频播放数据--> " + video.getStat());System.out.println("视频发布时动态信息--> " + video.getDynamic());System.out.println("视频详情信息--> " + video.getDesc());}
}
运行结果
4. 异常分析
4.1 SLF4J错误
异常发生于运行时候,异常信息如下
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
该异常的原因是,项目中部分错误和信息使用Lombok的日志注解,并进行日志打印,在使用时候未引入日志框架导致,若无需日志可以无视该问题,不影响使用,若需要解决,可以加入以下依赖
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.30</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.25</version><scope>test</scope></dependency>
4.2 Maven无法加载依赖
错误为添加依赖后,刷新Maven加载,报红并提示找不到此依赖,原因是无法访问中央仓库或代理仓库中还为镜像此依赖,可以在Maven配置文件settings.xml
加入如下Maven中央仓库站点
<mirrors><mirror><id>repo1</id><mirrorOf>central</mirrorOf><name>Human Readable Name for this Mirror.</name><url>https://repo1.maven.org/maven2/</url></mirror><mirrors>
结语
以上仅仅包含该包的部分功能,以及部分功能的部分使用情景。
该项目源码已经上传GitHub开源,点击跳转
该项目已经上传Maven中央仓库,点击跳转
IDEA JAVA使用BilibiliClient抓取哔哩哔哩用户动态等数据信息相关推荐
- java抓取网页标题内容_[Java教程]java 网页页面抓取标题和正文
[Java教程]java 网页页面抓取标题和正文 0 2014-07-10 09:01:30 import java.io.BufferedReader;import java.io.IOExcept ...
- java+selenium自动化抓取51la数据
java+selenium自动化抓取51la数据 初衷 环境依赖 demo上代码 效果来个马赛克 如果觉得写的不错或者想了解更多,欢迎收藏和关注~~ 初衷 前端埋点51la,进行网站统计.51la没有 ...
- java爬虫 京东_教您使用java爬虫gecco抓取JD全部商品信息(一)
#教您使用java爬虫gecco抓取JD全部商品信息(一) ##gecco爬虫 如果对gecco还没有了解可以参看一下gecco的github首页.gecco爬虫十分的简单易用,JD全部商品信息的抓取 ...
- 教您使用java爬虫gecco抓取JD全部商品信息(一)
摘要: 如果对gecco还没有了解可以参看一下gecco的github首页,https://github.com/xtuhcy/gecco.gecco爬虫十分的简单易用,JD全部商品信息的抓取9个类就 ...
- 编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
这篇文章主要介绍了编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法,用到了Python的urllib和urllib2模块,需要的朋友可以参考下 抓取豆瓣电影TOP100 一.分析豆瓣top ...
- 爬虫抓取某饿了app商铺的评论数据
前言: 最近研究了一下某饿了app的商铺评论的抓取,该app使用了ssl-pinning的技术来防止中间人攻击,中间代理抓包的时候,出现了unknown,你的代理工具的协议不支持,你可以手写协议或者使 ...
- 【Python爬虫】利用爬虫抓取双色球开奖号码,获取完整数据,简洁45行代码实现,更新时间2023-06-28
链接:https://pan.baidu.com/s/18oE308_NVNPaCOACw_H5Hw?pwd=abc1 利用爬虫抓取双色球开奖号码,获取完整数据,简洁45行代码实现,更新时间2023- ...
- 别人家的程序员是如何使用 Java 进行 Web 抓取的?
Web抓取非常有用,它可以收集信息供多种用途使用,如数据分析.统计.提供第三方信息,还可以给深神经网络和深度学习提供数据. Web抓取是什么? 有一种非常广泛的误解,人们似乎把Web抓取和Web爬虫当 ...
- java socket 包头包体_使用JAVA上抓取Socket服务端和客户端通信TCP数据包
使用Java抓取Socket通信TCP数据包 使用WireShark默认使用的是winpcap去抓本地环回的数据包,需要安装npcap再在Wireshark选择本地环回的网卡抓包 在Java-Sock ...
最新文章
- ESFramework网络通信框架 4.0 性能测试
- qt linux mac,MacOS下Qt Installer Framework使用教程【个人经验】
- 在Spring Controller中将数据缓存到session
- 项目经理常见的沟通坏习惯
- UIButton 上的标题添加下划线效果
- Windows Thrift安装及HelloWorld
- leetcode 20. 有效的括号
- FL Studio软件隐藏优惠码分享,音乐制作必备,创作无限可能!
- atitit.《金刚经》与it软件项目管理的启发 读后感attilax
- 2021WordPress转z-blog搬家教程_WordPress搬家zblog博客程序工具
- 企业私有云技术设计方案
- 设计模式之----依赖倒置(Dependency inversion principle)的理解
- 网卡offload功能介绍
- 51采集温度电压电流+LCD1602显示
- google translate for goldendict 谷歌 翻译 goldendict
- 在Android上修改读取IMEI码的方法
- log4j2设置控制台日志打印颜色
- 转发保留不错一篇 数学模型神经网络在程序化交易模型构建中的运用探讨
- FIFO最小深度计算
- visionman-康耐视智能相机Insight视觉课程大纲(0718更新,永久更新)
热门文章
- 北大青鸟DNS分离解析实验步骤
- 1h-8学习(1):1h-8适配之int8直接量化+转.cambricon格式
- 你的论文,你做主—研究生毕业论文的写作过程
- 未来计算机论文1000字,未来的生活作文1000字
- 第74期CDA数据分析就业班即将在北京、成都、重庆 三校同步开课,欢迎咨询!...
- JavaScript数据类型及其返回值
- 员工信息管理系统语言论文c,C语言课程设计 职工信息管理系统.doc
- 给女朋友的60种道歉的话...
- linux删除用户及其所在工作目录
- HTML项目心得500字,体育锻炼心得体会500字