实时采集福利彩票的中奖信息和最新开奖信息-JAVA

这篇具有很好参考价值的文章主要介绍了实时采集福利彩票的中奖信息和最新开奖信息-JAVA。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

用来采集福利彩票的中奖信息和最新开奖信息。

可以采集的彩票类型包括:1快乐8,2双色球,3福彩3D,4七乐彩,5大乐透,6排列3,7排列5,8七星彩

本项目介绍了如何使用代理IP和多线程采集公开彩票数据,项目尚不具备使用条件,仅供学习参考

项目需要用Maven引入,这里输入引用文本打开后如果有报错,可以检查是否为JDK版本问题

运行Starter类启动爬虫

需要修改test.config包下面的Memory类,可以修改

1. 是否使用代理IP
2. 图片保存路径
3. 代理IP的API接口
4. 线程池数量
5. 默认超时时间

如果提示
获取代理IP出错: 请到 http://www.data5u.com 获取最新的代理IP-API接口,或者修改Memory.useProxyIp=false
那么按照提示关闭代理IP服务即可。

项目代码已上传到GITHUB https://github.com/mcj8089/crawl-caipiao.git

代码分为BEAN和核心采集:

CaiPiaoWinner

package test.bean;

import java.io.Serializable;

/**
 * 中奖情况
 */
public class CaiPiaoWinner implements Serializable {

	private static final long serialVersionUID = 1L;

	private String idx; // 彩票ID : 彩票类型+期+奖项名称
	
	private String cpId; // 彩票ID

	private String remark; // 奖项名称

	private Integer baseAwardNum; // 基本中奖注数(注)

	private Float baseAwardMoney; // 基本中奖金额(元)

	public String getIdx() {
		return idx;
	}
	public void setIdx(String idx) {
		this.idx = idx;
	}
	
	public String getCpId() {
		return cpId;
	}

	public void setCpId(String cpId) {
		this.cpId = cpId;
	}

	public String getRemark() {
		return remark;
	}

	public void setRemark(String remark) {
		this.remark = remark;
	}

	public Integer getBaseAwardNum() {
		return baseAwardNum;
	}

	public void setBaseAwardNum(Integer baseAwardNum) {
		this.baseAwardNum = baseAwardNum;
	}

	public Float getBaseAwardMoney() {
		return baseAwardMoney;
	}

	public void setBaseAwardMoney(Float baseAwardMoney) {
		this.baseAwardMoney = baseAwardMoney;
	}

}

CaiPiaoIssue

package test.bean;

import java.io.Serializable;
import java.util.List;

/**
 * 中奖情况
 */
public class CaiPiaoIssue implements Serializable {

	private static final long serialVersionUID = 1L;

	private String cpId; // 彩票ID : 彩票类型+期

	private Integer type; // 彩票类型:1快乐8,2双色球,3福彩3D,4七乐彩,5大乐透,6排列3,7排列5,8七星彩

	private String issue; // 期数

	private String openTime; // 开奖时间

	private Float saleMoney; // 销售金额

	private Float prizePoolMoney; // 奖池金额

	private String deadlineAwardDate; // 截止兑奖日期

	private String frontWinningNum; // 开奖号码,前排

	private String backWinningNum; // 开奖号码,后排
	
	private List<CaiPiaoWinner> winnerList; // 中奖情况

	public String getCpId() {
		return cpId;
	}

	public void setCpId(String cpId) {
		this.cpId = cpId;
	}

	public Integer getType() {
		return type;
	}

	public void setType(Integer type) {
		this.type = type;
	}

	public String getIssue() {
		return issue;
	}

	public void setIssue(String issue) {
		this.issue = issue;
	}

	public String getOpenTime() {
		return openTime;
	}

	public void setOpenTime(String openTime) {
		this.openTime = openTime;
	}

	public Float getSaleMoney() {
		return saleMoney;
	}

	public void setSaleMoney(Float saleMoney) {
		this.saleMoney = saleMoney;
	}

	public Float getPrizePoolMoney() {
		return prizePoolMoney;
	}

	public void setPrizePoolMoney(Float prizePoolMoney) {
		this.prizePoolMoney = prizePoolMoney;
	}

	public String getDeadlineAwardDate() {
		return deadlineAwardDate;
	}

	public void setDeadlineAwardDate(String deadlineAwardDate) {
		this.deadlineAwardDate = deadlineAwardDate;
	}

	public String getFrontWinningNum() {
		return frontWinningNum;
	}

	public void setFrontWinningNum(String frontWinningNum) {
		this.frontWinningNum = frontWinningNum;
	}

	public String getBackWinningNum() {
		return backWinningNum;
	}

	public void setBackWinningNum(String backWinningNum) {
		this.backWinningNum = backWinningNum;
	}

	public List<CaiPiaoWinner> getWinnerList() {
		return winnerList;
	}

	public void setWinnerList(List<CaiPiaoWinner> winnerList) {
		this.winnerList = winnerList;
	}
	
}

CaipiaoHistoryCrawler文章来源地址https://www.toymoban.com/news/detail-467540.html

package test.crawler;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import test.bean.CaiPiaoIssue;
import test.bean.CaiPiaoWinner;
import test.config.Memory;
import test.util.CrawlerUtil;
import test.util.LogUtil;
import test.util.StrUtil;

/**
 * 彩票历史
 */
public class CaipiaoHistoryCrawler extends Crawler {
	
	String TAG = "CaipiaoHistoryCrawler";
	
	Map<String, String> headerMap = new HashMap<String, String>();

	int retryTime = 3;
	
	AtomicInteger atoInt = new AtomicInteger(1);
	
	Set<String> uniqSet = new HashSet<String>();

	public void crawl() {
		
		headerMap.put("Accept", "*/*");
		headerMap.put("Accept-Encoding", "gzip, deflate, br");
		headerMap.put("Accept-Language", "zh-CN,zh;q=0.9");
		headerMap.put("Connection", "keep-alive");
		headerMap.put("Cookie", "BAIDU_SSP_lcr=https://www.baidu.com/link?url=riNXkDsMHCOiaKifIQRKh0P3RuASJjDVfIvNZy0PFwS&wd=&eqid=8a03215500000b570000000360dbeecd; _ga=GA1.2.1911959757.1625027094; _gid=GA1.2.724130032.1625027094; PHPSESSID=45a4gkalmomcnbjabcvkmij3p3; Hm_lvt_12e4883fd1649d006e3ae22a39f97330=1625027094; Hm_lvt_692bd5f9c07d3ebd0063062fb0d7622f=1625027095; _gat_UA-66069030-3=1; Hm_lpvt_692bd5f9c07d3ebd0063062fb0d7622f=1625027400; Hm_lpvt_12e4883fd1649d006e3ae22a39f97330=1625027400; KLBRSID=13ce4968858adba085afff577d78760d|1625027411|1625027093");
		headerMap.put("Host", "jc.zhcw.com");
		headerMap.put("Referer", "https://www.zhcw.com/kjxx/pl3/kjxq/");
		headerMap.put("Sec-Fetch-Dest", "script");
		headerMap.put("Sec-Fetch-Mode", "no-cors");
		headerMap.put("Sec-Fetch-Site", "same-site");
		
		crawlZhongCai(1);
		crawlZhongCai(2);
		crawlZhongCai(3);
		crawlZhongCai(4);
		crawlZhongCai(5);
		crawlZhongCai(6);
		crawlZhongCai(7);
		crawlZhongCai(8);
		
		LogUtil.logInfo(TAG, "采集任务已完成");
		
	}

	// 彩票类型:1快乐8,2双色球,3福彩3D,4七乐彩,5大乐透,6排列3,7排列5,8七星彩
	private void crawlZhongCai(Integer type) {

		Set<String> issueSet = new HashSet<String>();
		
		String prefix = "";
		String surfix = ".html";
		
		if( type == 1 ) {
			issueSet = getIssueSet("https://www.ydniu.com/open/kl8.aspx");
			prefix = "https://www.ydniu.com/open/kl8/";
		} else if( type == 2 ) {
			issueSet = getIssueSet("https://www.ydniu.com/open/ssq.aspx");
			prefix = "https://www.ydniu.com/open/ssq/";
		} else if( type == 3 ) {
			issueSet = getIssueSet("https://www.ydniu.com/open/sd.aspx");
			prefix = "https://www.ydniu.com/open/sd/";
		} else if( type == 4 ) {
			issueSet = getIssueSet("https://www.ydniu.com/open/qlc.aspx");
			prefix = "https://www.ydniu.com/open/qlc/";
		} else if( type == 5 ) {
			issueSet = getIssueSet("https://www.ydniu.com/open/dlt.aspx");
			prefix = "https://www.ydniu.com/open/dlt/";
		} else if( type == 6 ) {
			issueSet = getIssueSet("https://www.ydniu.com/open/pl3.aspx");
			prefix = "https://www.ydniu.com/open/pl3/";
		} else if( type == 7 ) {
			issueSet = getIssueSet("https://www.ydniu.com/open/pl5.aspx");
			prefix = "https://www.ydniu.com/open/pl5/";
		} else if( type == 8 ) {
			issueSet = getIssueSet("https://www.ydniu.com/open/qxc.aspx");
			prefix = "https://www.ydniu.com/open/qxc/";
		}
		
		for( String issue : issueSet ) {
			
			final String fPrefix = prefix;
			Memory.threadPool.execute(new Runnable() {
				
				@Override
				public void run() {

					if( !uniqSet.add(issue) ) {
						return;
					}
					
					try {
						// START
						String url = fPrefix + issue + surfix;

						String html = null;
						for( int i = 1; i <= retryTime; i ++ ) {
							try {
								if( i == retryTime && Memory.useProxyIp ) {
									html = CrawlerUtil.getHtml(url, false, false, Memory.DEFAULT_TIMEOUT, headerMap);
								} else {
									html = CrawlerUtil.getHtml(url, Memory.useProxyIp, false, Memory.DEFAULT_TIMEOUT, headerMap);
								}
								if( StrUtil.isNotEmpty(html) && html.contains("Bad Gateway: www.ydniu.com:443") || html.contains("白名单校验失败") ) {
									i = i - 1;
									continue;
								}
								if( StrUtil.isNotEmpty(html) ) {
									break;
								}
							} catch ( Exception e ) {
								LogUtil.logInfo(TAG, "采集分期报错", e);
							}
						}
						
						if( StrUtil.isNotEmpty(html) ) {
							
							try {
								
								Document startDoc = Jsoup.parse(html);
								
								CaiPiaoIssue caiPiaoIssue = new CaiPiaoIssue();
								caiPiaoIssue.setIssue(issue);

								Elements openNumberRedEl = startDoc.select("#openNumber i");
								Elements openNumberBlueEl = startDoc.select("#openNumber em");
								
								StringBuilder redBallSB = new StringBuilder();
								for( Element el : openNumberRedEl ) {
									redBallSB.append(el.text()).append(",");
								}
								
								StringBuilder blueBallSB = new StringBuilder();
								for( Element el : openNumberBlueEl ) {
									blueBallSB.append(el.text()).append(",");
								}
								
								String temp = startDoc.select("#openDate").text();
								
								String openTime = temp.split(",")[0].replace("开奖日期:", "");
								String deadlineAwardDate = temp.split(",")[1].replace("兑奖截止日期:", "");
								String frontWinningNum = redBallSB.toString();
								String backWinningNum = blueBallSB.toString();
								Float saleMoney = Float.valueOf(startDoc.select("#sumSales").text().replace(",", ""));
								Float prizePoolMoney = Float.valueOf(startDoc.select("#prizePool").text().replace(",", ""));
								
								frontWinningNum = frontWinningNum.substring(0, frontWinningNum.length() - 1);
								backWinningNum = backWinningNum.substring(0, backWinningNum.length() - 1);
								
								caiPiaoIssue.setBackWinningNum(backWinningNum);
								caiPiaoIssue.setDeadlineAwardDate(deadlineAwardDate);
								caiPiaoIssue.setFrontWinningNum(frontWinningNum);
								caiPiaoIssue.setOpenTime(openTime);
								caiPiaoIssue.setPrizePoolMoney(prizePoolMoney);
								caiPiaoIssue.setSaleMoney(saleMoney);
								caiPiaoIssue.setType(type);
								caiPiaoIssue.setCpId(type + issue);
								
							    List<CaiPiaoWinner> winnerList = new ArrayList<CaiPiaoWinner>();
								
								Elements trs = startDoc.select("#t_WinType tr");
			 					for( Element tr : trs ) {
			 						String name = tr.select("td").get(0).text();
			 						String num = tr.select("td").get(1).text();
			 						String money = tr.select("td").get(2).text();
			 						
			 						CaiPiaoWinner winner = new CaiPiaoWinner();
			 						winner.setBaseAwardMoney( Float.valueOf(money) );
			 						winner.setBaseAwardNum(Integer.valueOf(num));
			 						winner.setRemark(name);
			 						winner.setCpId(caiPiaoIssue.getCpId());
			 						winner.setIdx(type + issue + name);
			 						
			 						winnerList.add(winner);
			 					}
								
			 					crawlToDB(winnerList);
								
							} catch (Exception e) {
								e.printStackTrace();
							}
						
						}	
						// END
					} catch (Exception e) {
						e.printStackTrace();
					}
									
				}
			});
			
		}
	
	}

	private Set<String> getIssueSet(String url) {
		headerMap.put("Host", "www.ydniu.com");
		headerMap.put("Referer", "https://www.ydniu.com/open/ssq.aspx");
		
		String html = null;
		for( int i = 1; i <= retryTime; i ++ ) {
			try {
				if( i == retryTime && Memory.useProxyIp ) {
					html = CrawlerUtil.getHtml(url, false, false, Memory.DEFAULT_TIMEOUT, headerMap);
				} else {
					html = CrawlerUtil.getHtml(url, Memory.useProxyIp, false, Memory.DEFAULT_TIMEOUT, headerMap);
				}
				if( StrUtil.isNotEmpty(html) ) {
					break;
				}
			} catch ( Exception e ) {
				LogUtil.logInfo(TAG, "采集分期报错", e);
			}
		}
		
		Set<String> reSet = new HashSet<>();
		
		if( StrUtil.isNotEmpty(html) ) {
			
			if( html.contains("Bad Gateway: www.ydniu.com:443") || html.contains("白名单校验失败") ) {
				return getIssueSet(url);
			}
			
	 		Document document = Jsoup.parse(html);
	 		Elements as = document.select(".iSelectBox .iSelectList.listOverFlow a");
	 		
	 		for( Element el : as ) {
	 			reSet.add(el.text());
	 		}
		}
		
		return reSet;
	}

}

到了这里,关于实时采集福利彩票的中奖信息和最新开奖信息-JAVA的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 海康威视摄像头对接SDK实时预览功能和抓拍功能,懒癌福利,可直接CV

    最近在新系统的研发中负责了视频监控模块的开发,项目监控设备全部采用海康的摄像头,枪机、球机都有,开发的过程中,有个需求是在前端页面上把摄像头画面进行平铺展示,最开始的方案是通过官方API完成,但是后面发现项目上所有的设备都是不联网的,所以只能转由

    2024年02月02日
    浏览(50)
  • uni-app - 文字上下循环滚动翻滚,类似中奖名单与公告栏信息公示等等,自定义组件封装,支持 DIY(适用于新闻动态、公告上下滚动列表、上下循环滚动,无限上下自动滚动列表)兼容小程序/H5/App

    uni-app是一款使用Vue.js开发所有前端应用的框架,让开发者能够使用Vue.js开发多端应用,具有开发效率高、易学易用、性能优秀、插件丰富、跨平台等优点。今天,我们将介绍如何使用uni-app实现文字上下循环滚动,类似于中奖名单或公告栏信息公示等效果。

    2024年02月12日
    浏览(120)
  • hdfs元数据实时采集

    一、背景及问题 0.Hdfs元数据管理   1.背景介绍 当前在数据资产管理平台上,需要展示每张hive表及分区的热力情况(文件数、存储量、更新时间等信息)。目前热力数据包含两部分内容:热力元数据和审计日志,其中审计日志可以直接消费kafka得到,而热力元数据暂时没有可以直

    2024年02月09日
    浏览(37)
  • 毫米波雷达实时采集教

    https://www.cnblogs.com/dhyc/p/10510876.html 毫米波雷达实时采集教程---- 雷达资料分享——RSP1 多普勒雷达开发套件

    2024年02月08日
    浏览(52)
  • Flink 实时数仓 (一) --------- 数据采集层

    1. 普通实时计算与实时数仓比较 普通的实时计算优先考虑时效性,所以从数据源采集经过实时计算直接得到结果。如此做时效性更好,但是弊端是由于计算过程中的中间结果没有沉淀下来,所以当面对大量实时需求的时候,计算的复用性较差,开发成本随着需求增加直线上升

    2024年02月06日
    浏览(47)
  • flink日志实时采集写入Kafka/ElasticSearch

    由于公司想要基于flink的日志做实时预警功能,故需要实时接入,并刷入es进行分析。 日志接入必须异步,不能影响服务性能 kafka集群宕机,依旧能够提交flink任务且运行任务 kafka集群挂起恢复,可以依旧续写实时运行日志 在类上加上@Plugin注解,标记为自定义appender 在类加上

    2024年02月08日
    浏览(54)
  • 最新壁纸自动采集系统网站PHP源码/360壁纸官方数据接口采集/ZHEYI采集源码

    源码介绍: 最新壁纸自动采集系统网站PHP源码,它是ZHEYI自动采集源码,能够在360壁纸官方数据接口采集。很好用的壁纸网站源码分享,仅供学习,请勿商用。 ZHEYI自动采集壁纸PHP源码,能全自动采集高清壁纸网源码。它是是一个基于360壁纸官方数据接口的PHP网站源码,通过

    2024年02月08日
    浏览(54)
  • 定时音频数据采集并发送websocket实时播放

    一 定时音频数据采集并发送websocket实时播放 Recorder.js

    2024年02月02日
    浏览(42)
  • Sqoop与Flume的集成:实时数据采集

    将Sqoop与Flume集成是实现实时数据采集和传输的重要步骤之一。Sqoop用于将数据从关系型数据库导入到Hadoop生态系统中,而Flume用于数据流的实时采集、传输和处理。本文将深入探讨如何使用Sqoop与Flume集成,提供详细的步骤、示例代码和最佳实践,以确保能够成功实现实时数据

    2024年01月23日
    浏览(51)
  • Kafka数据流的实时采集与统计机制

    随着大数据时代的到来,实时数据处理成为了众多企业和组织的关注焦点。为了满足这一需求,Apache Kafka成为了一个广泛采用的分布式流处理平台。Kafka以其高吞吐量、可扩展性和容错性而闻名,被广泛应用于日志收集、事件驱动架构和实时分析等场景。 在本文中,我们将探

    2024年02月07日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包