在现代的 Java Web 开发中,Spring Boot 是一个非常流行且高效的框架。它不仅简化了项目的搭建和配置,还内置了强大的任务调度功能 —— @Scheduled 注解,非常适合用于执行定时采集、数据同步、日志清理等周期性任务。
本文将介绍如何在 Spring Boot 项目中实现定时采集网站内容的功能,并将你提供的多个链接插入到代码中进行演示采集。
HttpClient
或 RestTemplate
Jsoup
我们希望每 5 分钟自动访问以下网址并采集页面标题:
深色版本https://www.020taijiyy.com
https://sohu.020taijiyy.com
...
你可以通过 Spring Initializr 创建一个基础的 Spring Boot 项目,选择如下依赖:
由于 Spring Boot 没有直接提供 HTML 解析器,我们需要手动添加 Jsoup 到 pom.xml
文件中:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.16.1</version>
</dependency>
创建一个名为 WebScrapingTask.java
的组件类,使用 @Scheduled
来定义定时任务。
package com.example.demo.scraper;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.List;
@Component
public class WebScrapingTask {
// 插入所有要采集的链接
private static final List<String> URLs = List.of(
"https://www.020taijiyy.com",
"https://sohu.020taijiyy.com",
"https://jim.020taijiyy.com",
"https://wap.020taijiyy.com",
"https://sjb.020taijiyy.com",
"https://sweet.020taijiyy.com",
"https://cctv.020taijiyy.com",
"https://ouguanzhibo.020taijiyy.com",
"https://sina.020taijiyy.com",
"https://share.020taijiyy.com",
"https://zbsjb.020taijiyy.com",
"https://live.020taijiyy.com",
"https://shijubei.020taijiyy.com",
"https://zbshijubi.020taijiyy.com",
"https://shijubeizb.020taijiyy.com",
"https://shijiebei.020taijiyy.com",
"https://qiuxing.020taijiyy.com",
"https://zuqiu.020taijiyy.com",
"https://saishi.020taijiyy.com",
"https://zhibo.020taijiyy.com",
"https://lanqiu.020taijiyy.com",
"https://nba.020taijiyy.com",
"https://vip.020taijiyy.com",
"https://online.020taijiyy.com",
"https://free.020taijiyy.com",
"https://360zhibo.020taijiyy.com",
"https://lvyin.020taijiyy.com",
"https://jrs.020taijiyy.com",
"https://m.020taijiyy.com",
"https://020taijiyy.com"
);
@Scheduled(fixedRate = 300000) // 每 5 分钟执行一次(单位:毫秒)
public void scrapeWebsites() {
for (String url : URLs) {
try {
Document doc = Jsoup.connect(url).get();
String title = doc.title();
System.out.println("URL: " + url);
System.out.println("Title: " + title);
System.out.println("----------------------------");
} catch (IOException e) {
System.err.println("Error scraping URL: " + url + ", Error: " + e.getMessage());
}
}
}
}
在你的主应用启动类上添加 @EnableScheduling
注解以启用定时任务:
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
当你运行这个 Spring Boot 应用后,控制台将会每 5 分钟输出这些网站的标题信息,例如:
URL: https://www.020taijiyy.com
----------------------------
URL: https://nba.020taijiyy.com
----------------------------
try-catch
处理,实际生产环境应考虑记录日志、重试机制、限流策略等。ThreadPoolTaskScheduler
实现并发采集。通过本文的学习,你应该已经掌握了如何在 Spring Boot 中使用 @Scheduled
实现定时采集网站内容的方法,并成功将你提供的多个链接集成到项目中。定时采集是构建数据驱动型应用的重要组成部分,结合 Spring Boot 的强大生态,你可以轻松构建出稳定、高效的爬虫系统。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。