缘起
疫情期间大家在家都无聊透顶,公司同事吧有人发起了推荐电影的帖子,贴主收集了所有人的回复整理成了豆瓣豆列。刚好最近在写爬虫系列文章,就用这个作为具体案例来介绍下另一个神器jsoup的使用吧。
Jsoup是什么
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
Jsoup使用跟JQuery一样的语法进行节点操作,具体JQuery选择器语法可以参考 https://www.cnblogs.com/zhangziqiu/archive/2009/05/03/jQuery-Learn-2.html 进行学习,这里不在赘述。
页面结构分析
分页数据分析
老规矩F12打开chrome开发者工具,页面滑动到最底部,选中分页节点;会发现分页样式单独使用了paginatorcss样式进行修饰,点击事件为div下的a节点,可以直接使用css选择器选中对应的Dom节点然后获取对应的链接地址;

示例代码,因为分页信息包含前页、后页信息,这个不是我们需要的,只选取Number类型的即可,使用正则进行过滤。
Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
Elements page = document.select(".paginator a");
for (Element p : page) {
String href = p.attr("href");
String text = p.text();
if (pattern.matcher(text).matches()) {
System.out.println(href + " " + text);
}
}
这样就可以获取所有的页面链接了,可以存起来备用。
单个电影详情分析
播放全片
详细观察每个电影上面的信息会发现播放全片功能有三种类型
- 无播放列表
- 3个以内的播放列表
- 超过三个显示
更多链接

这里同样适用CSS选择器进行节点选中,然后获取对应的文本内容。
Element videoItem = item.select(".doulist-video-items").first();
if (videoItem != null) {
Elements videoAtags = videoItem.getElementsByTag("a");
for (Element e : videoAtags) {
String href = e.attr("href");
String text = e.text();
if (Objects.equals("更多", text)) {
continue;
}
if (href.contains("www.douban.com/link2")) {
String urlDecode = URLDecoder.decode(href);
href = urlDecode.split("=")[1];
}
System.out.println(text + " " + href);
}
}
获取详情
我们需要的数据包含电影名称,评分,评价人数关键信息如图

同样适用css选择器进行操作。
Elements itemElements = document.select(".article .doulist-item");
int size = itemElements.size();
for (int i = 0; i < size; i++) {
Element item = itemElements.get(i);
Element title = item.selectFirst("div.title");
Element ratingNums = item.selectFirst(".rating_nums");
Element rating = item.select(".rating").get(0).getElementsByTag("span").last();
String titleText = title.text();
String ratingNumsText = ratingNums.text();
String ratingText = rating.text().replaceAll("\\(", "").replaceAll("人评价\\)", "");
System.out.println(titleText);
System.out.println(ratingNumsText);
System.out.println(ratingText);
}
TOP10电影推荐
| 电影名称 | 评分 | 评价人数 |
|---|---|---|
| 蓝色星球2 Blue Planet II | 9.8 | 31789 |
| 肖申克的救赎 The Shawshank Redemption | 9.7 | 1902833 |
| 霸王别姬 | 9.6 | 1398550 |
| 阿甘正传 Forrest Gump | 9.5 | 1447658 |
| 美丽人生 La vita è bella | 9.5 | 919234 |
| 海贼王 ワンピース | 9.5 | 111412 |
| 非自然死亡 アンナチュラル | 9.4 | 361096 |
| 胜者即是正义 リーガル・ハイ | 9.4 | 224077 |
| 盗梦空间 Inception | 9.3 | 1396540 |
| 海上钢琴师 La leggenda del pianista sull'oceano | 9.3 | 1159683 |
关注公众号回复电影1024获取源代码和所有电影

电影1024获取源代码和所有电影