分析了这么多年的福利彩票记录,原来可以用Python这么买彩票!
目錄
- 0 引言
- 1 環(huán)境
- 2 需求分析
- 3 代碼實(shí)現(xiàn)
- 4 后記
0 引言
上周被一則新聞?wù)痼@到了,《2454萬(wàn)元大獎(jiǎng)無(wú)人認(rèn)領(lǐng)!福彩史上第二大棄獎(jiǎng)在廣東中山產(chǎn)生 》,在2019年5月2日開獎(jiǎng)的雙色球中,廣東中山一位彩民博中2454萬(wàn)元,兌獎(jiǎng)時(shí)間截至2019年7月1日。
令人遺憾的是,中獎(jiǎng)?wù)咦罱K未現(xiàn)身領(lǐng)獎(jiǎng),2454萬(wàn)元大獎(jiǎng)成為棄獎(jiǎng)。經(jīng)中山市福彩中心查證,這是中國(guó)福彩史上金額第二大的棄獎(jiǎng)。根據(jù)《彩票管理?xiàng)l例實(shí)施細(xì)則》的有關(guān)規(guī)定,這次的2454萬(wàn)元棄獎(jiǎng)獎(jiǎng)金將被納入彩票公益金。
一直在為福彩做貢獻(xiàn)的我,啥時(shí)候能攤上這樣的好事啊。于是我用Python生成了一組雙色球的號(hào)碼……
1 環(huán)境
操作系統(tǒng):Windows
Python版本:3.7.3
2 需求分析
隨機(jī)生成一組雙色球的號(hào)碼,我們可以借助random函數(shù),如下:
學(xué)習(xí)python中有什么不懂的地方,小編這里推薦加小編的python學(xué)習(xí)群:895 817 687 有任何不懂的都可以在里面交流,還有很好的視頻教程pdf學(xué)習(xí)資料,大家一起學(xué)習(xí)交流!import randomdef 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:breakball_list.sort()ball_list.append(random.randint(1,16))print(ball_list)ball()但要知道,這么搞的話,絲毫不會(huì)有什么中獎(jiǎng)的,因?yàn)樘S機(jī)了……
經(jīng)歷過(guò)高考的人,肯定都知道三年模擬五年高考。要知道彩票中獎(jiǎng)概率很低的,所以我們?cè)谶@里先分析下歷年的數(shù)據(jù),借助往年的數(shù)據(jù)來(lái)“精準(zhǔn)”地推算下一期中獎(jiǎng)號(hào)碼。
我們通過(guò)這個(gè)網(wǎng)站來(lái)查詢彩票的歷史開獎(jiǎng)信息。
http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html
我們點(diǎn)擊下一頁(yè),看看網(wǎng)址鏈接是否有規(guī)律
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
不難發(fā)現(xiàn),可以將目標(biāo)網(wǎng)址拆分如下:
url_part = 'http://kaijiang.zhcw.com/zhcw/html/ssq/list' url = url_part + '_' + str(i) + '.html'而 i 對(duì)應(yīng)的正好是頁(yè)碼信息,我們借助開發(fā)調(diào)試工具,來(lái)看看頁(yè)數(shù)的信息怎么獲取:
記錄下這里的元素信息。
接下來(lái),我們需要抓取每一頁(yè)中的具體開獎(jiǎng)信息。我們繼續(xù)通過(guò)開發(fā)者工具分析出每期開獎(jiǎng)信息。
我們依次記錄下每期的開獎(jiǎng)日期對(duì)應(yīng)的元素信息:
開獎(jiǎng)的批次對(duì)應(yīng)的元素信息:
中獎(jiǎng)號(hào)碼對(duì)應(yīng)的元素信息:
有了這些元素信息之后,接下來(lái)就是代碼的具體實(shí)現(xiàn)。
3 代碼實(shí)現(xiàn)
在這里,我們獲取網(wǎng)頁(yè)的請(qǐng)求使用 requests 模塊;解析網(wǎng)址借助 beautifulsoup4 模塊。因?yàn)槎际堑谌侥K,如環(huán)境中沒(méi)有可以使用 pip 進(jìn)行安裝。
pip install requests pip install beautifulsoup4 pip install lxml模塊安裝好之后,進(jìn)行導(dǎo)入
import requests from bs4 import BeautifulSoup我們需要先在首頁(yè)中,拿到頁(yè)數(shù)信息
# 發(fā)起請(qǐng)求 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# 解析內(nèi)容 soup = BeautifulSoup(htm, 'html.parser')# 獲取頁(yè)數(shù)信息 page = int(soup.find('p', attrs={"class": "pg"}).find_all('strong')[0].text)接下來(lái),我們就可以根據(jù)規(guī)律組裝好我們的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發(fā)起請(qǐng)求,并獲取每頁(yè)中各期的開獎(jiǎng)信息:
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].stringprint(result)這樣,我們就完成了對(duì)每一頁(yè)中各期開獎(jiǎng)數(shù)據(jù)的獲取。獲取的數(shù)據(jù)可以保存在本地。
def save_to_file(content):with open('ssq.txt', 'a', encoding='utf-8') as f:f.write(content + '\n')我們?cè)讷@取每期的開獎(jiǎng)數(shù)據(jù)的同時(shí),記錄下紅藍(lán)球出現(xiàn)的號(hào)碼信息。
# 定義兩個(gè)變量, 用于記錄歷史開獎(jiǎng)信息中的紅球、藍(lán)球號(hào)碼信息 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) # 藍(lán)色球統(tǒng)計(jì)出各個(gè)號(hào)碼出現(xiàn)次數(shù)信息:
red_count = Counter(red_num) blue_count = Counter(blue_num)接下來(lái)我們可以根據(jù)紅藍(lán)號(hào)碼出現(xiàn)的頻率進(jìn)行排序,并推測(cè)出幾組雙色球號(hào)碼信息:
# 按照出現(xiàn)頻率順序 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('號(hào)碼高頻-1注:'+str(red)+' | '+blue[0]) print('號(hào)碼高頻-2注:'+str(red)+' | '+blue[1]) print('號(hào)碼高頻-3注:'+str(red)+' | '+blue[2])當(dāng)然了,也可以輸出反序輸出,中獎(jiǎng)號(hào)碼出現(xiàn)頻率較低的幾組,只需要設(shè)置 reverse=True 即可。
4 后記
這里根據(jù)藍(lán)色球各號(hào)碼出現(xiàn)的次數(shù),作了張直方圖,可以很直觀到藍(lán)色球各號(hào)碼出現(xiàn)的頻率。
有人會(huì)問(wèn)了,這樣預(yù)測(cè)出的中獎(jiǎng)號(hào)碼,中獎(jiǎng)概率究竟有多大呢?
這個(gè),我可說(shuō)不清楚,只有買了才會(huì)知道……小心錯(cuò)過(guò)一個(gè)億喲!
好了,以上就是本篇全部?jī)?nèi)容。
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的分析了这么多年的福利彩票记录,原来可以用Python这么买彩票!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 别再说Python没有枚举类型了,好好看
- 下一篇: Python果然不得了,数独都能轻松解决