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 相关文章推荐
利用Psyco提升Python运行速度
Dec 24 Python
python opencv之SIFT算法示例
Feb 24 Python
python实现树形打印目录结构
Mar 29 Python
使用Python设计一个代码统计工具
Apr 04 Python
python 列表,数组,矩阵两两转换tolist()的实例
Apr 04 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
Feb 16 Python
python对矩阵进行转置的2种处理方法
Jul 17 Python
Python3.7 pyodbc完美配置访问access数据库
Oct 03 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
python的链表基础知识点
Sep 13 Python
浅析python实现动态规划背包问题
Dec 31 Python
在python中读取和写入CSV文件详情
Jun 28 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去除重复字的实现代码
2011/09/16 PHP
php实现无限级分类(递归方法)
2015/08/06 PHP
浅谈PHP中其他类型转化为Bool类型
2016/03/28 PHP
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
2018/06/22 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
Stop SQL Server
2007/06/21 Javascript
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
JQuery从头学起第一讲
2010/07/04 Javascript
jquery 回车事件实现代码
2011/08/23 Javascript
javascript实现原生ajax的几种方法介绍
2013/09/21 Javascript
Js冒泡事件详解及阻止示例
2014/03/21 Javascript
jquery图片播放浏览插件prettyPhoto使用详解
2014/12/19 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
2016/06/16 Javascript
bootstrap快速制作后台界面
2016/12/05 Javascript
BootStrap Table对前台页面表格的支持实例讲解
2016/12/22 Javascript
详谈jQuery中的一些正则匹配表达式
2017/03/08 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
前端面试知识点目录一览
2019/04/15 Javascript
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
Python遍历pandas数据方法总结
2018/02/09 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
python版opencv摄像头人脸实时检测方法
2018/08/03 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
Python实现网站表单提交和模板
2019/01/15 Python
python判断一个对象是否可迭代的例子
2019/07/22 Python
使用canvas压缩图片上传的方法示例
2020/02/07 HTML / CSS
高考寄语大全
2014/04/08 职场文书
工商行政管理专业求职书
2014/05/23 职场文书
企业法人授权委托书
2014/09/25 职场文书
2014年乡镇个人工作总结
2014/12/03 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
创业计划书之家教托管
2019/09/25 职场文书
Spark SQL 2.4.8 操作 Dataframe的两种方式
2021/10/16 SQL Server