Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >分析了16年的福利彩票记录,原来可以用Python这么买彩票

分析了16年的福利彩票记录,原来可以用Python这么买彩票

作者头像
周三不加班
发布于 2019-07-15 11:52:44
发布于 2019-07-15 11:52:44
1.9K02
代码可运行
举报
文章被收录于专栏:程序猿杂货铺程序猿杂货铺
运行总次数:2
代码可运行

上周被一则新闻震惊到了,《2454万元大奖无人认领!福彩史上第二大弃奖在广东中山产生 》,在2019年5月2日开奖的双色球中,广东中山一位彩民博中2454万元,兑奖时间截至2019年7月1日。

令人遗憾的是,中奖者最终未现身领奖,2454万元大奖成为弃奖。经中山市福彩中心查证,这是中国福彩史上金额第二大的弃奖。根据《彩票管理条例实施细则》的有关规定,这次的2454万元弃奖奖金将被纳入彩票公益金。

一直在为福彩做贡献的我,啥时候能摊上这样的好事啊。于是我用Python生成了一组双色球的号码……

1 环境

操作系统:Windows

Python版本:3.7.3

2 需求分析

随机生成一组双色球的号码,我们可以借助random函数,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

不难发现,可以将目标网址拆分如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
url_part = 'http://kaijiang.zhcw.com/zhcw/html/ssq/list'

url = url_part + '_' + str(i) + '.html'

而 i 对应的正好是页码信息,我们借助<F12>开发调试工具,来看看页数的信息怎么获取:

记录下这里的元素信息。

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

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

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

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

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

3 代码实现

在这里,我们获取网页的请求使用 requests 模块;解析网址借助 beautifulsoup4 模块。因为都是第三方模块,如环境中没有可以使用 pip 进行安装。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install requests
pip install beautifulsoup4
pip install lxml

模块安装好之后,进行导入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import requests
from bs4 import BeautifulSoup

我们需要先在首页中,拿到页数信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 发起请求
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:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
url_part = 'http://kaijiang.zhcw.com/zhcw/html/ssq/list'

for i in range(1, page+1):
    url = url_part + '_' + str(i) + '.html'

拿组装后的url发起请求,并获取每页中各期的开奖信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)

这样,我们就完成了对每一页中各期开奖数据的获取。获取的数据可以保存在本地。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def save_to_file(content):
    with open('ssq.txt', 'a', encoding='utf-8') as f:
        f.write(content + '\n')

我们在获取每期的开奖数据的同时,记录下红蓝球出现的号码信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 定义两个变量, 用于记录历史开奖信息中的红球、蓝球号码信息
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) # 蓝色球

统计出各个号码出现次数信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
red_count = Counter(red_num)
blue_count = Counter(blue_num)

接下来我们可以根据红蓝号码出现的频率进行排序,并推测出几组双色球号码信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 按照出现频率顺序
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 后记

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

有人会问了,这样预测出的中奖号码,中奖概率究竟有多大呢?这个,我可说不清楚,只有买了才会知道……小心错过一个亿哟!

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

推荐阅读

程序员进阶之路 --- 网络协议概观

所有的不可描述都要从“我姐姐让我加你“的好友请求开始说起...

缓存更新的套路

一次惊心动魄的服务器误删文件恢复过程

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员啊粥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
hncloud:TCP IP协议的发展和优势
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/互联网协议)是互联网和现代计算机网络的基础协议集。它定义了数据在网络上如何被组织、传输和路由。TCP/IP协议集包含了许多协议,每个协议负责网络通信过程中的不同方面。下面是对TCP/IP协议的详细介绍,包括其工作原理、组成部分以及实际应用。
用户11163528
2024/08/14
2220
面试题:TCP 和 UDP 分别对应的常见应用层协议有哪些?
TCP 是一种面向连接的协议,通常用于数据传输至关重要的应用程序。以下是几个常见的应用层协议:
GeekLiHua
2025/01/21
1800
36 张图详解应用层协议:网络世界的最强王者
我们前面介绍过 TCP/IP 模型的下三层,分别是网络接入层、网络层和传输层。它们都是为应用层服务的,传输应用层的各种数据,现在我们就来看看最高层的应用层。
Bug开发工程师
2021/07/28
4.7K0
36 张图详解应用层协议:网络世界的最强王者
字节二面:TCP 与 UDP 的区别?
HTTP 协议是基于 TCP 协议的,所以发送 HTTP 请求之前首先要建立 TCP 连接也就是要经历 3 次握手。
Guide哥
2022/11/07
6910
字节二面:TCP 与 UDP 的区别?
图示:IT互联网3种典型网络拓扑及计算机端口号汇总
在网络设计的时候,网络架构师需要根据组网的规模设计不同的组网架构,今天介绍3种典型网络架构。
Ponnie
2022/03/15
2K0
图示:IT互联网3种典型网络拓扑及计算机端口号汇总
计算机网络常用端口号大全「建议收藏」
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/01
4.2K0
TCP/IP模型
有了上面的解释,对于TCP/IP模型理解就不是很难了,下图作为OSI的“进阶”模型对比就很有说服力了。
碎碎思
2020/06/30
1K0
TCP/IP模型
计算机网络TCP/IP四层模型
网络接口层是TCP/IP模型的最底层,相当于OSI模型的物理层和数据链路层的组合,负责处理与物理网络的接口。
久绊A
2025/04/23
1210
安全杂乱笔记整理1---常用服务端口总结
不管作为网络工程师还是安全从业者,其实都应该知道常用服务的端口及协议情况,这里进行简单的整理。
coders
2020/09/17
8250
OSI模型第7层协议涉及的9大应用,你都了解吗?
第 7 层,即应用程序层,是用户的接口,提供处理应用程序通信部分的服务,它识别所需的通信接收者并确保接收者可用于传输会话,与应用层相关的协议包括: 1、文件传输协议 (FTP) 提供两台计算机之间经过身份验证的文件传输和对目录的访问; 它不能将远程文件作为程序执行。 2、普通文件传输协议 (TFTP) 简化版 FTP; 不提供对目录的身份验证或访问。 3、域名服务 (DNS) 将主机名与 IP 地址匹配的分布式数据库系统,反之亦然。 一个流行的 DNS 实现是伯克利互联网名称域 (BIND)。 4、简单
网络技术联盟站
2023/03/13
4610
OSI模型第7层协议涉及的9大应用,你都了解吗?
运维工程师们请记住:封掉这 50 个高危端口,让你的系统稳如泰山!
都说 Linux 是世界上最安全的操作系统,与 Windows 等闭源操作系统相比,Linux 在安全性方面具有一些独特优势。然而,这并不意味着 Linux 是绝对无懈可击的。任何操作系统都可能存在安全漏洞,关键在于如何及时应对和修复。
民工哥
2024/10/21
8820
运维工程师们请记住:封掉这 50 个高危端口,让你的系统稳如泰山!
互联网基石:TCP/IP四层模型
前段时间给大家分享了OSI七层模型,那么与之对应的TCP/IP模型肯定也要提上日程。
网络技术联盟站
2023/03/05
4.1K0
互联网基石:TCP/IP四层模型
TCP/IP关键协议记忆小卡片
在互联网中实际使用的是TCP/IP参考模型。实际存在的协议主要包括在:物理层、数据链路层、网络层、传输层和应用层。 应用层   ·DHCP(动态主机分配协议)   · DNS (域名解析)   · FTP(File Transfer Protocol)文件传输协议   · Gopher (英文原义:The Internet Gopher Protocol 中文释义:(RFC-1436)网际Gopher协议)   · HTTP (Hypertext Transfer Protocol)超文本传
程序员互动联盟
2018/03/12
1.2K0
TCP/IP关键协议记忆小卡片
常见的网络协议
这些网络协议在计算机网络通信中起着至关重要的作用,不同的协议在不同的场景下发挥着各自的优势。
程序员朱永胜
2023/11/17
5950
【Go 语言社区】linux常用网络服务端口一览表及详细分析
端口号码 / 层 名称 注释 1 tcpmux TCP 端口服务多路复用 5 rje 远程作业入口 7 echo Echo 服务 9 discard 用于连接测试的空服务 11 systat 用于列举连接了的端口的系统状态 13 daytime 给请求主机发送日期和时间 17 qotd 给连接了的主机发送每日格言 18 msp 消息发送协议 19 chargen 字符生成服务;发送无止境的字符流 2
李海彬
2018/03/20
1.5K0
Window基础(黑客基础)
1.ProgramData:C:\ProgramData 是个公用的被创建文件夹或文件存放的地方,这些文件夹或文件仅由创建者完整控制。programdata是电脑C盘的一个系统文件夹
全栈程序员站长
2022/08/15
3.6K0
Window基础(黑客基础)
测试常识之IP-MAC-端口
测试工作中,我们经常会遇到环境搭建、问题排查的过程,而下面这几个概念是我们常常会遇到,对于一些零基础的同学还是有必要多了解一下。
吾非同
2020/10/14
1K0
TCP/IP协议详解
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/互联网协议)是互联网的基本协议,也是国际互联网络的基础。
天乐404
2023/11/16
4K0
TCP/IP协议详解
数据链路层、网络层、传输层和应用层的协议
数据链路层是在物理层之上的第二层协议。它的主要作用是在不可靠的物理链路上建立可靠的数据传输。数据链路层的主要协议有:以太网协议、局域网协议、无线协议等。
玖叁叁
2023/04/27
2.1K0
端口号大揭秘:网络世界的“门牌号”有多牛?
首先,让我们迈进80/tcp端口,这个地方就像是数字版的美食街,即HTTP的天堂。在这里,你可以品尝到各种各样的网页美味。有的是炸鸡网页,有的是披萨网页,当然,还有那些经典的汉堡网页。整个街区都散发着浓郁的信息香气,让人垂涎三尺。
人不走空
2024/02/20
6700
端口号大揭秘:网络世界的“门牌号”有多牛?
推荐阅读
相关推荐
hncloud:TCP IP协议的发展和优势
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验