B站网页端下载视频,直接浏览器下载或者Java实现下载
Posted 符华-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B站网页端下载视频,直接浏览器下载或者Java实现下载相关的知识,希望对你有一定的参考价值。
B站网页端下载视频,只需要调用两个api即可
1、通过bv号查询视频信息,找到视频的cid:
http://api.bilibili.com/x/web-interface/view?bvid=BV1Zq4y1R7RV
2、找到cid后,再调用另一个api,bvid输入bv号,cid输入刚刚找到cid
https://api.bilibili.com/x/player/playurl?otype=json&fnver=0&fnval=2&player=1&qn=64&bvid=BV1Zq4y1R7RV&cid=419316130
3、在返回的json中,找到url,直接点击下载
不嫌麻烦的,也可以用java实现,处理一下返回的json数据就行
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入BV号:");
String url = getUrl(scanner.next());
System.out.print("请输入视频名称:");
download(url,scanner.next());
}
/**
* 这里的HttpUtil、JSONUtil都是用的hutool的,因为我项目中刚好有这个依赖,就直接用了
* 如果没有的话,用 HttpURLConnection 发送请求也可
*/
public static String getUrl(String bv){
//根据bv号查询信息,得到cid
String path = "http://api.bilibili.com/x/web-interface/view?bvid="+bv;
//得到返回的json数据(HttpUtil.get() 直接发送一个get请求)
JSONObject json1 = JSONUtil.parseObj(HttpUtil.get(path));
//获取返回的data数据信息
JSONObject data1 = JSONUtil.parseObj(json1.get("data"));
//得到cid
String cid = data1.get("cid").toString();
String url = "https://api.bilibili.com/x/player/playurl?otype=json&fnver=0&fnval=2&player=1&qn=64&bvid="+bv+"&cid="+cid+"";
JSONObject json2 = JSONUtil.parseObj(HttpUtil.get(url));
JSONObject data2 = JSONUtil.parseObj(json2.get("data"));
JSONArray durl = JSONUtil.parseArray(data2.get("durl"));
JSONObject obj = JSONUtil.parseObj(durl.get(0));
return obj.get("url").toString();
}
public static void download(String urlPath,String fileName) {
try {
long begin = System.currentTimeMillis();
URL url = new URL(urlPath);
//这里因为要设置请求的协议,无法直接使用HttpUtil.get(),所以还是用的 HttpURLConnection来请求的
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
//这里必须要设置bilibili的协议,否则无法下载
conn.setRequestProperty("Referer", "https://www.bilibili.com");
conn.setRequestProperty("Sec-Fetch-Mode", "no-cors");
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/77.0.3865.90 Safari/537.36");
conn.setConnectTimeout(10 * 1000);
InputStream input = conn.getInputStream();
FileUtils.copyInputStreamToFile(input, new File("C:\\\\Users\\\\Admin\\\\Downloads\\\\" + fileName + ".flv"));
input.close();
long end = System.currentTimeMillis();
System.out.println("耗时:" + (end - begin) / 1000 + "秒");
System.out.println("下载完成!");
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
以上是关于B站网页端下载视频,直接浏览器下载或者Java实现下载的主要内容,如果未能解决你的问题,请参考以下文章