在B站看学习视频很方便,不会出现度娘的那种未知原因被和谐的情况,有时候可能想下载视频到本地,这时候发现在视频页面没有下载按钮。

B站视频下载

通过修改URL来进入下载页面,在bilibili前面加入kan即可。
示例:原地址:https://www.bilibili.com/video/av45556406==>https://www.kanbilibili.com/video/av45556406即可进入下载页面

点击下载地址即可到达下载地址页面,选择清晰度,也可选择批量下载,通过复制下载链接,使用迅雷下载到本地即可。

下载完成之后本地视频文件如下:

发现文件名称与B站显示的名称不一致,不知道每节视频的题目内容,观看很不方便,因此我们需要修改文件名。

修改文件名

java代码如下:

package com.example.sql;import org.springframework.util.StringUtils;import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Map;/*** @author Administrator* @date 2019/6/30 19:50*/
public class RenameFile {private static final String TITLE = "title=";private static final String SPAN_CLASS_S_1 = "<span class=\"s1\">";private static final String STR = "-1-80";private static final String FLV_STR = "-分片1.flv";public static void main(String[] args) {final Map<String, String> fileName = getFileName();System.out.println("===================================================");final Map<String, String> downloadNameMap = getDownloadNameMap();// 要遍历的路径String path = "E:\\学习视频\\Java编程方法论\\响应式 之 Reactor-Netty讲解 全集";// 获取其file对象File file = new File(path);// 遍历path下的文件和目录,放在File数组中File[] fs = file.listFiles();// 遍历File[]数组for (int i = 0; i < fs.length; i++) {File f = fs[i];// 若非目录(即文件),则打印if (!f.isDirectory()){String pNum = downloadNameMap.get(f.getName());if (!StringUtils.isEmpty(pNum)) {String newName = fileName.get(pNum);FixFileName(f, newName);}}}}public static Map<String, String> getFileName() {Map<String, String> result = new HashMap<>(72);try {// 构造一个BufferedReader类来读取文件BufferedReader br = new BufferedReader(new FileReader(new File("C:\\Users\\Administrator\\Desktop\\b.txt")));String s = null;// 使用readLine方法,一次读一行while ((s = br.readLine()) != null) {// System.out.println("读取内容:" + s);String substring = null;if (s.contains(TITLE)) {final int start = s.indexOf(TITLE) + 7;final int end = s.indexOf("van-icon-videodetails_play") - 12;substring = s.substring(start, end);System.out.println("###标题###:" + substring);}String pNum = null;if (s.contains(SPAN_CLASS_S_1)) {final int pStart = s.indexOf(SPAN_CLASS_S_1) + 17;final int pEnd = s.indexOf(SPAN_CLASS_S_1) + 20;pNum = s.substring(pStart, pEnd);pNum = pNum.replace("<", "");System.out.println("###pNum###:" + pNum);}if (!StringUtils.isEmpty(substring) && !StringUtils.isEmpty(pNum)) {result.put(pNum, substring);}}br.close();} catch (Exception e) {e.printStackTrace();}return result;}public static Map<String, String> getDownloadNameMap() {Map<String, String> result = new HashMap<>(72);try {// 构造一个BufferedReader类来读取文件BufferedReader br = new BufferedReader(new FileReader(new File("C:\\Users\\Administrator\\Desktop\\a.txt")));String s = null;// 使用readLine方法,一次读一行while ((s = br.readLine()) != null) {// System.out.println("读取内容:" + s);String substring = null;if (s.contains(STR)) {final int start = s.indexOf(STR) - 8;final int end = s.indexOf(STR) + 9;substring = s.substring(start, end);System.out.println("###标题###:" + substring);}String pNum = null;if (s.contains(FLV_STR)) {final int pStart = s.indexOf(FLV_STR) - 3;final int pEnd = s.indexOf(FLV_STR);pNum = s.substring(pStart, pEnd);pNum = pNum.replace("-", "");System.out.println("###pNum###:" + pNum);}if (!StringUtils.isEmpty(substring) && !StringUtils.isEmpty(pNum)) {result.put(substring, pNum);}}br.close();} catch (Exception e) {e.printStackTrace();}return result;}/*** 通过文件路径直接修改文件名** @param f    需要修改的文件* @param newFileName 需要修改的文件的名称* @return*/private static String FixFileName(File f, String newFileName) {if (f == null) {    // 判断原文件是否存在(防止文件名冲突)return null;}String filePath = f.getPath();newFileName = newFileName.trim();// 文件名不能为空if ("".equals(newFileName) || (newFileName == null)) {return null;}String newFilePath = null;// 判断是否为文件夹if (f.isDirectory()) {newFilePath = filePath.substring(0, filePath.lastIndexOf("\\")) + "\\" + newFileName;} else {newFilePath = filePath.substring(0, filePath.lastIndexOf("\\")) + "\\" + newFileName+ filePath.substring(filePath.lastIndexOf("."));}File nf = new File(newFilePath);try {// 修改文件名f.renameTo(nf);} catch (Exception err) {err.printStackTrace();return null;}return newFilePath;}
}

在桌面放了两个txt文件,a.txt中存储的是下载页的HTML代码片段(包含段落号与下载到本地的文件名),b.txt中存储的是视频播放页的HTML代码(包含视频正确名称与段落号)。
在下载页面通过F12查看页面代码,然后选中右侧播放列表名称,如图:

右键选中,Copy==>Copy element,然后复制到b.txt即可。
下载链接处理类似:

复制保存后的txt文本如下:
a.txt:

b.txt:

其中a.txt需要一个换行处理,在notpad++中使用替换即可:

换行之后的a.txt如下图:

准备好两个txt文件之后即可运行程序。
执行之后结果如下:

注:Java代码只是一个随手写的小工具,仅供参考

B站视频下载及本地文件名修正相关推荐

  1. 手把手教你使用Python获取B站视频并在本地实现弹幕播放功能

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 少小虽非投笔吏,论功还欲请长缨. ...

  2. b站视频下载更新(加入下载进度)

    b站视频下载更新(加入下载进度) 一直想加个下载进度进去,最近才搞上 顺便加了个获取视频的AV号 新开一个pa审核过不了 往期相关: Python爬取b站视频(api真实地址) selenium模拟登 ...

  3. 一款b站视频下载工具软件mac版

    是一款开源的哔哩哔哩视频下载工具,b站视频下载软件 mac能够快速为您下载Bilibili的视频!哔哩哔哩视频下载软件在您选择下载视频时会提示登录,登录后可以获取你的SESSDATA来用做下载,日常账 ...

  4. 星星之火-50:无意中发现一种能够把网络视频下载到本地计算机中的方法

    目前,随着移动互联网的盛行,网络中充斥着各种大量的视频,但大多数情况下,我们智能通过客户端观看视频,无法把视频文件下载到本地,最笨的方法就是录屏. 然后,一个偶然的机会,无意中发现一种能够把网络视频下 ...

  5. python爬虫之b站视频下载(python学习笔记)

    b站视频爬取(python学习笔记) 亲爱的b站自从在2020年3月23日将av号改为BV号后,之前的很多爬虫已经不能用了,暂时没看懂这操作的意义何在,反而一大串大小写英文字母加数字的BV号让人很难记 ...

  6. python3GUI--实用!B站视频下载工具(附源码)

    文章目录 一.准备工作 二.预览 1.启动 2.解析 3.下载中 4.下载完成 5.结果 三.设计流程 1.bilibili_video_spider 2.视频json的查找 四.源代码 1.Bili ...

  7. B站视频下载软件分享

    B站视频下载软件分享 首先浏览器搜索https://www.bilibili.com,看着看着突然发现了一个非常好看的视频,特别想下载下来留存着,怎么办? 用它 第一步:打开软件 第二步:设置视频下载 ...

  8. 【自嗨笔记#5】2020 最新B站视频下载方法

    [自嗨笔记#5]2020 最新B站视频下载方法 最近,因公司需要创办抖音号,宣传造势,我就想自己找点素材练习练习剪辑.那么,学习素材从哪里来呢!小破站!!不多说,正文开始! 先说下情况,B站的视频,音 ...

  9. 曝肝三天,两千行Python代码,制作B站视频下载工具(附源码)

    曝肝三天,两千行Python代码,制作B站视频下载工具(附源码) 文章目录 一.准备工作 二.预览 1.启动 2.解析 3.下载中 4.下载完成 5.结果 三.设计流程 1.bilibili_vide ...

  10. 干货分享:高效办公工具【视频转文字、视频播放器、B站视频下载软件、贴图、截图提取文字并翻译、笔记记录软件、任务管理网站】

    高效办公工具分享--视频转文字.视频播放器.B站视频下载软件.贴图.截图提取文字并翻译.笔记记录软件.任务管理网站 一 前言 二.下载链接及效果 1.视频自动转文字-飞书妙记(目前免费使用!!) 2. ...

最新文章

  1. JavaScript常用基础算法
  2. Fedora 30系统下,用g++编译opencv项目
  3. html按钮按下效果_CSS+HTMLlt;水滴按钮效果gt;
  4. 熔断器熔断时间标准_一种熔断器熔断时间测试电路的制作方法
  5. java表达式语句_Java基础知识笔记第三章:运算符表达式语句
  6. python画苹果标志图片_Mac生成APP图标和启动图的脚本
  7. window server2012服务器上如何安装nginx并启动
  8. python 俄罗斯方块ai_TKinter实现俄罗斯方块
  9. 视频解码测试软件,视频解码:视频解码性能测试_平板电脑评测-中关村在线
  10. 容器监控cadvisor
  11. tiff文件读写等操作(多帧tiff图像保存成的.tif文件)
  12. JAVA实现百度网盘文件上传
  13. webpack中对CSS压缩
  14. java求矩阵条件数_数值分析:矩阵求逆-奇异性、条件数
  15. 计算机域名(domain name)
  16. 多线程编程模式之Single Threaded Execution 模式
  17. linux下查看服务器的cpu、内存大小、硬盘大小
  18. 华东师范大学数据学院2020夏令营机试题解
  19. sql 有则update 无则 insert
  20. c语言不允许对数组大小作动态定义,c语言第07章数组.ppt

热门文章

  1. 新颖的自我介绍_新颖的自我介绍6篇
  2. IOS pushVIewController失败
  3. 二阶矩阵转置怎么求_使用mathematica11软件求解2/3/4阶矩阵的转置矩阵教程
  4. 计算机系相声剧本,大学相声剧本:两种学生
  5. activex控件无法安装解决方法
  6. Android 原生GPS定位 判断室内室外
  7. OpenCV.金字塔(Pyramid).向下金字塔
  8. Youtube更改视频原始语言
  9. Mark一下,以提醒自己
  10. 在线裁剪图片 Jcrop