美文网首页Python,web开发,前端技术分享互联网科技大数据 爬虫Python AI Sql
分析了16年的福利彩票记录,原来可以用Python这么买彩票

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

作者: 2890bd62c72a | 来源:发表于2019-08-06 22:23 被阅读1次

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

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

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

    大家在学python的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:784758214,这里是python学习者聚集地!!同时,自己是一名高级python开发工程师,从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位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 对应的正好是页码信息,我们借助<F12>开发调试工具,来看看页数的信息怎么获取:

    image

    记录下这里的元素信息。

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

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

    image

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

    image

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

    image

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

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

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

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

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

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/cbwmdctx.html