通过爬虫获取B站(哔哩哔哩)指定UP主的全部视频信息,并根据播放量从大到小排序,最后输出前20个视频的信息。
import java.io.IOException;
import java.net.URL;
import java.util.*;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public class BilibiliCrawler {
public static void main(String[] args) throws IOException {
Scanner input = new Scanner(System.in);
System.out.println("请输入需要查询的B站UP主的UID:");
String uid = input.nextLine();
String url = "https://space.bilibili.com/ajax/member/getSubmitVideos?mid=" + uid + "&pagesize=100";
Document doc = Jsoup.connect(url).get();
int pages = Integer.parseInt(doc.select("span.page-data > b").text().split("/")[1]);
List<Map<String, String>> videoList = new ArrayList<>();
for (int i = 1; i <= pages; i++) {
String pageUrl = "https://space.bilibili.com/ajax/member/getSubmitVideos?mid="
+ uid + "&pagesize=100&page=" + i;
Document pageDoc = Jsoup.connect(pageUrl).get();
for (Element element : pageDoc.select("li.small-item")) {
Map<String, String> map = new HashMap<>();
map.put("title", element.select("a.title").text());
map.put("link", "https://www.bilibili.com/video/" + element.attr("data-aid"));
map.put("play_count", element.select("span.play").text().replaceAll(",", ""));
videoList.add(map);
}
}
Collections.sort(videoList, new Comparator<Map<String, String>>() {
@Override
public int compare(Map<String, String> map1, Map<String, String> map2) {
int playCount1 = Integer.parseInt(map1.get("play_count"));
int playCount2 = Integer.parseInt(map2.get("play_count"));
return playCount2 - playCount1;
}
});
System.out.println("以下是该UP主的前20个视频信息:");
for (int i = 0; i < 20 && i < videoList.size(); i++) {
Map<String, String> map = videoList.get(i);
System.out.println((i + 1) + ". 标题:" + map.get("title")
+ ",播放量:" + map.get("play_count")
+ ",链接:" + map.get("link"));
}
}
}
运行该程序后,会要求用户输入B站UP主的UID,然后通过Jsoup库中的connect方法,将格式化后的URL连接到B站上获取指定UP主的全部视频信息。获取到的信息包括视频标题、播放量和链接等,然后将它们存储到一个List<Map<String, String>>类型的数据结构中,并根据播放量从大到小进行排序。最后,程序输出排序后的前20个视频信息,包括标题、播放量和链接等。
该程序使用了Java中的网络编程、文件读写、正则表达式、集合类等多种技术,能够实现简单的爬虫功能,可以用于获取各种网站上的信息数据,并进行简单的处理和分析。