java spring+mybatis整合如何实现今日头条搞笑动态图片的爬取

发布时间:2021-10-12 09:31:44 作者:柒染
来源:亿速云 阅读:170

Java Spring + MyBatis 整合实现今日头条搞笑动态图片的爬取

目录

  1. 引言
  2. 技术栈介绍
  3. 项目结构
  4. 环境搭建
  5. 数据库设计
  6. 爬虫实现
  7. Spring 整合 MyBatis
  8. 前端展示
  9. 项目部署
  10. 总结

引言

在当今互联网时代,数据爬取技术已经成为获取信息的重要手段之一。今日头条内容丰富的新闻平台,拥有大量的搞笑动态图片资源。本文将详细介绍如何使用 Java Spring 框架和 MyBatis 持久层框架,结合 Jsoup 库,实现今日头条搞笑动态图片的爬取、存储和展示。

技术栈介绍

Spring Framework

Spring 是一个开源的 Java 平台,它提供了全面的基础设施支持,用于开发 Java 应用程序。Spring 的核心特性包括依赖注入(DI)、面向切面编程(AOP)、事务管理、数据访问等。

MyBatis

MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。

Jsoup

Jsoup 是一个用于处理 HTML 的 Java 库,它提供了非常方便的 API,用于提取和操作数据。Jsoup 可以解析 HTML 文档,并通过 DOM、CSS 以及类似 jQuery 的操作方法来提取数据。

项目结构

src
├── main
│   ├── java
│   │   ├── com.example.crawler
│   │   │   ├── config
│   │   │   ├── controller
│   │   │   ├── dao
│   │   │   ├── model
│   │   │   ├── service
│   │   │   └── util
│   ├── resources
│   │   ├── mapper
│   │   ├── static
│   │   └── templates
│   └── webapp
└── test
    └── java

环境搭建

Maven 依赖配置

pom.xml 中添加以下依赖:

<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    <!-- MyBatis -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.4</version>
    </dependency>

    <!-- Jsoup -->
    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.13.1</version>
    </dependency>

    <!-- MySQL -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <!-- Lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

Spring 配置

application.properties 中配置 Spring Boot 和数据库连接:

# Spring Boot
spring.application.name=TodayHeadlineCrawler
server.port=8080

# Thymeleaf
spring.thymeleaf.cache=false
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html

# MyBatis
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.crawler.model

# Database
spring.datasource.url=jdbc:mysql://localhost:3306/today_headline?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

MyBatis 配置

MyBatisConfig.java 中配置 MyBatis:

@Configuration
@MapperScan("com.example.crawler.dao")
public class MyBatisConfig {
}

数据库设计

创建 today_headline 数据库,并设计 funny_image 表:

CREATE TABLE `funny_image` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `image_url` varchar(255) DEFAULT NULL,
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

爬虫实现

Jsoup 解析网页

JsoupUtil.java 中实现网页解析:

public class JsoupUtil {
    public static List<FunnyImage> parseFunnyImages(String url) throws IOException {
        List<FunnyImage> images = new ArrayList<>();
        Document doc = Jsoup.connect(url).get();
        Elements elements = doc.select("div.article-content img");
        for (Element element : elements) {
            FunnyImage image = new FunnyImage();
            image.setTitle(element.attr("alt"));
            image.setImageUrl(element.attr("src"));
            images.add(image);
        }
        return images;
    }
}

数据存储

FunnyImageService.java 中实现数据存储:

@Service
public class FunnyImageService {
    @Autowired
    private FunnyImageMapper funnyImageMapper;

    public void saveFunnyImages(List<FunnyImage> images) {
        for (FunnyImage image : images) {
            funnyImageMapper.insert(image);
        }
    }
}

Spring 整合 MyBatis

Mapper 接口

FunnyImageMapper.java 中定义 Mapper 接口:

@Mapper
public interface FunnyImageMapper {
    int insert(FunnyImage funnyImage);
}

Service 层

FunnyImageService.java 中实现业务逻辑:

@Service
public class FunnyImageService {
    @Autowired
    private FunnyImageMapper funnyImageMapper;

    public void saveFunnyImages(List<FunnyImage> images) {
        for (FunnyImage image : images) {
            funnyImageMapper.insert(image);
        }
    }
}

Controller 层

FunnyImageController.java 中实现控制器:

@RestController
@RequestMapping("/funny-images")
public class FunnyImageController {
    @Autowired
    private FunnyImageService funnyImageService;

    @GetMapping("/crawl")
    public String crawlFunnyImages() throws IOException {
        String url = "https://www.toutiao.com/ch/funny/";
        List<FunnyImage> images = JsoupUtil.parseFunnyImages(url);
        funnyImageService.saveFunnyImages(images);
        return "Crawl successful!";
    }
}

前端展示

Thymeleaf 模板引擎

index.html 中使用 Thymeleaf 展示图片:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Funny Images</title>
</head>
<body>
    <h1>Funny Images</h1>
    <div th:each="image : ${images}">
        <h2 th:text="${image.title}"></h2>
        <img th:src="${image.imageUrl}" alt="Funny Image">
    </div>
</body>
</html>

图片展示

FunnyImageController.java 中添加展示图片的方法:

@Controller
public class FunnyImageController {
    @Autowired
    private FunnyImageService funnyImageService;

    @GetMapping("/")
    public String index(Model model) {
        List<FunnyImage> images = funnyImageService.getAllFunnyImages();
        model.addAttribute("images", images);
        return "index";
    }
}

项目部署

Tomcat 部署

将项目打包成 WAR 文件,并部署到 Tomcat 服务器

mvn clean package
cp target/today-headline-crawler.war /path/to/tomcat/webapps/

Docker 部署

创建 Dockerfile

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD target/today-headline-crawler.war app.war
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.war"]

构建并运行 Docker 容器:

docker build -t today-headline-crawler .
docker run -p 8080:8080 today-headline-crawler

总结

通过本文的介绍,我们详细讲解了如何使用 Java Spring 框架和 MyBatis 持久层框架,结合 Jsoup 库,实现今日头条搞笑动态图片的爬取、存储和展示。希望本文能够帮助读者更好地理解和掌握这些技术,并在实际项目中应用。

推荐阅读:
  1. 我的Java秋招面经大合集
  2. java之网络爬虫介绍

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java spring mybatis

上一篇:VBS如何实现MD5加密算法

下一篇:常用VBS代码有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》