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实现的使用telnet登陆聊天室实例
Jun 17 Python
Python常用算法学习基础教程
Apr 13 Python
Django admin美化插件suit使用示例
Dec 12 Python
对python numpy数组中冒号的使用方法详解
Apr 17 Python
对python3 urllib包与http包的使用详解
May 10 Python
Python可迭代对象操作示例
May 07 Python
python 寻找离散序列极值点的方法
Jul 10 Python
Python class的继承方法代码实例
Feb 14 Python
Python中pyecharts安装及安装失败的解决方法
Feb 18 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
Feb 21 Python
Python实现上下文管理器的方法
Aug 07 Python
python读取excel数据绘制简单曲线图的完整步骤记录
Oct 30 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
关于file_get_contents返回为空或函数不可用的解决方案
2013/06/24 PHP
php实现统计邮件大小的方法
2013/08/06 PHP
教你如何使用php session
2013/10/28 PHP
php+ajax制作无刷新留言板
2015/10/27 PHP
php封装的连接Mysql类及用法分析
2015/12/10 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
php封装的mysqli类完整实例
2016/10/18 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
2019/05/13 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
2019/07/26 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
读jQuery之二(两种扩展)
2011/06/11 Javascript
jquery中使用循环下拉菜单示例代码
2014/09/24 Javascript
Javascript中的apply()方法浅析
2015/03/15 Javascript
AngularJS学习笔记之ng-options指令
2015/06/16 Javascript
jQuery基于muipicker实现仿ios时间选择
2016/02/22 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
Javascript发送AJAX请求实例代码
2016/08/21 Javascript
Vue.js组件使用开发实例教程
2016/11/01 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
2017/01/16 Javascript
详解nodejs express下使用redis管理session
2017/04/24 NodeJs
Node之简单的前后端交互(实例讲解)
2017/11/14 Javascript
vue 项目中当访问路由不存在的时候默认访问404页面操作
2020/08/31 Javascript
收藏整理的一些Python常用方法和技巧
2015/05/18 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
Python爬虫抓取代理IP并检验可用性的实例
2018/05/07 Python
Python学习笔记之图片人脸检测识别实例教程
2019/03/06 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
css3实现文字首尾衔接跑马灯的示例代码
2020/10/16 HTML / CSS
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
俄罗斯便宜的在线服装商店:GroupPrice
2020/04/10 全球购物
工程造价专业大学生自荐信
2013/10/01 职场文书
校庆标语集锦
2014/06/25 职场文书
企业安全生产目标责任书
2014/07/23 职场文书
圣诞节开幕词
2015/01/29 职场文书
班主任寄语2016
2015/12/04 职场文书
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python