仿写淘聊彩票竞彩足球APP源码爬虫算法研究 1.springboot整合webmagic爬取静态动态页面 2.下载对应的驱动 chromedriver.storage.googleapis.com/index.html 3.下载webmagic源码并修改里面的配置 我这里下载的是最新版本0.7.5
github.com/code4craft/… 4、下载完成后通过idea打开,修改 webmagic-selenium 包中的WebDriverPool 和 SeleniumDownloader
修改1:WebDriverPool中 private static final String DEFAULT_CONFIG_FILE = "/data/webmagic/webmagic-selenium/config.ini";将 Selenium 配置文件路径写死了,需要改变配置路径:private static final String DEFAULT_CONFIG_FILE = “selenium.properties”;,同时修改读取配置文件的方式:sConfig.load(Thread.currentThread().getContextClassLoader().getResourceAsStream(configFile)); 修改2:Selenium在调用Chrome浏览器时,Chrome浏览器默认会弹出界面,可以同时设置 setHeadless() 来避免弹出Chrome浏览器。
爬虫数据到数据库保存
定时爬虫代码如下:StaticScheduleTask.java package com.qihang.schedul;
import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.qihang.domain.basketball.BasketballMatchDO; import com.qihang.domain.beidan.BeiDanMatchDO; import com.qihang.domain.football.FootballMatchDO; import com.qihang.domain.winburden.WinBurdenMatchDO; import com.qihang.enumeration.ball.BettingStateEnum; import com.qihang.mapper.basketball.BasketballMatchMapper; import com.qihang.mapper.beidan.BeiDanMatchMapper; import com.qihang.mapper.football.FootballMatchMapper; import com.qihang.mapper.winburden.WinBurdenMatchMapper; import com.qihang.reptile.LotteryProcessor; import com.qihang.service.basketball.IBasketballMatchService; import com.qihang.service.beidan.IBeiDanMatchService; import com.qihang.service.football.IFootballMatchService; import com.qihang.service.order.ILotteryOrderService; import com.qihang.service.winburden.IWinBurdenMatchService; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Lazy; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled;
import javax.annotation.Resource; import java.util.Date; import java.util.List;
/**
-
@author qihang */ @Configuration @EnableScheduling @Lazy(value = false) @Slf4j public class StaticScheduleTask { @Resource private LotteryProcessor lotteryProcessor;
@Resource private FootballMatchMapper footballMatchMapper;
@Resource private BasketballMatchMapper basketballMatchMapper;
@Resource private IFootballMatchService footballMatchService;
@Resource private IBasketballMatchService basketballMatchService;
@Resource private BeiDanMatchMapper beiDanMatchMapper; @Resource private IBeiDanMatchService beiDanMatchService;
@Resource private ILotteryOrderService lotteryOrderService;
@Resource private WinBurdenMatchMapper winBurdenMatchMapper;
@Resource private IWinBurdenMatchService winBurdenMatchService;
/**
- 处理订单没出票采用邮件通知 */ @Scheduled(cron = "0 0/2 * * * ?") private void toEmail() { lotteryOrderService.NoTicketIssuedSedEmail(); }
@Scheduled(cron = "0 0/9 * * * ?") private void configureProcessorTasks() { try { log.info("执行爬虫run【{}】", DateUtil.now()); //执行爬虫 lotteryProcessor.run(); }catch (Exception exception){ log.info("执行爬虫【{}】错误:"+exception.getMessage(), DateUtil.now()); } }
/**
-
执行每60秒执行派奖计算 */ @Scheduled(cron = "0 0/1 * * * ?") private void configureTasks() { log.info("爬虫定时任务触发时间【{}】", DateUtil.now()); //查询足球当天的比赛记录 List footballMatchList = footballMatchMapper.selectList(new QueryWrapper().lambda().le(FootballMatchDO::getDeadline, DateUtil.now()).eq(FootballMatchDO::getState, "1")); //循环查找看比赛截止时间是否到了,到了就关闭这个比赛下注 Date date = new Date(); for (FootballMatchDO footballMatch : footballMatchList) { if (date.compareTo(footballMatch.getDeadline()) > 0 || date.compareTo(footballMatch.getDeadline()) == 0) { footballMatch.setState(BettingStateEnum.NO.getKey()); footballMatchMapper.updateById(footballMatch); } } //篮球当前的记录 List basketballMatchList = basketballMatchMapper.selectList(new QueryWrapper().lambda().le(BasketballMatchDO::getDeadline, DateUtil.now()).eq(BasketballMatchDO::getState, "1")); //循环查找看比赛截止时间是否到了,到了就关闭这个比赛下注 for (BasketballMatchDO basketballMatch : basketballMatchList) { if (date.compareTo(basketballMatch.getDeadline()) > 0 || date.compareTo(basketballMatch.getDeadline()) == 0) { basketballMatch.setState(BettingStateEnum.NO.getKey()); basketballMatchMapper.updateById(basketballMatch); } }
//北单当天的记录 List beiDanMatchList = beiDanMatchMapper.selectList(new QueryWrapper().lambda().le(BeiDanMatchDO::getDeadline, DateUtil.now()).eq(BeiDanMatchDO::getState, "1")); //循环查找看比赛截止时间是否到了,到了就关闭这个比赛下注 for (BeiDanMatchDO beiDanMatch : beiDanMatchList) { if (date.compareTo(beiDanMatch.getDeadline()) > 0 || date.compareTo(beiDanMatch.getDeadline()) == 0) { beiDanMatch.setState(BettingStateEnum.NO.getKey()); beiDanMatchMapper.updateById(beiDanMatch); } } //胜负彩 List winBurdenMatchList = winBurdenMatchMapper.selectList(new QueryWrapper().lambda().le(WinBurdenMatchDO::getDeadline, DateUtil.now()).eq(WinBurdenMatchDO::getState, "1")); //循环查找看比赛截止时间是否到了,到了就关闭这个比赛下注 for (WinBurdenMatchDO winBurdenMatch : winBurdenMatchList) { if (date.compareTo(winBurdenMatch.getDeadline()) > 0 || date.compareTo(winBurdenMatch.getDeadline()) == 0) { winBurdenMatch.setState(BettingStateEnum.NO.getKey()); winBurdenMatchMapper.updateById(winBurdenMatch); } }
//足球出奖结果计算 footballMatchService.award();
//篮球出奖结果计算 basketballMatchService.award();
//北单出奖结果计算 beiDanMatchService.award();
//14场胜负开奖 winBurdenMatchService.victoryDefeatAward();
//任九开奖 winBurdenMatchService.renJiuAward(); } }
爬虫核心代码:LotteryPipeline.Java
package com.qihang.reptile;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.qihang.constant.CrawlingAddressConstant; import com.qihang.domain.basketball.BasketballMatchDO; import com.qihang.domain.beidan.BeiDanMatchDO; import com.qihang.domain.football.FootballMatchDO; import com.qihang.domain.omit.OmitDO; import com.qihang.domain.permutation.PermutationAwardDO; import com.qihang.domain.winburden.WinBurdenMatchDO; import com.qihang.enumeration.ball.BettingStateEnum; import com.qihang.service.basketball.IBasketballMatchService; import com.qihang.service.beidan.IBeiDanMatchService; import com.qihang.service.football.IFootballMatchService; import com.qihang.service.omit.IOmitService; import com.qihang.service.permutation.IPermutationAwardService; import com.qihang.service.permutation.IPermutationService; import com.qihang.service.winburden.IWinBurdenMatchService; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; import org.springframework.stereotype.Component; import us.codecraft.webmagic.ResultItems; import us.codecraft.webmagic.Task; import us.codecraft.webmagic.pipeline.Pipeline;
import javax.annotation.Resource; import java.io.IOException; import java.util.Date; import java.util.List;
/**
-
@author: qihang
-
@description: 体彩算法工具类
-
@time: 2022-10-03 13:33 */ @Component public class LotteryPipeline implements Pipeline {
@Resource private IFootballMatchService footballMatchService;
@Resource private IBasketballMatchService basketballMatchService;
@Resource private IPermutationAwardService permutationAwardService;
@Resource private IPermutationService permutationService;
@Resource private IBeiDanMatchService beiDanMatchService;
@Resource private IWinBurdenMatchService winBurdenMatchService;
@Resource private IOmitService omitService;
@Override public void process(ResultItems resultItems, Task task) { String url = resultItems.getRequest().getUrl(); if (ObjectUtil.equal(url, CrawlingAddressConstant.URL1)) { //存储爬取到的足球的比赛数据 List footballMatchList = resultItems.get("footballGoalList"); for (FootballMatchDO footballMatchDO : footballMatchList) { FootballMatchDO footballMatch = footballMatchService.getOne(new QueryWrapper().lambda() .eq(FootballMatchDO::getNumber, footballMatchDO.getNumber()) .eq(FootballMatchDO::getMatch, footballMatchDO.getMatch()) .eq(FootballMatchDO::getStartTime, footballMatchDO.getStartTime()) .eq(FootballMatchDO::getOpenTime, footballMatchDO.getOpenTime())); if (ObjectUtil.isNotNull(footballMatch)) { footballMatchDO.setId(footballMatch.getId()); footballMatchDO.setUpdateTime(new Date()); } } footballMatchService.saveOrUpdateBatch(footballMatchList); } else if (ObjectUtil.equal(url, CrawlingAddressConstant.URL2) || ObjectUtil.equal(url, CrawlingAddressConstant.URL16) || ObjectUtil.equal(url, CrawlingAddressConstant.URL17) || ObjectUtil.equal(url, CrawlingAddressConstant.URL20)) { //存储爬取到的排列开奖结果
PermutationAwardDO permutationAward = resultItems.get("permutation"); if (StrUtil.isNotBlank(permutationAward.getReward())) { permutationAward.setCreateTime(new Date()); permutationAward.setUpdateTime(new Date()); PermutationAwardDO permutationAwardDO = permutationAwardService.getOne(new QueryWrapper<PermutationAwardDO>().lambda().eq(PermutationAwardDO::getStageNumber, permutationAward.getStageNumber()).eq(PermutationAwardDO::getType, permutationAward.getType())); if (ObjectUtil.isNotNull(permutationAwardDO)) { return; } permutationAwardService.save(permutationAward); //计算用户有没有中奖 permutationService.calculation(permutationAward); } } else if (ObjectUtil.equal(url, CrawlingAddressConstant.URL3)) { List<FootballMatchDO> footballMatchList = resultItems.get("footballGoalList"); for (FootballMatchDO footballMatchDO : footballMatchList) { FootballMatchDO footballMatch = footballMatchService.getOne(new QueryWrapper<FootballMatchDO>().lambda() .eq(FootballMatchDO::getNumber, footballMatchDO.getNumber()) .eq(FootballMatchDO::getState, BettingStateEnum.YES.getKey())); if (ObjectUtil.isNotNull(footballMatch) && StrUtil.isBlank(footballMatch.getAnalysis())) { footballMatch.setAnalysis(footballMatchDO.getAnalysis()); footballMatch.setUpdateTime(new Date()); footballMatchService.updateById(footballMatch); } } } else if (ObjectUtil.equal(url, CrawlingAddressConstant.URL4)) { //存储爬取到的篮球的比赛数据 List<BasketballMatchDO> basketballMatchList = resultItems.get("basketballMatchList"); for (BasketballMatchDO basketballMatchDO : basketballMatchList) { BasketballMatchDO basketballMatch = basketballMatchService.getOne(new QueryWrapper<BasketballMatchDO>().lambda() .eq(BasketballMatchDO::getNumber, basketballMatchDO.getNumber()) .eq(BasketballMatchDO::getMatch, basketballMatchDO.getMatch()) .eq(BasketballMatchDO::getStartTime, basketballMatchDO.getStartTime()) .eq(BasketballMatchDO::getOpenTime, basketballMatchDO.getOpenTime())); if (ObjectUtil.isNotNull(basketballMatch)) { basketballMatchDO.setId(basketballMatch.getId()); basketballMatchDO.setUpdateTime(new Date()); } } basketballMatchService.saveOrUpdateBatch(basketballMatchList); } else if (ObjectUtil.equal(url, CrawlingAddressConstant.URL5)) { List<BasketballMatchDO> basketballMatchList = resultItems.get("basketballMatchList"); for (BasketballMatchDO basketballMatchDO : basketballMatchList) { BasketballMatchDO basketballMatch = basketballMatchService.getOne(new QueryWrapper<BasketballMatchDO>().lambda() .eq(BasketballMatchDO::getNumber, basketballMatchDO.getNumber()) .eq(BasketballMatchDO::getState, BettingStateEnum.YES.getKey())); if (ObjectUtil.isNotNull(basketballMatch) && StrUtil.isBlank(basketballMatch.getAnalysis())) { basketballMatch.setAnalysis(basketballMatchDO.getAnalysis()); basketballMatch.setUpdateTime(new Date()); basketballMatchService.updateById(basketballMatch); } } } else if (ObjectUtil.equal(url, CrawlingAddressConstant.URL6)) { //足球开奖 List<FootballMatchDO> footballMatchList = resultItems.get("footballGoalList"); for (FootballMatchDO footballMatchDO : footballMatchList) { FootballMatchDO footballMatch = footballMatchService.getOne(new QueryWrapper<FootballMatchDO>().lambda() .eq(FootballMatchDO::getNumber, footballMatchDO.getNumber()) .eq(FootballMatchDO::getOpenTime, footballMatchDO.getOpenTime())); if (ObjectUtil.isNotNull(footballMatch)) { footballMatch.setAward(footballMatchDO.getAward()); footballMatch.setHalfFullCourt(footballMatchDO.getHalfFullCourt()); footballMatch.setUpdateTime(new Date()); footballMatchService.updateById(footballMatch); } } } else if (ObjectUtil.equal(url, CrawlingAddressConstant.URL7)) { //篮球开奖 List<BasketballMatchDO> basketballMatchList = resultItems.get("basketballMatchList"); for (BasketballMatchDO basketballMatchDO : basketballMatchList) { BasketballMatchDO basketballMatch = basketballMatchService.getOne(new QueryWrapper<BasketballMatchDO>().lambda() .eq(BasketballMatchDO::getNumber, basketballMatchDO.getNumber()) .like(BasketballMatchDO::getHomeTeam, basketballMatchDO.getHomeTeam()) .like(BasketballMatchDO::getVisitingTeam, basketballMatchDO.getVisitingTeam())); //第二次判断 if (ObjectUtil.isNull(basketballMatch)) { basketballMatch = basketballMatchService.getOne(new QueryWrapper<BasketballMatchDO>().lambda() .eq(BasketballMatchDO::getNumber, basketballMatchDO.getNumber()) .eq(BasketballMatchDO::getOpenTime, basketballMatchDO.getOpenTime())); } //第三次判断 if (ObjectUtil.isNull(basketballMatch)) { Date start = DateUtil.parse(DateUtil.today() + " 00:00:00"); Date end = DateUtil.parse(DateUtil.today() + " 23:59:59"); start = DateUtil.offsetDay(start, -3); basketballMatch = basketballMatchService.getOne(new QueryWrapper<BasketballMatchDO>().lambda() .eq(BasketballMatchDO::getNumber, basketballMatchDO.getNumber()) .ge(BasketballMatchDO::getCreateTime, start) .le(BasketballMatchDO::getCreateTime, end) .like(BasketballMatchDO::getHomeTeam, basketballMatchDO.getHomeTeam()).or() .like(BasketballMatchDO::getVisitingTeam, basketballMatchDO.getVisitingTeam()) ); } if (ObjectUtil.isNotNull(basketballMatch)) { basketballMatch.setAward(basketballMatchDO.getAward()); basketballMatch.setHalfFullCourt(basketballMatchDO.getHalfFullCourt()); basketballMatch.setUpdateTime(new Date()); basketballMatchService.updateById(basketballMatch); } } //查询历史未开奖的比赛 List<BasketballMatchDO> basketballList = basketballMatchService.list(new QueryWrapper<BasketballMatchDO>().lambda().isNull(BasketballMatchDO::getAward).isNull(BasketballMatchDO::getHalfFullCourt)); if (CollUtil.isNotEmpty(basketballList)) { for (BasketballMatchDO basketballMatchDO : basketballList) { try { Document document = Jsoup.connect(CrawlingAddressConstant.URL7 + "?d=" + DateUtil.thisYear() + "-" + basketballMatchDO.getOpenTime().substring(0, basketballMatchDO.getOpenTime().indexOf(" ") + 1)).get(); Elements elements = document.select(".lea_list table.ld_table > tbody>tr"); for (int i = 1; i < elements.size(); i++) { String number = elements.get(i).select("td:nth-child(1)").text().trim(); if (basketballMatchDO.getNumber().equals(number)) { String str = elements.get(i).select("td:nth-child(12)").text(); String score = elements.get(i).select("td:nth-child(7)").text(); String result = ""; if (StrUtil.isNotBlank(score) && !score.equals("-")) { int[] scoreArr = StrUtil.splitToInt(score, ":"); //判断让分后是客胜还是主胜 if (scoreArr[0] > scoreArr[1] + Double.valueOf(str)) { result = "主负"; } else { result = "主胜"; } } //没出结果直接跳过 if (score.contains("-")) { continue; } basketballMatchDO.setAward(elements.get(i).select("td:nth-child(8)").text() + "," + result + "," + elements.get(i).select("td:nth-child(15)").text() + "," + elements.get(i).select("td:nth-child(19)").text()); basketballMatchDO.setHalfFullCourt(score); basketballMatchService.updateById(basketballMatchDO); } } } catch (IOException e) { throw new RuntimeException(e); } } } } else if (ObjectUtil.equal(url, CrawlingAddressConstant.URL8)) { //北单数据 List<BeiDanMatchDO> beiDanMatchList = resultItems.get("beiDanMatchList"); for (BeiDanMatchDO beiDanMatchDO : beiDanMatchList) { BeiDanMatchDO beiDanMatch = beiDanMatchService.getOne(new QueryWrapper<BeiDanMatchDO>().lambda() .eq(BeiDanMatchDO::getNumber, beiDanMatchDO.getNumber()) .eq(BeiDanMatchDO::getMatch, beiDanMatchDO.getMatch()) .like(BeiDanMatchDO::getHomeTeam, beiDanMatchDO.getHomeTeam()) .like(BeiDanMatchDO::getVisitingTeam, beiDanMatchDO.getVisitingTeam())); if (ObjectUtil.isNotNull(beiDanMatch)) { beiDanMatchDO.setId(beiDanMatch.getId()); beiDanMatchDO.setUpdateTime(new Date()); } } beiDanMatchService.saveOrUpdateBatch(beiDanMatchList); } else if (ObjectUtil.equal(url, CrawlingAddressConstant.URL9) || ObjectUtil.equal(url, CrawlingAddressConstant.URL10) || ObjectUtil.equal(url, CrawlingAddressConstant.URL11) || ObjectUtil.equal(url, CrawlingAddressConstant.URL12)) { //北单数据 List<BeiDanMatchDO> beiDanMatchList = resultItems.get("beiDanMatchList"); for (BeiDanMatchDO beiDanMatchDO : beiDanMatchList) { BeiDanMatchDO beiDanMatch = beiDanMatchService.getOne(new QueryWrapper<BeiDanMatchDO>().lambda() .eq(BeiDanMatchDO::getNumber, beiDanMatchDO.getNumber()) .eq(BeiDanMatchDO::getMatch, beiDanMatchDO.getMatch()) .like(BeiDanMatchDO::getHomeTeam, beiDanMatchDO.getHomeTeam()) .like(BeiDanMatchDO::getVisitingTeam, beiDanMatchDO.getVisitingTeam())); if (ObjectUtil.isNotNull(beiDanMatch)) { beiDanMatchDO.setId(beiDanMatch.getId()); beiDanMatchDO.setUpdateTime(new Date()); } else { continue; } } beiDanMatchService.updateBatchById(beiDanMatchList); } else if (ObjectUtil.equal(url, CrawlingAddressConstant.URL13)) { //北单开奖 List<BeiDanMatchDO> beiDanMatchList = resultItems.get("beiDanMatchList"); for (BeiDanMatchDO beiDanMatchDO : beiDanMatchList) { BeiDanMatchDO beiDanMatch = beiDanMatchService.getOne(new QueryWrapper<BeiDanMatchDO>().lambda() .eq(BeiDanMatchDO::getNumber, beiDanMatchDO.getNumber()) .eq(BeiDanMatchDO::getMatch, beiDanMatchDO.getMatch()) .like(BeiDanMatchDO::getHomeTeam, beiDanMatchDO.getHomeTeam()) .like(BeiDanMatchDO::getVisitingTeam, beiDanMatchDO.getVisitingTeam())); if (ObjectUtil.isNotNull(beiDanMatch)) { if (StrUtil.isBlank(beiDanMatch.getBonusOdds()) && StrUtil.isBlank(beiDanMatch.getAward()) && StrUtil.isBlank(beiDanMatch.getHalfFullCourt()) || beiDanMatch.getBonusOdds().indexOf("-") != -1) { beiDanMatch.setUpdateTime(new Date()); beiDanMatch.setAward(beiDanMatchDO.getAward()); beiDanMatch.setHalfFullCourt(beiDanMatchDO.getHalfFullCourt()); beiDanMatch.setBonusOdds(beiDanMatchDO.getBonusOdds()); beiDanMatchService.updateById(beiDanMatch); } } } } else if (ObjectUtil.equal(url, CrawlingAddressConstant.URL14)) { //存储爬取到的篮球的比赛数据 List<BasketballMatchDO> basketballMatchList = resultItems.get("basketballMatchList"); for (BasketballMatchDO basketballMatchDO : basketballMatchList) { BasketballMatchDO basketballMatch = basketballMatchService.getOne(new QueryWrapper<BasketballMatchDO>().lambda() .eq(BasketballMatchDO::getNumber, basketballMatchDO.getNumber()) .eq(BasketballMatchDO::getMatch, basketballMatchDO.getMatch()) .eq(BasketballMatchDO::getStartTime, basketballMatchDO.getStartTime()) .eq(BasketballMatchDO::getOpenTime, basketballMatchDO.getOpenTime()) .like(BasketballMatchDO::getHomeTeam, basketballMatchDO.getHomeTeam()) .like(BasketballMatchDO::getVisitingTeam, basketballMatchDO.getVisitingTeam())); if (ObjectUtil.isNotNull(basketballMatch)) { basketballMatch.setIsSingle("1"); basketballMatchService.updateById(basketballMatch); } } } else if (ObjectUtil.equal(url, CrawlingAddressConstant.URL15)) { List<BeiDanMatchDO> beiDanMatchList = resultItems.get("beiDanMatchList"); for (BeiDanMatchDO beiDanMatchDO : beiDanMatchList) { BeiDanMatchDO beiDanMatch = beiDanMatchService.getOne(new QueryWrapper<BeiDanMatchDO>().lambda() .eq(BeiDanMatchDO::getNumber, beiDanMatchDO.getNumber()) .eq(BeiDanMatchDO::getState, BettingStateEnum.YES.getKey())); if (ObjectUtil.isNotNull(beiDanMatch) && StrUtil.isBlank(beiDanMatch.getAnalysis())) { beiDanMatch.setAnalysis(beiDanMatchDO.getAnalysis()); beiDanMatch.setUpdateTime(new Date()); beiDanMatchService.updateById(beiDanMatch); } } } else if (ObjectUtil.equal(url, CrawlingAddressConstant.URL18)) { List<WinBurdenMatchDO> winBurdenMatchList = resultItems.get("winBurdenMatchList"); for (WinBurdenMatchDO winBurdenMatchDO : winBurdenMatchList) { WinBurdenMatchDO winBurdenMatch = winBurdenMatchService.getOne(new QueryWrapper<WinBurdenMatchDO>().lambda() .eq(WinBurdenMatchDO::getNumber, winBurdenMatchDO.getNumber()) .eq(WinBurdenMatchDO::getMatch, winBurdenMatchDO.getMatch()) .eq(WinBurdenMatchDO::getOpenTime, winBurdenMatchDO.getOpenTime()) .like(WinBurdenMatchDO::getHomeTeam, winBurdenMatchDO.getHomeTeam().substring(winBurdenMatchDO.getHomeTeam().indexOf("]") + 1)) .like(WinBurdenMatchDO::getVisitingTeam, winBurdenMatchDO.getVisitingTeam().substring(winBurdenMatchDO.getVisitingTeam().indexOf("]") + 1))); if (ObjectUtil.isNull(winBurdenMatch)) { winBurdenMatchService.save(winBurdenMatchDO); } else { //如果不为空就判断当前的分析链接是否有 if (StrUtil.isBlank(winBurdenMatch.getAnalysis())) { //如果没有就到北单那里去查询在写入 到数据库 BeiDanMatchDO beiDanMatch = beiDanMatchService.getOne(new QueryWrapper<BeiDanMatchDO>().lambda() .eq(BeiDanMatchDO::getState, BettingStateEnum.YES.getKey()) .like(BeiDanMatchDO::getHomeTeam, winBurdenMatchDO.getHomeTeam().substring(winBurdenMatchDO.getHomeTeam().indexOf("]") + 1)) .like(BeiDanMatchDO::getVisitingTeam, winBurdenMatchDO.getVisitingTeam().substring(winBurdenMatchDO.getVisitingTeam().indexOf("]") + 1)) .eq(BeiDanMatchDO::getMatch, winBurdenMatchDO.getMatch())); if (ObjectUtil.isNotNull(beiDanMatch)) { //写入数据库 winBurdenMatch.setAnalysis(beiDanMatch.getAnalysis()); winBurdenMatchService.updateById(winBurdenMatch); } } } } } else if (ObjectUtil.equal(url, CrawlingAddressConstant.URL19)) { List<WinBurdenMatchDO> winBurdenMatchList = resultItems.get("winBurdenMatchList"); for (WinBurdenMatchDO winBurdenMatchDO : winBurdenMatchList) { WinBurdenMatchDO winBurdenMatch = winBurdenMatchService.getOne(new QueryWrapper<WinBurdenMatchDO>().lambda() .eq(WinBurdenMatchDO::getIssueNo, winBurdenMatchDO.getIssueNo()) .like(WinBurdenMatchDO::getHomeTeam, winBurdenMatchDO.getHomeTeam())); if (StrUtil.isBlank(winBurdenMatch.getAward()) || winBurdenMatch.getMoneyAward().indexOf("--") != -1) { winBurdenMatch.setUpdateTime(new Date()); winBurdenMatch.setAward(winBurdenMatchDO.getAward()); winBurdenMatch.setMoneyAward(winBurdenMatchDO.getMoneyAward()); winBurdenMatchService.updateById(winBurdenMatch); } } } else if (ObjectUtil.equal(url, CrawlingAddressConstant.URL21) || ObjectUtil.equal(url, CrawlingAddressConstant.URL22) || ObjectUtil.equal(url, CrawlingAddressConstant.URL23) || ObjectUtil.equal(url, CrawlingAddressConstant.URL24)) { List<OmitDO> omitList = resultItems.get("omitList"); for (OmitDO omitDO : omitList) { OmitDO omit = omitService.getOne(new QueryWrapper<OmitDO>().lambda().eq(OmitDO::getType, omitDO.getType())); omitDO.setUpdateTime(new Date()); if (ObjectUtil.isNull(omit)) { omitDO.setCreateTime(new Date()); omitService.save(omitDO); } else { omit.setRecord(omitDO.getRecord()); omitService.updateById(omit); } } }} }
项目运行如下:
完整项目下载地址: 百度网盘链接:pan.baidu.com/s/1gWQckRKM… 提取码:4bf7
GIThub:github.com/lotteryserv…