疫情期间大家在家都无聊透顶,公司同事吧有人发起了推荐电影的帖子,贴主收集了所有人的回复整理成了豆瓣豆列。刚好最近在写爬虫系列文章,就用这个作为具体案例来介绍下另一个神器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开发者工具,页面滑动到最底部,选中分页节点;会发现分页样式单独使用了paginator
css样式进行修饰,点击事件为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);
}
}
这样就可以获取所有的页面链接了,可以存起来备用。
详细观察每个电影上面的信息会发现播放全片
功能有三种类型
更多
链接这里同样使用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);
}
蓝色星球2 | 9.8 | 31789 |
---|---|---|
肖申克的救赎 | 9.7 | 1902833 |
霸王别姬 | 9.6 | 1398550 |
阿甘正传 | 9.5 | 1447658 |
美丽人生 | 9.5 | 919234 |
海贼王 | 9.5 | 111412 |
非自然死亡 | 9.4 | 361096 |
胜者即是正义 | 9.4 | 224077 |
盗梦空间 | 9.3 | 1396540 |
海上钢琴师 | 9.3 | 1159683 |