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中使用itertools模块中的组合函数的教程
Apr 13 Python
使用Python的web.py框架实现类似Django的ORM查询的教程
May 02 Python
Python的Django REST框架中的序列化及请求和返回
Apr 11 Python
python2.7读取文件夹下所有文件名称及内容的方法
Feb 24 Python
python如何为创建大量实例节省内存
Mar 20 Python
解决Pycharm界面的子窗口不见了的问题
Jan 17 Python
python opencv摄像头的简单应用
Jun 06 Python
python 并发编程 非阻塞IO模型原理解析
Aug 20 Python
django配置app中的静态文件步骤
Mar 27 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
Apr 27 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
Jun 23 Python
Django如何创作一个简单的最小程序
May 12 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中的命名空间相关概念浅析
2015/01/22 PHP
Yii2 assets清除缓存的方法
2016/05/16 PHP
PHP7中I/O模型内核剖析详解
2019/04/14 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
node.js中的fs.link方法使用说明
2014/12/15 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
2015/05/12 Javascript
jQuery中extend函数详解
2015/07/13 Javascript
js点击按钮实现带遮罩层的弹出视频效果
2015/12/19 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
AngularJs实现分页功能不带省略号的代码
2016/05/30 Javascript
react.js 翻页插件实例代码
2017/01/19 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
VUE 全局变量的几种实现方式
2018/08/22 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
微信小程序拼接图片链接无底洞深入探究
2019/09/03 Javascript
vue使用swiper.js重叠轮播组建样式
2019/11/14 Javascript
基于Vue+ElementUI的省市区地址选择通用组件
2019/11/20 Javascript
神经网络理论基础及Python实现详解
2017/12/15 Python
浅谈Python实现Apriori算法介绍
2017/12/20 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
详解Python 调用C# dll库最简方法
2019/06/20 Python
Python生态圈图像格式转换问题(推荐)
2019/12/02 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
2019/12/27 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
2020/03/05 Python
CSS3 @font-face属性使用指南
2014/12/12 HTML / CSS
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
Vero Moda西班牙官方购物网站:丹麦BESTSELLER旗下知名女装品牌
2018/04/27 全球购物
物理分数没达标检讨书
2014/09/13 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
公司总经理岗位职责
2015/04/01 职场文书
4S店销售内勤岗位职责
2015/04/13 职场文书
毕业设计致谢语
2015/05/14 职场文书
格林童话读书笔记
2015/06/30 职场文书
高二数学教学反思
2016/02/18 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
python三子棋游戏
2022/05/04 Python