Python分析彩票记录并预测中奖号码过程详解


Posted in Python onJuly 09, 2019

0 引言

上周被一则新闻震惊到了,《2454万元大奖无人认领!福彩史上第二大弃奖在广东中山产生 》,在2019年5月2日开奖的双色球中,广东中山一位彩民博中2454万元,兑奖时间截至2019年7月1日。

令人遗憾的是,中奖者最终未现身领奖,2454万元大奖成为弃奖。经中山市福彩中心查证,这是中国福彩史上金额第二大的弃奖。根据《彩票管理条例实施细则》的有关规定,这次的2454万元弃奖奖金将被纳入彩票公益金。

一直在为福彩做贡献的我,啥时候能摊上这样的好事啊。于是我用Python生成了一组双色球的号码……

1 环境

操作系统:Windows

Python版本:3.7.3

2 需求分析

随机生成一组双色球的号码,我们可以借助random函数,如下:

import random

def ball():
 ball_list=[]
 while 1:
  a=random.randint(1,33)
  if a not in ball_list:
   ball_list.append(a)
  if len(ball_list)==6:
   break

 ball_list.sort()
 ball_list.append(random.randint(1,16))
 print(ball_list)


ball()

但要知道,这么搞的话,丝毫不会有什么中奖的,因为太随机了……

经历过高考的人,肯定都知道三年模拟五年高考。要知道彩票中奖概率很低的,所以我们在这里先分析下历年的数据,借助往年的数据来“精准”地推算下一期中奖号码。

我们通过这个网站来查询彩票的历史开奖信息。

http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html

Python分析彩票记录并预测中奖号码过程详解

我们点击下一页,看看网址链接是否有规律

http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html

http://kaijiang.zhcw.com/zhcw/html/ssq/list_2.html

http://kaijiang.zhcw.com/zhcw/html/ssq/list_3.html

http://kaijiang.zhcw.com/zhcw/html/ssq/list_4.html

http://kaijiang.zhcw.com/zhcw/html/ssq/list_5.html

不难发现,可以将目标网址拆分如下:

url_part = 'http://kaijiang.zhcw.com/zhcw/html/ssq/list'
url = url_part + '_' + str(i) + '.html'

而 i 对应的正好是页码信息,我们借助

Python分析彩票记录并预测中奖号码过程详解

记录下这里的元素信息。

接下来,我们需要抓取每一页中的具体开奖信息。我们继续通过开发者工具分析出每期开奖信息。

我们依次记录下每期的开奖日期对应的元素信息:

Python分析彩票记录并预测中奖号码过程详解

开奖的批次对应的元素信息:

Python分析彩票记录并预测中奖号码过程详解

中奖号码对应的元素信息:

Python分析彩票记录并预测中奖号码过程详解

有了这些元素信息之后,接下来就是代码的具体实现。

3 代码实现

在这里,我们获取网页的请求使用 requests 模块;解析网址借助 beautifulsoup4 模块。因为都是第三方模块,如环境中没有可以使用 pip 进行安装。

pip install requests
pip install beautifulsoup4
pip install lxml

模块安装好之后,进行导入

import requests
from bs4 import BeautifulSoup

我们需要先在首页中,拿到页数信息

# 发起请求
basic_url = 'http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html'
headers = {
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
response = requests.get(basic_url, headers=headers, timeout=10)
response.encoding = 'utf-8'
htm = response.text

# 解析内容
soup = BeautifulSoup(htm, 'html.parser')

# 获取页数信息
page = int(soup.find('p', attrs={"class": "pg"}).find_all('strong')[0].text)

接下来,我们就可以根据规律组装好我们的URL:

url_part = 'http://kaijiang.zhcw.com/zhcw/html/ssq/list'

for i in range(1, page+1):
 url = url_part + '_' + str(i) + '.html'

拿组装后的url发起请求,并获取每页中各期的开奖信息:

res = requests.get(url, headers=headers, timeout=10)
res.encoding = 'utf-8'
context = res.text
soups = BeautifulSoup(context, 'html.parser')

if soups.table is None:
 continue
elif soups.table:
 table_rows = soups.table.find_all('tr')
 for row_num in range(2, len(table_rows)-1):
  row_tds = table_rows[row_num].find_all('td')
  ems = row_tds[2].find_all('em')
  result = row_tds[0].string +', '+ row_tds[1].string +', '+ems[0].string+' '+ems[1].string+' '+ems[2].string+' '+ems[3].string+' '+ems[4].string+' '+ems[5].string+', '+ems[6].string
  print(result)

这样,我们就完成了对每一页中各期开奖数据的获取。获取的数据可以保存在本地。

def save_to_file(content):
 with open('ssq.txt', 'a', encoding='utf-8') as f:
  f.write(content + '\n')

我们在获取每期的开奖数据的同时,记录下红蓝球出现的号码信息。

# 定义两个变量, 用于记录历史开奖信息中的红球、蓝球号码信息

# 定义两个变量, 用于记录历史开奖信息中的红球、蓝球号码信息
red_num = [] 
blue_num = []

red_num.append(ems[0].string) # 红色球1
red_num.append(ems[1].string) # 红色球2
red_num.append(ems[2].string) # 红色球3
red_num.append(ems[3].string) # 红色球4
red_num.append(ems[4].string) # 红色球5
red_num.append(ems[5].string) # 红色球6
blue_num.append(ems[6].string) # 蓝色球

统计出各个号码出现次数信息:

red_count = Counter(red_num)
blue_count = Counter(blue_num)

接下来我们可以根据红蓝号码出现的频率进行排序,并推测出几组双色球号码信息:

# 按照出现频率顺序
red_sorted = sorted(red_count.items(), key=lambda x: x[1], reverse=False)
blue_sorted = sorted(blue_count.items(), key=lambda x: x[1], reverse=False)

red = red_sorted[0:6]
blue = blue_sorted[0:3]

red = list(map(lambda x:x[0], red))
blue = list(map(lambda x:x[0], blue))

red.sort()
blue.sort()

print('号码高频-1注:'+str(red)+' | '+blue[0])
print('号码高频-2注:'+str(red)+' | '+blue[1])
print('号码高频-3注:'+str(red)+' | '+blue[2])

当然了,也可以输出反序输出,中奖号码出现频率较低的几组,只需要设置 reverse=True 即可。

4 后记

这里根据蓝色球各号码出现的次数,作了张直方图,可以很直观到蓝色球各号码出现的频率。

Python分析彩票记录并预测中奖号码过程详解

有人会问了,这样预测出的中奖号码,中奖概率究竟有多大呢?

这个,我可说不清楚,只有买了才会知道……小心错过一个亿哟!

好了,以上就是本篇全部内容。

本文全套代码已上传至Github:https://github.com/MiracleYoung/You-are-Pythonista/tree/master/PythonExercise/Tool/SSQ_Predict/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python urlopen()函数 示例分享
Jun 12 Python
python登录pop3邮件服务器接收邮件的方法
Apr 30 Python
利用python实现数据分析
Jan 11 Python
Python简单实现Base64编码和解码的方法
Apr 29 Python
Python和Java进行DES加密和解密的实例
Jan 09 Python
selenium3+python3环境搭建教程图解
Dec 07 Python
python 实现敏感词过滤的方法
Jan 21 Python
Python3删除排序数组中重复项的方法分析
Jan 31 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
Feb 21 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
Mar 09 Python
详解python中的lambda与sorted函数
Sep 04 Python
如何使用Python自动生成报表并以邮件发送
Oct 15 Python
python求最大值,不使用内置函数的实现方法
Jul 09 #Python
pandas的连接函数concat()函数的具体使用方法
Jul 09 #Python
python爬虫的一个常见简单js反爬详解
Jul 09 #Python
详解PANDAS 数据合并与重塑(join/merge篇)
Jul 09 #Python
python 返回一个列表中第二大的数方法
Jul 09 #Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
Jul 09 #Python
Python3中的最大整数和最大浮点数实例
Jul 09 #Python
You might like
PHP实现邮件群发的源码
2013/06/18 PHP
php读取csv数据保存到数组的方法
2015/01/03 PHP
PHP简单获取视频预览图的方法
2015/03/12 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
JavaScript 常用函数库详解
2009/10/21 Javascript
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
浅谈JavaScript数据类型及转换
2015/02/28 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
jQuery中通过ajax的get()函数读取页面的方法
2016/02/29 Javascript
JavaScript html5 canvas绘制时钟效果(二)
2016/03/27 Javascript
JS中substring与substr的用法
2016/11/16 Javascript
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
2018/01/25 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
elementUI select组件value值注意事项详解
2019/05/29 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
python局部赋值的规则
2013/03/07 Python
python根据出生日期获得年龄的方法
2015/03/31 Python
python操作sqlite的CRUD实例分析
2015/05/08 Python
python常用函数详解
2016/09/13 Python
python实现简单登陆流程的方法
2018/04/22 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
2018/12/07 Python
pyqt5 键盘监听按下enter 就登陆的实例
2019/06/25 Python
python连接、操作mongodb数据库的方法实例详解
2019/09/11 Python
python3实现飞机大战
2020/11/29 Python
预备党员思想汇报范文
2014/01/11 职场文书
服装电子商务创业计划书
2014/01/30 职场文书
同居协议书范本
2014/04/23 职场文书
村级个人对照检查材料
2014/08/22 职场文书
大学推普周活动总结
2015/05/07 职场文书
欠条格式范本
2015/07/03 职场文书
Lakehouse数据湖并发控制陷阱分析
2022/03/31 Oracle
《巫师》是美食游戏?CDPR10月将推出《巫师》官方食谱
2022/04/03 其他游戏