当前位置: 首页 > 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.hskmm.com/?act=detail&tid=15440

相关文章:

  • 【读书笔记】《深入理解计算机系统(原书第三版)》第一章 计算机系统漫游
  • 如何将PPT每一页批量导出为高清JPG图片?一文讲清处理流程
  • 实用指南:计算机视觉:基于YOLOv11 实例分割与OpenCV 在 Java 中的实现图像实例分割
  • Java实现双色球历史是否中奖查询
  • ABC424 游记(VP)
  • Java实现大乐透历史是否中奖查询
  • 阿德勒的课题分离是很好用的东西
  • 别再混淆 PHP8.1 中纤程 Fibers 和协程 Coroutines 了 一文搞懂它们的区别
  • 主要测试的测试用例
  • 详细介绍Seata的AT模式分布式事务
  • VMware VeloCloud 漏洞分析:未授权远程代码执行全链条攻破
  • 【GitHub每日速递 250924】18 个 AI 投资大师齐上阵!这个开源对冲基金让你看透市场底牌
  • HJ9 提取不重复的整数
  • 2025年国家科技奖初评公布(科技进步奖)
  • 2025年国家科技奖初评公布(科技发明奖)
  • 12
  • 2025年国家科技奖初评公布(自然科学奖)
  • 近端策略优化算法PPO的核心概念和PyTorch实现详解
  • JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
  • Memento:基于记忆无需微调即可让大语言模型智能体持续学习的框架
  • 记录一次附加属性失效全过程
  • Java 与物联网(IoT):边缘计算与智能终端应用
  • 为你的数据选择合适的分布:8个实用的概率分布应用场景和选择指南
  • AI 落地应用最新工具集
  • 台风呢
  • Day07-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\David\method-Demo041比较难
  • Markdown基本与阿法
  • 对称二叉树
  • 一例电动车充电器防反接电路分析
  • isEmpty/isNotEmpty/isNotBlank/isBlank-isAnyEmpty/isNoneEmpty/isAnyBlank/isNoneBlank