如何使用 Python 實現(xiàn)彩票自由(大樂透)
大家好,我是安果!
本篇文章將介紹 Python 實現(xiàn)彩票自由的全流程
#?1. 隨機一注
體彩大樂透一注包含 7 個數(shù)字,包含 5 個紅球和 2 個籃球
其中
紅球是從 1 - 35 中選擇 5 個不同的數(shù)字
藍球是從 1 - 12 中選擇 2 個不同的數(shù)字
使用 Python 隨機生成一注號碼部分代碼如下:
def?gene_dlt(number):
????"""
????隨機多注大樂透
????:param?number:
????:return:
????"""
????result?=?[]
????for?index?in?range(number):
????????#?產(chǎn)生5個紅球
????????red?=?random.sample([i?for?i?in?range(1,?36)],?5)
????????#?產(chǎn)生2個藍球
????????blue?=?random.sample([i?for?i?in?range(1,?13)],?2)
????????#?排序
????????red.sort()
????????blue.sort()
????????#?數(shù)據(jù)處理
????????red?=?nums_pre(red)
????????blue?=?nums_pre(blue)
????????result.append('?'.join(red)?+?"?+?"?+?'?'.join(blue))
????return?'\n'.join(result)
需要注意的是,為了方便后面判斷是否中獎,這里進行了一次數(shù)據(jù)預處理,將小于 10 的數(shù)字前面加上 0
def?nums_pre(nums):
????"""
????購買數(shù)字預處理,如果是個位數(shù),加上0
????:param?nums:
????:return:
????"""
????if?nums:
????????if?isinstance(nums,?list)?or?isinstance(nums,tuple):
????????????return?['0{}'.format(int(item))?if?int(item)?10?else?str(int(item))?for?item?in?nums]
????????else:
????????????return?'0{}'.format(int(nums))?if?int(nums)?10?else?str(int(nums))
????else:
????????return?''#?2. 紅球固定或藍球固定
很多彩民認為中獎號碼沒有規(guī)律,因此會選擇根據(jù)自己的幸運數(shù)字,組成一注號碼進行固定購買
2-1 ?紅球固定
紅球固定的情況下,我們只需要隨機生成藍球,然后進行排序、數(shù)據(jù)預處理,最后組成一注號碼即可
def?gene_blue_random_dlt(red,?number):
????"""
????紅球固定,籃球隨機
????:param?red:紅球
????:param?number:隨機注數(shù)
????:return:
????"""
????result?=?[]
????for?index?in?range(number):
????????#?產(chǎn)生2個藍球
????????blue?=?random.sample([i?for?i?in?range(1,?13)],?2)
????????#?排序
????????red.sort()
????????blue.sort()
????????#?數(shù)據(jù)處理
????????red?=?nums_pre(red)
????????blue?=?nums_pre(blue)
????????result.append('?'.join(red)?+?"?+?"?+?'?'.join(blue))
????return?'\n'.join(result)
2-2? 藍球固定
藍球固定時,我們只需要從 1-35 中隨機生成 5 個不同的數(shù)字即可
def?gene_red_random_dlt(blue,?number):
????"""
????5個紅球隨機,2個籃球固定
????:param?blue:藍球列表
????:param?number:隨機注數(shù)
????:return:
????"""
????result?=?[]
????for?index?in?range(number):
????????#?產(chǎn)生5個紅球
????????red?=?random.sample([i?for?i?in?range(1,?36)],?5)
????????#?排序
????????red.sort()
????????blue.sort()
????????#?數(shù)據(jù)處理
????????red?=?nums_pre(red)
????????blue?=?nums_pre(blue)
????????result.append('?'.join(red)?+?"?+?"?+?'?'.join(blue))
????return?'\n'.join(result)
#?3. 爬取中獎號碼
體彩大樂透開獎時間一般是晚上 9 點到 10 點之間,這里建議選擇晚上 10 點半進行爬蟲,保證爬取數(shù)據(jù)的穩(wěn)定準確性
目標地址:
aHR0cHM6Ly9rYWlqaWFuZy41MDAuY29tL3N0YXRpYy9pbmZvL2thaWppYW5nL3htbC9kbHQvbGlzdC54bWw=
該網(wǎng)站通過 XML 數(shù)據(jù)展示了每一期大樂透的中獎號碼,我們只需要使用正則表達式匹配出所有中獎號碼,取最近的一期號碼即可
import?re
import?requests
class?DLT(object):
????def?__init__(self):
????????#?自行去轉(zhuǎn)碼獲?。ü娞枺杭宓案沐X)
????????self.url?=?'**'
????????self.headers?=?{
????????????'User-Agent':?'Mozilla/5.0?(Macintosh;?Intel?Mac?OS?X?10_11_2)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/71.0.3578.98?Safari/537.36'
????????}
????def?get_last_dlt_lucky(self):
????????#?發(fā)起請求
????????reponse?=?requests.get(url=self.url,?headers=self.headers)
????????#?正則規(guī)則
????????pattern?=?re.compile(r')
????????#?大樂透數(shù)據(jù)
????????dlt_raw_list?=?pattern.findall(reponse.text)
????????results?=?[]
????????for?item?in?dlt_raw_list:
????????????#?期數(shù)、數(shù)據(jù)、時間
????????????no,?info,?create_at?=?item
????????????#?5個紅球、2個籃球
????????????red,?blue?=?info.split("|")
????????????red_datas?=?red.split(",")
????????????blue_datas?=?blue.split(",")
????????????results.append(
????????????????[no,?red_datas[0],?red_datas[1],?red_datas[2],?red_datas[3],?red_datas[4],?blue_datas[0],?blue_datas[1],
?????????????????create_at]
????????????)
????????#?最近的一期中獎號碼
????????last_lottery?=?results[0]
????????return?[last_lottery[1],?last_lottery[2],?last_lottery[3],?last_lottery[4],?last_lottery[5]],?\
???????????????[last_lottery[6],?last_lottery[7]]
# 4. 是否中獎
有了購買號碼、中獎號碼,我們查看體彩大樂透官網(wǎng)中獎規(guī)則,根據(jù)紅球中獎個數(shù)、藍球中獎個數(shù)返回中獎信息即可
實現(xiàn)代碼如下:
...
def?judge_dlt_lucky(red_nums_result,?red_nums_buy,?blue_nums_result,?blue_nums_buy):
????"""
????根據(jù)中獎號碼及購買號碼,返回對應的中獎信息
????:param?red_nums_result:
????:param?red_nums_buy:
????:param?blue_num_result:
????:param?blue_num_buy:
????:return:
????"""
????#?紅球預測的數(shù)目
????red_lucky_count?=?0
????#?籃球預測的數(shù)目
????blue_lucky_count?=?0
????#?數(shù)據(jù)預處理
????red_nums_buy?=?nums_pre(red_nums_buy)
????blue_nums_buy?=?nums_pre(blue_nums_buy)
????#?判斷紅球
????for?red_result_item?in?red_nums_result:
????????for?red_buy_item?in?red_nums_buy:
????????????if?red_result_item?==?red_buy_item:
????????????????red_lucky_count?+=?1
????#?判斷藍球
????for?blue_result_item?in?blue_nums_result:
????????for?blue_buy_item?in?blue_nums_buy:
????????????if?blue_result_item?==?blue_buy_item:
????????????????blue_lucky_count?+=?1
????#?大樂透中獎規(guī)則
????if?red_lucky_count?==?5?and?blue_lucky_count?==?2:
????????luck_level?=?1??#?一等獎(5+2)
????elif?red_lucky_count?==?5?and?blue_lucky_count?==?1:
????????luck_level?=?2??#?二等獎(5+1)
????elif?red_lucky_count?==?5?and?blue_lucky_count?==?0:
????????luck_level?=?3??#?三等獎(5+0)
????elif?red_lucky_count?==?4?and?blue_lucky_count?==?2:
????????luck_level?=?4??#?四等獎(4+2)
????elif?red_lucky_count?==?4?and?blue_lucky_count?==?1:
????????luck_level?=?5??#?五等獎(4+1)
????elif?red_lucky_count?==?3?and?blue_lucky_count?==?2:
????????luck_level?=?6??#?六等獎(3+2)
????elif?red_lucky_count?==?4?and?blue_lucky_count?==?0:
????????luck_level?=?7??#?七等獎(4+0)
????elif?red_lucky_count?==?3?and?blue_lucky_count?==?1:
????????luck_level?=?8??#?八等獎(3+1)
????elif?red_lucky_count?==?2?and?blue_lucky_count?==?2:
????????luck_level?=?8??#?八等獎(2+2)
????elif?red_lucky_count?==?3?and?blue_lucky_count?==?0:
????????luck_level?=?9??#?九等獎(3+0)
????elif?red_lucky_count?==?2?and?blue_lucky_count?==?1:
????????luck_level?=?9??#?九等獎(2+1)
????elif?red_lucky_count?==?1?and?blue_lucky_count?==?2:
????????luck_level?=?9??#?九等獎(1+2)
????elif?red_lucky_count?==?0?and?blue_lucky_count?==?2:
????????luck_level?=?9??#?九等獎(0+2)
????else:
????????luck_level?=?-1
????return?get_lucky_desc(luck_level),luck_level# 5. 總結(jié)一下
通過上面的幾個步驟,我們實現(xiàn)了選號、爬取中獎號碼、判斷是否中獎等功能
關于如何將選擇的號碼發(fā)送給站點老板,大家可以通過企業(yè)微信、UI 自動化、PC Hook 等方式來完成
我已將文中所有源碼上傳到下方公眾號后臺,關注公眾號后回復關鍵字「 dlt?」即可以獲取
如果你覺得文章還不錯,請大家?點贊、分享、留言?下,因為這將是我持續(xù)輸出更多優(yōu)質(zhì)文章的最強動力!

