前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >万网皆可爬-爬虫实战系列之-爬取高分电影拯救无聊的你

万网皆可爬-爬虫实战系列之-爬取高分电影拯救无聊的你

作者头像
一个程序猿的异常
发布2023-07-24 18:08:16
2060
发布2023-07-24 18:08:16
举报
文章被收录于专栏:一个程序猿的异常

缘起

疫情期间大家在家都无聊透顶,公司同事吧有人发起了推荐电影的帖子,贴主收集了所有人的回复整理成了豆瓣豆列。刚好最近在写爬虫系列文章,就用这个作为具体案例来介绍下另一个神器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类型的即可,使用正则进行过滤。

代码语言:javascript
复制
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选择器进行节点选中,然后获取对应的文本内容。

代码语言:javascript
复制
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选择器进行操作。

代码语言:javascript
复制
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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一个程序猿的异常 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 缘起
  • Jsoup是什么
  • 页面结构分析
    • 分页数据分析
      • 单个电影详情分析
        • 播放全片
        • 获取详情
    • TOP10电影推荐
    相关产品与服务
    云开发 CLI 工具
    云开发 CLI 工具(Cloudbase CLI Devtools,CCLID)是云开发官方指定的 CLI 工具,可以帮助开发者快速构建 Serverless 应用。CLI 工具提供能力包括文件储存的管理、云函数的部署、模板项目的创建、HTTP Service、静态网站托管等,您可以专注于编码,无需在平台中切换各类配置。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档