您好,登录后才能下订单哦!
在当今互联网时代,数据爬取技术已经成为获取信息的重要手段之一。今日头条内容丰富的新闻平台,拥有大量的搞笑动态图片资源。本文将详细介绍如何使用 Java Spring 框架和 MyBatis 持久层框架,结合 Jsoup 库,实现今日头条搞笑动态图片的爬取、存储和展示。
Spring 是一个开源的 Java 平台,它提供了全面的基础设施支持,用于开发 Java 应用程序。Spring 的核心特性包括依赖注入(DI)、面向切面编程(AOP)、事务管理、数据访问等。
MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。
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
在 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>
在 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
在 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;
在 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);
}
}
}
在 FunnyImageMapper.java
中定义 Mapper 接口:
@Mapper
public interface FunnyImageMapper {
int insert(FunnyImage funnyImage);
}
在 FunnyImageService.java
中实现业务逻辑:
@Service
public class FunnyImageService {
@Autowired
private FunnyImageMapper funnyImageMapper;
public void saveFunnyImages(List<FunnyImage> images) {
for (FunnyImage image : images) {
funnyImageMapper.insert(image);
}
}
}
在 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!";
}
}
在 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";
}
}
将项目打包成 WAR 文件,并部署到 Tomcat 服务器:
mvn clean package
cp target/today-headline-crawler.war /path/to/tomcat/webapps/
创建 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 库,实现今日头条搞笑动态图片的爬取、存储和展示。希望本文能够帮助读者更好地理解和掌握这些技术,并在实际项目中应用。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。