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自动化工具日志查询分析脚本代码实现
Nov 26 Python
自己使用总结Python程序代码片段
Jun 02 Python
Python基于递归算法实现的走迷宫问题
Aug 04 Python
Python 2.x如何设置命令执行的超时时间实例
Oct 19 Python
python随机数分布random测试
Aug 27 Python
Python实现正则表达式匹配任意的邮箱方法
Dec 20 Python
python DataFrame 取差集实例
Jan 30 Python
浅谈python3.6的tkinter运行问题
Feb 22 Python
Python时间和字符串转换操作实例分析
Mar 16 Python
Pytorch 保存模型生成图片方式
Jan 10 Python
解决python3.6用cx_Oracle库连接Oracle的问题
Dec 07 Python
matplotlib相关系统目录获取方式小结
Feb 03 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防止恶意刷新与刷票的方法
2014/11/21 PHP
PHP实现微信小程序用户授权的工具类示例
2019/03/05 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
动态创建的表格单元格中的事件实现代码
2008/12/30 Javascript
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
JavaScript中OnLoad几种使用方法
2012/12/15 Javascript
JS函数实现动态添加CSS样式表文件
2012/12/15 Javascript
JavaScript地图拖动功能SpryMap的简单实现
2013/07/17 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
js遍历获取表格内数据的方法(必看)
2017/04/06 Javascript
Angular2数据绑定详解
2017/04/18 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
Vue.js中关于侦听器(watch)的高级用法示例
2018/05/02 Javascript
angular2实现统一的http请求头方法
2018/08/13 Javascript
浅谈Angular7 项目开发总结
2018/12/19 Javascript
vue-router beforeEach跳转路由验证用户登录状态
2018/12/26 Javascript
[03:26]回顾2015国际邀请赛中国区预选赛
2015/06/09 DOTA
[03:23:49]2016.12.17日完美“圣”典全回顾
2016/12/19 DOTA
[01:14:30]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第二场 8.20.mp4
2019/08/22 DOTA
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
2018/06/26 Python
Ubuntu18.04下python版本完美切换的解决方法
2019/06/14 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
2020/02/26 Python
Python3使用xlrd、xlwt处理Excel方法数据
2020/02/28 Python
python中append函数用法讲解
2020/12/11 Python
python中pickle模块浅析
2020/12/29 Python
Python自动化测试基础必备知识点总结
2021/02/07 Python
美国殿堂级滑板、冲浪、滑雪服装品牌:Volcom(钻石)
2017/04/20 全球购物
CSS代码检查工具stylelint的使用方法详解
2021/03/27 HTML / CSS
医院护理人员的自我评价分享
2013/10/04 职场文书
高中国旗下的演讲稿
2014/08/28 职场文书
2014年学生工作总结
2014/11/20 职场文书
毕业实习证明范本
2015/06/16 职场文书
浅谈Redis缓冲区机制
2022/06/05 Redis