前言
该文章主要介绍如何爬取b站视频选集信息。
适用范围:如
所需第三方包
1、hutool
链接: 官网地址
一、b站视频页面源码分析
1、所处位置
获取的源码跟别的不太一样,需要的数据是在script里面的;
使用jsoup获取并解析网页源码`
// 获取视频网页源码字符串
html = Jsoup.connect(video_url_edit.getText().trim()).execute();
// jsoup包解析字符串
Document doc = Jsoup.parse(html.body());
// 获取选集信息数据所在字符串
Elements bodys = doc.select("script");
// 遍历打印
for (Element body : bodys){
System.out.println(body.toString());
}
打印内容如下:
分析得所需选集信息数据在第六个script中,索引为5,即途中圈中位置
将后面的json字符串解析之后可以发现数据所处位置
二、程序编写
1.代码
代码如下:
// 获取视频网页源码字符串
html = Jsoup.connect(video_url_edit.getText().trim()).execute();
// jsoup包解析字符串
Document doc = Jsoup.parse(html.body());
// 获取选集信息数据所在字符串
Elements bodys = doc.select("script");
Element element = bodys.get(5);
// 分割出json字符串,并转化成json对象(用的是hutool工具包)
String text = HtmlUtil.cleanHtmlTag(element.toString().trim());
String i = "=";
JSONObject jsonObject = new JSONObject(text.trim().split(i, 2)[1]);
// 按照路径获取选集题目信息所在的json数组
Object vedio_items = jsonObject.getByPath("videoData.pages");
JSONArray vedio_items_json_array = new JSONArray(vedio_items);
Iterable<JSONObject> vedio_items_json_iter = vedio_items_json_array.jsonIter();
// 遍历输出
for (JSONObject iter : vedio_items_json_iter){
System.out.println(iter.getObj("part").toString().trim());
}
总结
其中主要是需要确定所需要的信息在源码中的哪个位置