当前位置: 首页 > news >正文

Python爬虫实现大乐透历史数据抓取

前言

公司楼下恰好毗邻中国体育彩票中心,午间饭后,与同事们总会相约前往,各自投下两注希望,既是为中国的公益事业贡献一份力量,也怀揣着对瞬间改变命运的微妙幻想。对于中奖概率的理性认知,我们并不缺乏,但内心深处那份对暴富的坚信始终炽热不减。

根据个人生日、幸运数字等具有特殊意义的元素,我们精心挑选了一组心仪的大乐透号码,并坚持定期投注,让这份期待成为日常的一部分。随着时间的推移,一个自然而然的念头悄然升起——这组寄托了我们梦想的大乐透号码,是否在过往的开奖历史中已悄然绽放?

为了解答这份好奇,我迅速利用搜索引擎寻找查询历史开奖记录的方法。若现成的工具或平台未能满足需求,我便萌生了自行开发查询工具的想法,希望通过技术手段,为自己和同样怀揣梦想的人们提供一份便捷与希望。
果然已有同僚想到了,搜到了一个 china-ssq 电脑端、手机端浏览器都可访问,截图如下:

121

看了下网站的功能,主要涉及大乐透开奖对比器和双色球开奖对比器功能,提供大乐透号码是否中过奖,双色球号码是否中过奖、中奖通知等功能:

  1. 历史中奖查询:查询您心仪的号码(单式)是否已经在历史期数中开过奖,以供您参考
  2. 复式历史中奖查询:查询您所选的号码(复式)在历史开奖中,红球重复n球及以上的纪录
  3. 历史重复开奖记录查询:检索所有的历史开奖记录,查看是否有重复的开奖号码
  4. 中奖通知:在本站收藏您的幸运号码,我们将实时监控幸运号码的中奖情况,并第一时间通知到您

对于这个网站的具体运营时长及作者是否已实现盈利,我虽不甚了解,但这并未阻碍我采取行动。出于好奇与挑战自我的心态,我毅然决定利用Python来亲手实现一个类似的功能或平台。

一、用python抓取大乐透每天的开奖数据

代码示例:
使用requests和BeautifulSoup库抓取大乐透的开奖数据,并保存到CSV文件中。

import requests
from bs4 import BeautifulSoup
import csv# 目标URL
url = 'http://datachart.500.com/dlt/history/newinc/history.php?start=07001&end=21018'# 发送HTTP请求
response = requests.get(url)
response.encoding = 'utf-8'  # 确保编码正确# 解析HTML内容
soup = BeautifulSoup(response.text, 'html.parser')# 定位包含开奖数据的表格体
tbody = soup.find('tbody', id="tdata")# 存储开奖数据的列表
lottery_data = []# 遍历每一行数据
for tr in tbody.find_all('tr'):tds = tr.find_all('td')if tds:# 提取数据并添加到列表lottery_data.append([td.text for td in tds])# 写入CSV文件
with open('dlt_lottery_data.csv', 'w', newline='', encoding='utf-8') as csvfile:writer = csv.writer(csvfile)# 写入标题行writer.writerow(['期号', '号码1', '号码2', '号码3', '号码4', '号码5', '号码6', '号码7'])# 写入数据行writer.writerows(lottery_data)print('数据抓取完成,并保存到dlt_lottery_data.csv文件中。')

二、实时接口开发

传入大乐透号码,然后去所有期次中撞库
代码示例:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;@RestController
public class LotteryController {private static final int RED_BALLS_COUNT = 5;private static final int BLUE_BALLS_COUNT = 2;@RequestMapping(value = "/lottery/dlt/query", method = RequestMethod.GET)public List<DltLotteryHistory> getDltLotteriesByList(@RequestParam(value = "blue") String blue,@RequestParam(value = "red") String red) {long startTime = System.currentTimeMillis();logger.info("Begin query with parameters: blue={}, red={}", blue, red);try {List<Integer> balls = parseAndSortBalls(red);List<Integer> blues = parseAndSortBalls(blue);DltLotteryHistory dltLotteryQO = createDltLotteryHistory(balls, blues);QueryWrapper<DltLotteryHistory> wrapper = new QueryWrapper<>(dltLotteryQO);List<DltLotteryHistory> dltLotteryHistories = dltLotteryHistoryService.list(wrapper);logger.info("Result size: {}", dltLotteryHistories.size());return dltLotteryHistories;} finally {String totalTime = DateUtils.getFriendlyTimeDiff(startTime, System.currentTimeMillis());logger.info("End query, total time: {}", totalTime);}}private List<Integer> parseAndSortBalls(String ballString) {return Arrays.stream(ballString.split(",")).mapToInt(Integer::parseInt).sorted().boxed().collect(Collectors.toList());}private DltLotteryHistory createDltLotteryHistory(List<Integer> balls, List<Integer> blues) {DltLotteryHistory dltLotteryQO = new DltLotteryHistory();for (int i = 0; i < RED_BALLS_COUNT; i++) {dltLotteryQO.setRed(i + 1, balls.get(i));}for (int i = 0; i < BLUE_BALLS_COUNT; i++) {dltLotteryQO.setBlue(i + 1, blues.get(i));}return dltLotteryQO;}
}

总结

在收集了所有期次的彩票数据后,便可以深入进行数据分析和挖掘,从而开发出一系列创新且有趣的功能,为彩票爱好者提供更丰富的体验。
同时,鼓励大家积极参与支持中国公益彩票事业,这不仅是一种娱乐方式,也是对社会公益事业的贡献。祝愿每位参与者都能在享受游戏乐趣的同时,有机会赢得大奖,迈向财富自由的梦想之路。

http://www.zskr.cn/news/10647.html

相关文章:

  • Java实现双色球历史是否中奖查询
  • 别再混淆 PHP8.1 中纤程 Fibers 和协程 Coroutines 了 一文搞懂它们的区别
  • 详细介绍Seata的AT模式分布式事务
  • VMware VeloCloud 漏洞分析:未授权远程代码执行全链条攻破
  • HJ9 提取不重复的整数
  • PRISMS Junior Varsity Training 20250919
  • 为你的数据选择合适的分布:8个实用的概率分布应用场景和选择指南
  • 台风呢
  • 架设moon节点
  • 字符串哈希模板
  • Markdown基本与阿法
  • isEmpty/isNotEmpty/isNotBlank/isBlank-isAnyEmpty/isNoneEmpty/isAnyBlank/isNoneBlank
  • 牛客周赛 Round 110 E,F题解
  • 安装 elasticsearch-9.1.4 - 集群 和 kibana-9.1.4
  • 实测对比:权威榜单之公众号排版Top 5(含效果对比与适用建议)
  • 原码补码反码
  • C#学习1
  • 02020406 EF Core基础06-EF Core生成的SQL
  • 软工第一次编程
  • 从软件开发公司到用户体验设计公司:如何实现全链路数字化产品服务
  • 日志|力扣|不同路径|最小路径和|动态规划|Javase|IO|File|Javaweb
  • 如何建立 5 μm 精度的视觉检测?不仅仅是相机的事
  • 函数 cmd_info_change_cur_model_group
  • 线程--相关概念、两种创建线程的方式
  • 恢复某个数据文件不适当,导致DataGuard无法open数据库
  • 洛谷B4040 [GESP202409 四级] 黑白方块 题解
  • 代码随想录算法训练营第七天 |第454题.四数相加II、383. 赎金信、第15题. 三数之和
  • 9月23号
  • 第一次个人编程作业-论文查重
  • 差分电压