提取B站视频教程详情
背景
B站这个视频列表是真的体验感太差了,有时候想把章节复制下来,再对应的章节下面做笔记,实在是太难搞了,于是就有了这篇文文章
根据关键字获取视频id
@Test
public void list() {String url = "https://api.bilibili.com/x/web-interface/wbi/search/all/v2?__refresh__=true&_extra=&context=&page=1&page_size=42&order=&duration=&from_source=&from_spmid=333.337&platform=pc&highlight=1&single_column=0&qv_id=f2n7O2fSac731PnjjNFHUAGTYrY8wN84&ad_resource=5646&source_tag=3&web_location=1430654&w_rid=8b093eac9dbe20f09fb6b7bf3a51a743&wts=1710225740&keyword=" + keyword;HttpHeaders headers = new HttpHeaders();headers.add("Cookie", cookie);headers.add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36");HttpEntity<Object> entity = new HttpEntity<>(null, headers);ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);String body = exchange.getBody();JSONArray results = JSON.parseObject(body).getJSONObject("data").getJSONArray("result");for (int i = 0; i < results.size(); i++) {JSONObject result = results.getJSONObject(i);if ("video".equals(result.getString("result_type"))) {JSONArray array = result.getJSONArray("data");for (int j = 0; j < array.size(); j++) {JSONObject object = array.getJSONObject(j);String id = object.getString("id");String title = object.getString("title").replace("<em class=\"keyword\">", "").replace("</em>", "");System.out.println(id + "\t" + title);}}}
}
根据关键字搜索视频列表,这里可能会找到多个,然后手动选出自己需要的id,比如我搜索"opencv"会搜到,其中我想要的是"太厉害了 已跪!终于有人能把OpenCV图像处理讲的这么通俗易懂了,现在计算机视觉opencv全套分享给大家。"这个视频,对应的id为314395310
418313932 【2022B站最好的OpenCV课程推荐】OpenCV从入门到实战 全套课程(附带课程课件资料+课件笔记)图像处理|深度学习人工智能计算机视觉python+AI
314395310 太厉害了 已跪!终于有人能把OpenCV图像处理讲的这么通俗易懂了,现在计算机视觉opencv全套分享给大家。
1615 OpenCV轻松入门(李立宗)
1201468793 太详细了!从OpenCV安装到图像处理操作实战,张老师是真的把计算机视觉给讲透了!整整一百集,拿走不谢!——人工智能/机器学习/深度学习/神经网络/目标检测
839144359 OpenCV4 C++ 快速入门视频30讲 - 系列合集
382304059 【不要再看那些过时的OpenCV老教程了】2022巨献,OpenCV零基础小白最新版全套教程(人工智能机器视觉教程)
373921350 黑马程序员人工智能教程_10小时学会图像处理OpenCV入门教程
815748375 计算机视觉入门到精通!公认讲的最好的【OpenCV计算机视觉教程】同济大佬12小时带你从入门到精通!图像处理|深度学习人工智能计算机视觉Python+AI
933302257 OpenCV Python 图像处理 30分钟 入门课程
590843709 一天搞定人脸识别项目!学不会up直接下跪!(python+opencv)
938787514 【OpenCV图像处理】只需半天就能搞定人脸识别项目!一个课程学了就会了!附赠源码(python+opencv)
855023712 成功上岸!将花5位数买的Python+OpenCV全套教程,免费分享给大家,拿走不谢!学不会退出IT界!!!
312239766 【OpenCV计算机视觉整整80集】23年最新0基础-计算机视觉图像处理全套高清网课!!极易下架!!视觉工程师必看!!附高清视频+配套讲义!
357740456 【全300集】冒死上传B站最全OpenCV实战教程,血赚!学完即可就业,拿走不谢!-机器视觉_图像识别_OpenCV_图像分割_人脸识别
334184591 带你用QT+opencv做一个通用的图像处理工具
394592396 【强推】B站公认讲的最好的openCV计算机视觉教程,从入门到精通,绝对是天花板级别内容-图像处理/人脸识别/深度学习/机器学习
355476371 华为集团用72小时讲完的AI深度学习全套教程,整整300集(从入门到实战)学完即可就业!-人工智能/opencv/pytorch/机器学习/神经网络/计算机视觉
739307050 从零学习 OpenCV4
645613517 太厉害了 已跪!终于有人能把OpenCV图像处理+YOLO目标检测讲的这么通俗易懂了,现在计算机视觉全套教程分享给大家。
815861573 Open CV是什么?Open CV需要学习什么?学完之后可以做啥工作?
883962781 14个案例实战!入门计算机视觉OpenCV
707960514 【硬核教程!】爆肝3天!由深入浅opencv+pytorch,深度学习计算机视觉一次性吃透!(从此拒绝无效学习)
320424666 强烈推荐!国防科技大学OpenCV图像处理全套教程!终于有人将opencv讲透了!存下吧,比啃书好多了!机器视觉/人脸检测/计算机视觉/人工智能
235009729 这是一套,竟然不收费的Python+OpenCV教程(刷完赢麻了)
963776788 OpenCV+YOLO 实时目标检测,计算机博士手把手带你做毕设!(深度学习丨计算机视觉)
706087090 终于找到了!这绝对是全B站最详细(没有之一)OpenCV入门到精通全套视频,整整130集(建议收藏慢慢看)
699788432 我居然只花三个小时就学懂了【OpenCV特征检测】,上交大博士带你深挖图像拼接与特征检测,翻遍全网找不到比这更详细的教程了!!!
955206495 【2023六月推荐】OpenCV从入门到实战 全套课程 2023B站最好的OpenCV课程(图像处理|深度学习人工智能计算机视觉python+AI
339562922 利用opencv和pyautogui实现图像识别+自动操作
854184529 Java+OpenCV系列课程-01 【第1期完】最通俗易懂的OpenCV教程
1150890307 自学必看!【OpenCV图像处理:从入门到实战】随书教程完整版让我找到了!分享给大家一起学习——opencv、图像处理、opencv入门、计算机视觉、CV
867054653 吹爆!3小时我居然就搞懂了大学四年没学会的【OpenCV实战】教程!草履虫都能学会的原理+代码实现+实验分析,学不会UP跪下(机器学习算法/神经网络)
1251356195 【不要再看那些过时的OpenCV老教程了】2024巨献,OpenCV零基础小白最新版全套教程(人工智能机器视觉教程)
259328493 太厉害了 已跪!终于有人能把OpenCV图像处理讲的这么通俗易懂了,现在计算机视觉opencv全套分享给大家。
235968390 全站最全的(OpenCV图像处理)计算机大佬手把手教你做计算机视觉基础到实战教程 超详细实战教程讲解 拒绝无效学习!(Python+OpenCV)
905968806 【目前B站最全OpenCV C++系列项目实战】70个练手项目合集,七天练完,练完即可就业!(从入门到精通,小白也能学会)
486666836 【2023最全实战项目】100个OpenCV练手项目合集,学习计算机视觉图像处理必备,练完即可毕业,练手项目~项目经验~毕设/课设
249398472 【CV教程】3个小时学会OpenCV检测颜色、人形和车牌号!
1451342445 B站强推!!计算机视觉入门到精通!公认讲的最好的【OpenCV教程】!存下吧,比啃书好太多了!机器视觉/人脸检测/计算机视觉/人工智能
1051008494 OpenCV4入门终极指南:100集完整版带你从入门到能用!包含理论基础讲解+8大项目实战,含配套代码—OpenCV4实战、OpenCV入门、计算机视觉
981254611 Python人工智能(OpenCV图像处理实战),学完即可就业!
1751361229 OpenCV+TensorFlow实现CNN图像识别分类,春招必备深度学习视觉项目!(人工智能/卷积神经网络/计算机视觉)
获取视频详情
@Test
public void details() {String url = "https://api.bilibili.com/x/web-interface/wbi/view/detail?aid="+id;HttpHeaders headers = new HttpHeaders();headers.add("Cookie", cookie);headers.add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Safari/537.36");HttpEntity<Object> entity = new HttpEntity<>(null, headers);ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);String body = exchange.getBody();System.out.println("body = " + body);JSONArray jsonArray = JSON.parseObject(body).getJSONObject("data").getJSONObject("View").getJSONArray("pages");for (int i = 0; i < jsonArray.size(); i++) {String title = jsonArray.getJSONObject(i).getString("part");System.out.println(title);}
}
传入上一步获取到的视频id=314395310即可得到对应的视频详情
1-2 OpenCV导学
1-3 计算机视觉到底是什么
2-1 Mac下命令方式搭建OpenCV开发环境(加片头)
2-2 Windows下搭建OpenCV开发环境
2-3 Ubuntu下搭建OpenCV开发环境
2-4 Windows下源码方式编译OpenCV
2-5 Windows下C++使用OpenCV库
2-6 如何利用工具高效开发OpenCV
3-1 明晰课程项目
3-2 如何通过OpenCV创建显示窗口
3-3 如何通过OpenCV加载显示图片
3-4 两招解决OpenCV加载图片问题
3-5 如何通过OpenCV保存文件
3-6 如何利用OpenCV从摄像头采集视频
3-7 如何从多媒体文件中读取视频帧
3-8 如何将视频数据录制成多媒体文件
3-9 代码优化
3-10 OpenCV控制鼠标
3-11 OpenCV中的TrackBar控件
3-12 实战TrackBar的使用
4-1 RGB与BGR【OpenCV的色彩空间】
4-2 HSV与HSL【OpenCV的色彩空间】
4-3 实战OpenCV色彩空间转换
4-4 图像操作的基石Numpy【基础操作】
4-5 Numpy基本操作之矩阵的检索与赋值
4-6 Numpy基本操作三-ROI
4-8 OpenCV的重要结构体Mat
4-9 Mat的深拷贝与浅拷贝
4-11 图像的多种属性
4-12 通道的分割与合并
5-1 OpenCV绘制直线
5-2 OpenCV椭圆的绘制
5-3 OpenCV椭圆的绘制
5-4 OpenCV绘制多边形
5-5 OpenCV绘制文本
5-6 OpenCV大作业-实现鼠标绘制基本图形
5-7 OpenCV基本图形绘制小结
6-1 图像的加法运算
6-2 图像的减法运算
6-3 图像的溶合
6-4 OpenCV位运算-非操作
6-5 OpenCV位操作-与运算
6-6 OpenCV位操作-或与异或
6-7 大作业-为图像添加水印
7-1 图像的放大与缩小
7-2 图像的翻转
7-3 图像的旋转
7-4 仿射变换之图像平移
7-5 仿射变换之获取变换矩阵
7-6 仿射变换之变换矩阵之二
7-7 OpenCV透视变换
8-1 图像滤波
8-2 卷积相关概念
8-3 实战图像卷积
8-4 方盒滤波与均值滤波
8-5 高斯滤波
8-6 中值滤波
8-7 双边滤波
8-8 高通滤波-索贝尔算子
8-9 高通滤波-沙尔算子
8-10 高通滤波-拉普拉斯算子
8-11 边缘检测Canny
9-1 形态学概述
9-2 图像全局二值化
9-3 阈值类型
9-4 自适应阈值二值化
9-5 OpenCV腐蚀
9-6 获取形态学卷积核
9-7 OpenCV膨胀
9-8 开运算
9-9 闭运算
9-10 形态学梯度
9-11 顶帽运算
9-12 黑帽操作
10-1 什么是图像轮廓
10-2 查找轮廓
10-3 绘制轮廓
10-4 轮廓的面积与周长
10-5 多边形逼近与凸包
10-6 外接矩形
10-7 项目总览【车辆统计】
10-8 视频加载【车辆统计】
10-9 形态学处理【车辆统计】
10-10 去背景【车辆统计】
10-11 逻辑处理【车辆统计】
10-12 显示信息【车辆统计】
11-1 特征检测的基本概念
11-2 Harris角点检测
11-3 Shi-Tomasi角点检测
11-4 SIFT关键点检测
11-5 SIFT计算描述子
11-6 SURF特征检测
11-7 OBR特征检测
11-8 暴力特征匹配
11-9 FLANN特征匹配
11-10 实战flann特征匹配
11-11 图像查找
11-12 大作业-图像拼接基础知识
11-13 大作业-图像拼接(一)
完整代码
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;class BStationVideoListExtract2Test {private String keyword = "opencv";private String id = "314395310"private String cookie = "_uuid=9DF4F2F2-47B9-22B6-F59A-A8C10C658393265297infoc; enable_web_push=undefined; header_theme_version=undefined; buvid_fp=0f14aff6726a04789db0ba942ba1317c; buvid3=C4518348-C136-256A-F660-38EA96D4971D49657infoc; b_nut=1708214666; buvid4=1010A954-10E9-D08B-82EF-1278035AD2E749657-024021800-Da1Cmh2s4TKHhBvxWnSrMg%3D%3D; CURRENT_FNVAL=4048; rpdid=|(kYl|~u)R)J0J'u~|)kuRY~Y; PVID=1; DedeUserID=702211544; DedeUserID__ckMd5=165187cda1b9f075; CURRENT_QUALITY=80; FEED_LIVE_VERSION=undefined; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MTAzNzQxMjcsImlhdCI6MTcxMDExNDg2NywicGx0IjotMX0.YzPhgcDhiKBMZCQmvf9r_6shc7teaF2F6r4ZFgk4g9w; bili_ticket_expires=1710374067; SESSDATA=bc98694a%2C1725666928%2Cce14a%2A31CjCxI-6GYnUODm_8y4XiweKv272zq5odBHxEmsuMnRW9nTgEThHMdZmEZM-mZvcQowoSVlE2ZWItWmROUGtVcXFTZkVlYmhmdDdnbTktZF9scVZpb3c1UzNJNXlsZGZvN3U0cWtGYS1FSXU4N0VZN041UkJYWEhJNDJKQktFTzVBZTBXSEw0WERRIIEC; bili_jct=a23627e4e9d952ba26cfcc0209ce39e0; sid=7yv3ysp0; bp_video_offset_702211544=907118997271478357; home_feed_column=4; b_lsid=BF6A57A2_18E312A1978; browser_resolution=1275-1279";private RestTemplate restTemplate = new RestTemplate();@Testpublic void list() {String url = "https://api.bilibili.com/x/web-interface/wbi/search/all/v2?__refresh__=true&_extra=&context=&page=1&page_size=42&order=&duration=&from_source=&from_spmid=333.337&platform=pc&highlight=1&single_column=0&qv_id=f2n7O2fSac731PnjjNFHUAGTYrY8wN84&ad_resource=5646&source_tag=3&web_location=1430654&w_rid=8b093eac9dbe20f09fb6b7bf3a51a743&wts=1710225740&keyword=" + keyword;HttpHeaders headers = new HttpHeaders();headers.add("Cookie", cookie);headers.add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36");HttpEntity<Object> entity = new HttpEntity<>(null, headers);ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);String body = exchange.getBody();JSONArray results = JSON.parseObject(body).getJSONObject("data").getJSONArray("result");for (int i = 0; i < results.size(); i++) {JSONObject result = results.getJSONObject(i);if ("video".equals(result.getString("result_type"))) {JSONArray array = result.getJSONArray("data");for (int j = 0; j < array.size(); j++) {JSONObject object = array.getJSONObject(j);String id = object.getString("id");String title = object.getString("title").replace("<em class=\"keyword\">", "").replace("</em>", "");System.out.println(id + "\t" + title);}}}}@Testpublic void details(String id) {String url = "https://api.bilibili.com/x/web-interface/wbi/view/detail?aid=" + id;HttpHeaders headers = new HttpHeaders();headers.add("Cookie", cookie);headers.add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Safari/537.36");HttpEntity<Object> entity = new HttpEntity<>(null, headers);ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);String body = exchange.getBody();System.out.println("body = " + body);JSONArray jsonArray = JSON.parseObject(body).getJSONObject("data").getJSONObject("View").getJSONArray("pages");for (int i = 0; i < jsonArray.size(); i++) {String title = jsonArray.getJSONObject(i).getString("part");System.out.println(title);}}}
注意事项
记得修改keyword,视频id和cookie
获取cookie的方法
打开B站,F12调出开发者工具,随便找个请求都可以