资讯专栏INFORMATION COLUMN

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

yuanxin / 2836人阅读

摘要:令人遗憾的是,中奖者最终未现身领奖,万元大奖成为弃奖。经中山市福彩中心查证,这是中国福彩史上金额第二大的弃奖。根据彩票管理条例实施细则的有关规定,这次的万元弃奖奖金将被纳入彩票公益金。获取的数据可以保存在本地。

目录
0 引言
1 环境
2 需求分析
3 代码实现
4 后记

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...

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

http://kaijiang.zhcw.com/zhcw...

http://kaijiang.zhcw.com/zhcw...

http://kaijiang.zhcw.com/zhcw...

http://kaijiang.zhcw.com/zhcw...

http://kaijiang.zhcw.com/zhcw...

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

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 + "
")

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

# 定义两个变量, 用于记录历史开奖信息中的红球、蓝球号码信息
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专栏」,更多有趣好玩的Python等着你~

本文全套代码已上传至Github:https://github.com/MiracleYou...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/45110.html

相关文章

  • 好好写代码,莫要当韭菜

    摘要:很多小白同事,没有开户的也纷纷开户。但如果你是小白,是个上班族,手里资金有限,也没时间盯盘的人我建议你还是不要参与,进去之后十有八九会当了韭菜。不如把时间用来提升能力,保持好心态,不要被浮躁和赚快钱所影响。 showImg(https://segmentfault.com/img/bVbphvR?w=496&h=290); 最近我发现很多qq 群、微信群、还有身边的同事都在谈论股票。 ...

    Karrdy 评论0 收藏0
  • 【学习笔记】python做些事

    摘要:并返回合理错误提示。如果不在则再输入密码,成功则增加用户信息到文件中,密码进行加密处理。作业增加用户名,密码的合法化判断和错误提示。 课时5:字符串-基础 切片,索引 s = use python do somenthing s[1],s[-1],s[1:3],s[1:6:2],s[1:],s[:-1],s[:] spilt,join,[start:stop:step] 常用方法集...

    wdzgege 评论0 收藏0
  • 零基础 | 入行软件测试,你想知道的都在这里

    摘要:应届生零基础可以学习软件测试吗俗话说,人怕入错行。霸哥这里分别从入行难度入行方式行业前景薪资待遇四个方面来分析一下。目前市场上的测试人员,一部分是企业自己培养的,另一部分是来自培训机构。软件测试的行业门槛低,市场需求量大。 ...

    neroneroffy 评论0 收藏0

发表评论

0条评论

yuanxin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<