From 7f9885253f5b31a76b1da550ca2e2bbcee629f23 Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Sat, 31 Jan 2026 09:54:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tem/bocai/schedules/CrawlerSchedule.java | 33 +++++++++---------- .../tem/bocai/util/CompletedTodayCrawler.java | 18 +++++----- .../bocai/util/LotteryWebMagicCrawler.java | 15 +++++---- 3 files changed, 31 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/tem/bocai/schedules/CrawlerSchedule.java b/src/main/java/com/tem/bocai/schedules/CrawlerSchedule.java index 1a2da1a..9c6697d 100644 --- a/src/main/java/com/tem/bocai/schedules/CrawlerSchedule.java +++ b/src/main/java/com/tem/bocai/schedules/CrawlerSchedule.java @@ -3,6 +3,7 @@ package com.tem.bocai.schedules; import com.tem.bocai.entity.LoginInfoResult; import com.tem.bocai.repository.LoginInfoRepository; import com.tem.bocai.util.*; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -16,6 +17,7 @@ import java.io.IOException; import java.io.InputStreamReader; @Component +@Slf4j public class CrawlerSchedule { @Autowired @@ -35,7 +37,7 @@ public class CrawlerSchedule { // 从7:00分30秒起每5分钟执行一次 @Scheduled(cron = "30 0/5 * * * ?") public void executeLotteryDraw() { - System.out.println("开始爬取开奖结果..."); + log.info("开始爬取开奖结果"); int retryCount = 0; boolean success = false; LoginInfoResult firstByOrderByCreateTimeDesc = loginInfoRepository.findFirstByOrderByCreateTimeDesc() @@ -46,17 +48,15 @@ public class CrawlerSchedule { String token = tokenCacheService.getToken(); while (!success && retryCount < MAX_CRA) { - System.out.println("\n=== 第 " + (retryCount + 1) + " 次尝试获取开奖结果 ==="); - + log.info("\n=== 第 " + (retryCount + 1) + " 次尝试获取开奖结果 ==="); if (token == null || token.isEmpty()) { - System.out.println("token为空,从数据库重新获取"); + log.info("token为空,从数据库重新获取"); token = tokenCacheService.getTokenSqlite(); if (token == null) { - System.err.println("无法获取有效token"); + log.error("无法获取有效token"); } } - System.out.println("使用token: " + (token.length() > 20 ? token.substring(0, 20) + "..." : token)); - + log.info("使用token: " + (token.length() > 20 ? token.substring(0, 20) + "..." : token)); // 创建爬虫实例,传入token LotteryWebMagicCrawler crawler = new LotteryWebMagicCrawler(token,pypath); @@ -72,8 +72,7 @@ public class CrawlerSchedule { success = LotteryWebMagicCrawler.isLastParseSuccess(); if (!success) { - System.out.println("本次尝试未解析到数据"); - + log.info("本次尝试未解析到数据"); // 重新获取token(下次重试用) token = tokenCacheService.getTokenSqlite(); retryCount++; @@ -87,12 +86,12 @@ public class CrawlerSchedule { } } } else { - System.out.println("成功解析到数据"); + log.info("成功解析到数据"); } } if (!success) { - System.err.println("获取开奖结果失败,所有重试均未成功"); + log.error("获取开奖结果失败,所有重试均未成功"); } } @@ -120,14 +119,13 @@ public class CrawlerSchedule { // 从7:00分30秒起每5分钟执行一次爬取今日已经结算 @Scheduled(cron = "30 0/5 * * * ?") public void executeSettlement() { - System.out.println("开始爬取今日已经结算..."); + log.info("开始爬取今日已经结算..."); int retryCount = 0; boolean success = false; String token = tokenCacheService.getToken(); while (!success && retryCount < MAX_CRA) { - System.out.println("\n=== 第 " + (retryCount + 1) + " 次尝试获取今日注单 ==="); - + log.info("\n=== 第 " + (retryCount + 1) + " 次尝试获取今日注单 ==="); if (token == null || token.isEmpty()) { System.out.println("token为空,从数据库重新获取"); token = tokenCacheService.getTokenSqlite(); @@ -153,8 +151,7 @@ public class CrawlerSchedule { success = CompletedTodayCrawler.isLastParseSuccess(); if (!success) { - System.out.println("本次尝试未解析到数据"); - + log.info("本次尝试未解析到数据"); // 重新获取token(下次重试用) token = tokenCacheService.getTokenSqlite(); retryCount++; @@ -168,12 +165,12 @@ public class CrawlerSchedule { } } } else { - System.out.println("成功解析到数据"); + log.info("成功解析到数据"); } } if (!success) { - System.err.println("获取今日注单失败,所有重试均未成功"); + log.error("获取今日注单失败,所有重试均未成功"); } } diff --git a/src/main/java/com/tem/bocai/util/CompletedTodayCrawler.java b/src/main/java/com/tem/bocai/util/CompletedTodayCrawler.java index 2152c3a..9bfb293 100644 --- a/src/main/java/com/tem/bocai/util/CompletedTodayCrawler.java +++ b/src/main/java/com/tem/bocai/util/CompletedTodayCrawler.java @@ -5,6 +5,7 @@ import com.tem.bocai.entity.CompletedToday; import com.tem.bocai.repository.CompletedTodayRepository; import com.tem.bocai.repository.LoginInfoRepository; import com.tem.bocai.service.CompletedTodayService; +import lombok.extern.slf4j.Slf4j; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; @@ -26,7 +27,7 @@ import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; - +@Slf4j public class CompletedTodayCrawler implements PageProcessor { private final String token; @@ -66,36 +67,33 @@ public class CompletedTodayCrawler implements PageProcessor { @Override public void process(Page page) { String url = page.getUrl().toString(); - System.out.println("处理页面: " + url); - + log.info("处理页面: " + url); Html html = page.getHtml(); String content = html.toString(); // 打印一些基本信息 - System.out.println("页面标题: " + html.xpath("//title/text()").get()); - System.out.println("页面大小: " + content.length() + " 字符"); - + log.info("页面标题: " + html.xpath("//title/text()").get()); // 检查是否有"暂无数据"提示 if (content.contains("暂无数据")) { - System.out.println("警告: 页面显示'暂无数据'"); + log.info("警告: 页面显示'暂无数据'"); lastParseSuccess = true; // 标记失败 return; } if (content.contains("可赢金额")) { - System.out.println("未结明细不用爬"); + log.info("未结明细不用爬"); lastParseSuccess = false; // 标记失败 return; } // 解析注单数据 List> betList = parseBetHtml(content); if (betList.isEmpty()) { - System.out.println("未解析到注单数据"); + log.info("未解析到注单数据"); lastParseSuccess = false; // 标记失败 // 尝试从其他可能的位置解析 //extractDebugInfo(html); } else { lastParseSuccess = true; // 标记成功 - System.out.println("解析到 " + betList.size() + " 条注单数据"); + log.info("解析到 " + betList.size() + " 条注单数据"); List completedTodayList = convertForDatabase(betList); SQLiteUtil.saveCompletedToday(completedTodayList); } diff --git a/src/main/java/com/tem/bocai/util/LotteryWebMagicCrawler.java b/src/main/java/com/tem/bocai/util/LotteryWebMagicCrawler.java index 08a0e37..7398c01 100644 --- a/src/main/java/com/tem/bocai/util/LotteryWebMagicCrawler.java +++ b/src/main/java/com/tem/bocai/util/LotteryWebMagicCrawler.java @@ -1,6 +1,7 @@ package com.tem.bocai.util; import com.fasterxml.jackson.databind.SerializationFeature; +import lombok.extern.slf4j.Slf4j; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; @@ -25,6 +26,7 @@ import java.io.IOException; import java.util.*; //开奖的历史结果 +@Slf4j public class LotteryWebMagicCrawler implements PageProcessor { private final String token; @@ -65,12 +67,11 @@ public class LotteryWebMagicCrawler implements PageProcessor { Html html = page.getHtml(); // 打印页面基本信息 - System.out.println("页面URL: " + page.getUrl()); - System.out.println("页面标题: " + html.xpath("//title/text()").get()); - + log.info("页面URL: " + page.getUrl()); + log.info("页面标题: " + html.xpath("//title/text()").get()); // 示例:提取所有表格数据 Selectable tables = html.xpath("//table"); - System.out.println("找到 " + tables.nodes().size() + " 个表格"); + log.info("找到 " + tables.nodes().size() + " 个表格"); if(tables.nodes().isEmpty()){ lastParseSuccess = false; }else { @@ -238,7 +239,7 @@ public class LotteryWebMagicCrawler implements PageProcessor { SQLiteUtil.writeToSQLite(resultList); // 将数据写入JSON文件(保留原有功能) writeToJsonFile(resultList); - System.out.println("打印结果===" + resultList); + log.info("历史爬虫打印结果===" + resultList); return resultList; } @@ -279,10 +280,10 @@ public class LotteryWebMagicCrawler implements PageProcessor { // 将 List 写入 JSON 文件 objectMapper.writeValue(outputFile, resultList); - System.out.println("数据已成功写入文件: " + outputFile.getAbsolutePath()); - + log.info("数据已成功写入文件: " + outputFile.getAbsolutePath()); } catch (IOException e) { e.printStackTrace(); + log.error("写入 JSON 文件失败: " + e.getMessage(), e); throw new RuntimeException("写入 JSON 文件失败: " + e.getMessage(), e); } }