天天看點

python中獎号_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 後記

這裡根據藍色球各号碼出現的次數,作了張直方圖,可以很直覺到藍色球各号碼出現的頻率。

有人會問了,這樣預測出的中獎号碼,中獎機率究竟有多大呢?

這個,我可說不清楚,隻有買了才會知道……小心錯過一個億喲!

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

以上就是本文的全部内容,希望對大家的學習有所幫助,也希望大家多多支援龍方網絡。