zoukankan      html  css  js  c++  java
  • Spring Boot 慕课网爬虫

     

    一、项目简介(Demo简介)

      慕课网。。。打了三个字,还是不介绍了避免广告。一个简单爬虫该网站的demo。

      地址:https://www.imooc.com/course/list?c=springboot

    二、项目结构

       项目多层架构:common层,controller层,entity层,repository层,由于Demo比较简单就没有细分那么多了(偷懒)。

      

    三、项目说明

    F12 查看页面html结构,发现如下

    本次我只抽取了 课程名称,url,等级,描述四个字段。

    • 数据库,创建imooc_spider数据库,表course。
    • JPA,这里我结合Spring boot JPA,application.yml配置如下。创建对应的CourseEntiy

    • @Entity @Table(name = "course") public class CourseEntity { @Id @GeneratedValue private Integer id; private String name; private String url; private String desc; private String level; }

        

    • 解析html。http请求这里就不介绍了,重点就是解析html,采用Jsoup,当然也可以使用正则,但是我觉得Jsoup比较直观方便操作。解析的代码要结合页面上的html。
    • div[class=clearfix] 代表页面 <div class="clearfix">
      如果直接<div class="clearfix"> 会提示找不到改节点
    • package com.jet.imoocspider.common;
      
      import java.util.ArrayList;
      import java.util.List;
      
      import com.jet.imoocspider.entity.CourseEntity;
      import org.jsoup.Jsoup;
      import org.jsoup.nodes.Document;
      import org.jsoup.nodes.Element;
      import org.jsoup.select.Elements;
      
      public class HtmlParse {
      
          public static List<CourseEntity> getData (String html) throws Exception{
              //获取的数据,存放在集合中
              List<CourseEntity> data = new ArrayList<CourseEntity>();
              //采用Jsoup解析
              Document doc = Jsoup.parse(html);
              //获取html标签中的内容
              Elements elements=doc.select("div[class=clearfix]").select("div[class=course-card-container]").select("a[class=course-card]");
              for (Element ele:elements) {
                  String url="https://www.imooc.com".concat(ele.attr("href"));
                  String name=ele.select("div[class=courseEntity-card-content]").select("h3[class=courseEntity-card-name]").html();
                  Elements elementLevelParent=ele.select("div[class=courseEntity-card-content]").select("div[class=clearfix courseEntity-card-bottom]");
                  String level=elementLevelParent.select("div[class=courseEntity-card-info]").tagName("span").first().text();
                  String desc=elementLevelParent .select("p[class=courseEntity-card-desc]").text();
      
                  CourseEntity courseEntity =new CourseEntity();
                  courseEntity.setDesc(desc);
                  courseEntity.setUrl(url);
                  courseEntity.setName(name);
                  courseEntity.setLevel(level);
      
      
                  //将每一个对象的值,保存到List集合中
                  data.add(courseEntity);
              }
              //返回数据
              return data;
          }
      }
      
    •  

  • 相关阅读:
    变态的IE
    视频豪横时代,应用如何快速构建视频点播能力?
    阿里云峰会 | 阿里云CDN六大边缘安全能力,全力助推政企数字化转型
    从 2018 年 Nacos 开源说起
    完美日记:实现高弹性高稳定电商架构
    Dubbo 迈出云原生重要一步 应用级服务发现解析
    如何提升微服务的幸福感
    怀里橘猫柴犬,掌上代码江湖——对话阿里云 MVP郭旭东
    云原生时代消息中间件的演进路线
    solr中特殊字符的处理
  • 原文地址:https://www.cnblogs.com/LeeHc/p/9426642.html
Copyright © 2011-2022 走看看