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

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

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

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 对应的正好是页码信息,我们借助

记录下这里的元素信息。

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

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

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

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

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

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 后记

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

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

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

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

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

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

(0)

相关推荐

  • Python随机生成彩票号码的方法

    本文实例讲述了Python随机生成彩票号码的方法.分享给大家供大家参考.具体如下: 前些日子在淘宝上买了一阵子彩票,每次都是使用淘宝的机选,每次一注.后来觉得不如自己写一个机选的程序有意思 1. xuanhao.py文件 import random def getResultStr(totalCount, resultCount): elements = [x + 1 for x in range(totalCount)] retStr = '' for i in range(resultCou

  • python实现彩票系统

    本文为大家分享了python实现彩票系统的具体代码,供大家参考,具体内容如下 功能:1.注册  2.登录  3.充钱   4.提现  5.下注  6.开奖  7.退出 简述:彩民需要用身份证号码开户注册一个彩票号码,购买彩票时需要先登录,可以充值以及提现.购买的彩票金额可以自己给定.此系统主要采用面向对象的方法,信息存储方式采用pickle模块来进行存储. 系统主函数: from lotterysystem import lotterySystem import displayview impo

  • Python实现的彩票机选器实例

    本文实例讲述了Python实现彩票机选器的方法.分享给大家供大家参考.具体实现方法如下: # -*- coding: utf8 -*- from Tkinter import * import tkFont import random class App: def __init__(self, master) : frame = [Frame() for i in range(4)] for i in range(4): frame[i] = Frame(master) frame[i].pac

  • Python编程实现使用线性回归预测数据

    本文中,我们将进行大量的编程--但在这之前,我们先介绍一下我们今天要解决的实例问题. 1) 预测房子价格 房价大概是我们中国每一个普通老百姓比较关心的问题,最近几年保障啊,小编这点微末工资着实有点受不了. 我们想预测特定房子的价值,预测依据是房屋面积. 2) 预测下周哪个电视节目会有更多的观众 闪电侠和绿箭侠是我最喜欢的电视节目,特别是绿箭侠,当初追的昏天黑地的,不过后来由于一些原因,没有接着往下看.我想看看下周哪个节目会有更多的观众. 3) 替换数据集中的缺失值 我们经常要和带有缺失值的数据集

  • 使用Python计算玩彩票赢钱概率

    工具:Jupyter notebook + Anaconda 游戏规则:时时彩一种玩法是买尾号.2元一个数字,中奖是20元.每个数字出现的概率相等. 目前想到两种买法: 随机购买,人是感性动物,很容易受周围环境干扰.完全随机购买在生活中是不存在的. 分析数字在前面N期出现的概率,选择概率最小的n个数字购买. 导入包 import numpy as np 定义玩法一:完全随机购买 def play_lottery(my_money,play_num,money): ''' 随机选择数的中奖率 re

  • Python数据分析之双色球基于线性回归算法预测下期中奖结果示例

    本文实例讲述了Python数据分析之双色球基于线性回归算法预测下期中奖结果.分享给大家供大家参考,具体如下: 前面讲述了关于双色球的各种算法,这里将进行下期双色球号码的预测,想想有些小激动啊. 代码中使用了线性回归算法,这个场景使用这个算法,预测效果一般,各位可以考虑使用其他算法尝试结果. 发现之前有很多代码都是重复的工作,为了让代码看的更优雅,定义了函数,去调用,顿时高大上了 #!/usr/bin/python # -*- coding:UTF-8 -*- #导入需要的包 import pan

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

    0 引言 上周被一则新闻震惊到了,<2454万元大奖无人认领!福彩史上第二大弃奖在广东中山产生 >,在2019年5月2日开奖的双色球中,广东中山一位彩民博中2454万元,兑奖时间截至2019年7月1日. 令人遗憾的是,中奖者最终未现身领奖,2454万元大奖成为弃奖.经中山市福彩中心查证,这是中国福彩史上金额第二大的弃奖.根据<彩票管理条例实施细则>的有关规定,这次的2454万元弃奖奖金将被纳入彩票公益金. 一直在为福彩做贡献的我,啥时候能摊上这样的好事啊.于是我用Python生成了

  • python目标检测SSD算法预测部分源码详解

    目录 学习前言 什么是SSD算法 ssd_vgg_300主体的源码 学习前言 ……学习了很多有关目标检测的概念呀,咕噜咕噜,可是要怎么才能进行预测呢,我看了好久的SSD源码,将其中的预测部分提取了出来,训练部分我还没看懂 什么是SSD算法 SSD是一种非常优秀的one-stage方法,one-stage算法就是目标检测和分类是同时完成的,其主要思路是均匀地在图片的不同位置进行密集抽样,抽样时可以采用不同尺度和长宽比,然后利用CNN提取特征后直接进行分类与回归,整个过程只需要一步,所以其优势是速度

  • 基于python中pygame模块的Linux下安装过程(详解)

    一.使用pip安装Python包 大多数较新的Python版本都自带pip,因此首先可检查系统是否已经安装了pip.在Python3中,pip有时被称为pip3. 1.在Linux和OS X系统中检查是否安装了pip 打开一个终端窗口,并执行如下命令: Python2.7中: zhuzhu@zhuzhu-K53SJ:~$ pip --version pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7) Python3.X中: z

  • python使用scapy模块实现ping扫描的过程详解

    关于scapy Scapy 是一个可以让用户发送.侦听和解析并伪装网络报文的Python程序.这些功能可以用于制作侦测.扫描和攻击网络的工具. 换言之, Scapy 是一个强大的操纵报文的交互程序.它可以伪造或者解析多种协议的报文,还具有发送.捕获.匹配请求和响应这些报文以及更多的功能. Scapy 可以轻松地做到像扫描(scanning).路由跟踪(tracerouting).探测(probing).单元测试(unit tests).攻击(attacks)和发现网络(network disco

  • Python实现字符型图片验证码识别完整过程详解

    1摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的防火墙功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越来越严峻.本文介绍了一套字符验证码识别的完整流程,对于验证码安全和OCR识别技术都有一定的借鉴意义. 本文的基于传统的机器学习SVM的源码共享:https://github.com/zhengwh/captcha-svm 2关键词 关键词:安全,字符图片,验证码识别,OCR,Python,SVM,PIL 3免责声明 本文研究所用素材来自于某旧Web框架的网

  • 用python把ipynb文件转换成pdf文件过程详解

    这两天一直在做课件,我个人一直不太喜欢PPT这个东西--能不用就不用,我个人特别崇尚极简风. 谁让我们是程序员呢,所以就爱上了Jupyter写课件,讲道理markdown也是个非常不错的写书格式啊. 安装Jupyter其实非常简单,你会python就应该会用jupyter,起码简单的 pip install jupyter, jupyter notebook 要会对伐- 好那接下来就是使用jupyter了,启动jupyter后,使用浏览器访问相应IP:Port就可以使用了.没错,jupyter就

  • Python 200行代码实现一个滑动验证码过程详解

    前言 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大致说明下这些验证码的原理以及带大家实现一个滑动验证码. 实际上这类验证码的校验是分为两个步骤的: 1.第一步就是前端的校验.一般来说,登录注册页面在点击提交的时候都会伴随着一个表单提交,在表单提交的时候会有 JavaScript 事件的触发.如果加入了验证码,那么在表单提交的时候会多加一个额外的验证,判断这个验证码是否已经成功完成了操作.如果没有的话,

  • Python基于Opencv来快速实现人脸识别过程详解(完整版)

    前言 随着人工智能的日益火热,计算机视觉领域发展迅速,尤其在人脸识别或物体检测方向更为广泛,今天就为大家带来最基础的人脸识别基础,从一个个函数开始走进这个奥妙的世界. 首先看一下本实验需要的数据集,为了简便我们只进行两个人的识别,选取了beyond乐队的主唱黄家驹和贝斯手黄家强,这哥俩长得有几分神似,这也是对人脸识别的一个考验: 两个文件夹,一个为训练数据集,一个为测试数据集,训练数据集中有两个文件夹0和1,之前看一些资料有说这里要遵循"slabel"命名规则,但后面处理起来比较麻烦,

  • python单线程下实现多个socket并发过程详解

    先看服务端的代码 import sys # import socket import time import gevent from gevent import socket from gevent import monkey monkey.patch_all() #类似于python中的黑魔法,把很多模块的阻塞的变成非阻塞的,比如socket中的rece和send都变 # 为不阻塞了 def server(port): s = socket.socket() s.bind(("127.0.0.

  • Python在cmd上打印彩色文字实现过程详解

    前言 在Windows上编写python程序时,有时候需要对输出的文字颜色进行设置,特别是日志显示,不同级别的日志设置不同的颜色进行展示可以直观查看.本文主要描述通过ctypes.windll.kernel32调用GetStdHandle()和SetConsoleTextAttribute()两个API实现来实现Windows控制台的彩色背景及彩色文字. 基本概念描述 首先分别介绍GetStdHandle()和SetConsoleTextAttribute()这两个API. (1) GetStd

随机推荐