如何用 Python 買彩票
作者:hhh_Moon_hhh
https://blog.csdn.net/m0_54218263/article/details/116001249
一、需求介紹


二、以極速飛艇為例進(jìn)行數(shù)據(jù)分析

②、請求頭

然后我們在程序中進(jìn)行代碼書寫獲取數(shù)據(jù):


然后進(jìn)行一定的預(yù)處理:

def reverse_list(lst):"""準(zhǔn)換列表的先后順序:param lst: 原始列表:return: 新的列表"""return [ele for ele in reversed(lst)]low_list = ["01", "02", "03", "04", "05"]# 設(shè)置比較小的數(shù)字的列表high_list = ["06", "07", "08", "09", "10"]# 設(shè)置比較大的數(shù)字的列表N = 0# 設(shè)置一個(gè)數(shù)字N來記錄一共有多少期可以購買n = 0# 設(shè)置一個(gè)數(shù)字n來記錄命中了多少期彩票record_number = 1# 設(shè)置記錄數(shù)據(jù)的一個(gè)判斷值list_data_number = []# 設(shè)置一個(gè)空的列表來存儲一天之中的連續(xù)掛掉的期數(shù)dict_time_record = {}# 設(shè)置一個(gè)空的字典來存儲連掛掉的期數(shù)滿足所列條件的時(shí)間節(jié)點(diǎn)for k in range(1152):# 循環(huán)遍歷所有的數(shù)據(jù)點(diǎn)if k < 1150:new_result1 = reverse_list(new_response["result"]["data"])[k]# 第一期數(shù)據(jù)new_result2 = reverse_list(new_response["result"]["data"])[k + 1]# 第二期數(shù)據(jù)new_result3 = reverse_list(new_response["result"]["data"])[k + 2]# 第三期數(shù)據(jù)data1 = new_result1['preDrawCode'].split(',')# 第一期數(shù)據(jù)data2 = new_result2['preDrawCode'].split(',')# 第二期數(shù)據(jù)data3 = new_result3['preDrawCode'].split(',')# 第三期數(shù)據(jù)for m in range(10):# 通過循環(huán)來判斷是否滿足購買的條件,并且實(shí)現(xiàn)一定的功能if m == 0:if data2[0] == data1[1]:# 如果相等就要結(jié)束循環(huán)N += 1# 可以購買的期數(shù)應(yīng)該要自加一if (data2[0] in low_list and data3[0] in low_list) or (data2[0] in high_list and data3[0] in high_list):n += 1# 命中的期數(shù)應(yīng)該要自加一# 如果命中了的話,本輪結(jié)束,開啟下一輪list_data_number.append(record_number)if f"{record_number}" in dict_time_record.keys():# 如果已經(jīng)有了這個(gè)鍵,那么值添加時(shí)間點(diǎn)dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])else:# 如果沒有這個(gè)鍵,那么添加一個(gè)鍵值對,值為一個(gè)列表,而且初始化為當(dāng)前的時(shí)間dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]record_number = 1# 初始化下一輪的開始else:record_number += 1# 如果沒有命中的話,次數(shù)就應(yīng)該要自加一break# 如果滿足相等的條件就要結(jié)束循環(huán)elif m == 9:# 與上面差不多的算法if data2[9] == data1[8]:# 如果相等N += 1if (data2[9] in low_list and data3[9] in low_list) or (data2[9] in high_list and data3[9] in high_list):n += 1list_data_number.append(record_number)if f"{record_number}" in dict_time_record.keys():dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])else:dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]record_number = 1else:record_number += 1breakelse:# 與上面差不多的算法if data2[m] == data1[m + 1] or data2[m] == data1[m - 1]:# 如果相等N += 1if (data2[m] in low_list and data3[m] in low_list) or (data2[m] in high_list and data3[m] in high_list):n += 1list_data_number.append(record_number)if f"{record_number}" in dict_time_record.keys():dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])else:dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]record_number = 1else:record_number += 1breakprint(f"日期:{new_response['result']['data'][0]['preDrawTime'][:10]},總的梯子數(shù)為{N}個(gè),一共有{n}次命中,一共有{N - n}次掛了")# 打印時(shí)間,以及,可以購買的期數(shù),命中的期數(shù),沒有命中的期數(shù)list_data_number.sort()# 按照大小順序來進(jìn)行排序dict_record = {}# 設(shè)置空字典進(jìn)行記錄for i in list_data_number:if f"{i}" in dict_record.keys(): # 判斷是否已經(jīng)有了這個(gè)數(shù)字?dict_record[f"{i}"] += 1# 如果有的話,那么就會自加一else: # 如果沒有的話,那么就會創(chuàng)建并且賦值等于 1dict_record[f"{i}"] = 1# 創(chuàng)建一個(gè)新的字典元素,然后進(jìn)行賦值為 1for j in dict_record.keys():if (int(j) >= 6) and (int(j) < 15):# 實(shí)際的結(jié)果表明,我們需要的是大于等于6期的數(shù)據(jù),而沒有出現(xiàn)大于15的數(shù)據(jù),因此有這樣的一個(gè)關(guān)系式print(f"買{j}次才中獎(jiǎng)的次數(shù)為{dict_record[j]}")# 打印相關(guān)信息print(dict_time_record[j])str0 = ""for letter in dict_time_record[j]:str0 += letterstr0 += ", "print(str0)# 打印相關(guān)信息
運(yùn)行結(jié)果的展示如下圖所示:

data_list = []for h in range(31):data_list.append(f'1-{h + 1}')for h in range(28):data_list.append(f'2-{h + 1}')for h in range(31):data_list.append(f'3-{h + 1}')for h in range(20):data_list.append(f'4-{h + 1}')
三、完整的代碼展示
import requestsimport chardetimport jsonimport xlwt # excel 表格數(shù)據(jù)處理的對應(yīng)模塊def reverse_list(lst):"""準(zhǔn)換列表的先后順序:param lst: 原始列表:return: 新的列表"""return [ele for ele in reversed(lst)]data_list = []for h in range(31):data_list.append(f'1-{h + 1}')for h in range(28):data_list.append(f'2-{h + 1}')for h in range(31):data_list.append(f'3-{h + 1}')for h in range(20):data_list.append(f'4-{h + 1}')wb = xlwt.Workbook() # 創(chuàng)建 excel 表格sh = wb.add_sheet('彩票分析數(shù)據(jù)處理') # 創(chuàng)建一個(gè) 表單sh.write(0, 0, "日期")sh.write(0, 1, "梯子數(shù)目")sh.write(0, 2, "命中數(shù)目")sh.write(0, 3, "掛的數(shù)目")sh.write(0, 4, "6次中的數(shù)目")sh.write(0, 5, "6次中的時(shí)間")sh.write(0, 6, "7次中的數(shù)目")sh.write(0, 7, "7次中的時(shí)間")sh.write(0, 8, "8次中的數(shù)目")sh.write(0, 9, "8次中的時(shí)間")sh.write(0, 10, "9次中的數(shù)目")sh.write(0, 11, "9次中的時(shí)間")sh.write(0, 12, "10次中的數(shù)目")sh.write(0, 13, "10次中的時(shí)間")sh.write(0, 14, "11次中的數(shù)目")sh.write(0, 15, "11次中的時(shí)間")sh.write(0, 16, "12次中的數(shù)目")sh.write(0, 17, "12次中的時(shí)間")sh.write(0, 18, "13次中的數(shù)目")sh.write(0, 19, "13次中的時(shí)間")sh.write(0, 20, "14次中的數(shù)目")sh.write(0, 21, "14次中的時(shí)間")# wb.save('test4.xls')sheet_seek_position = 1# 設(shè)置表格的初始位置為 1for data in data_list:low_list = ["01", "02", "03", "04", "05"]high_list = ["06", "07", "08", "09", "10"]N = 0n = 0url = f'https://api.api68.com/pks/getPksHistoryList.do?date=2021-{data}&lotCode=10037'headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ''AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/90.0.4430.72 Safari/537.36'}response = requests.get(url=url, headers=headers)response.encoding = chardet.detect(response.content)['encoding']new_response = json.loads(response.text)sh.write(sheet_seek_position, 0, new_response['result']['data'][0]['preDrawTime'][:10])# 在表格的第一個(gè)位置處寫入時(shí)間,意即:datarecord_number = 1 # 記錄數(shù)據(jù)的一個(gè)判斷值,設(shè)置為第一次,應(yīng)該是要放在最外面的啦list_data_number = []# 設(shè)置一個(gè)空列表來存儲一天之中的連續(xù)掛的期數(shù)dict_time_record = {}for k in range(1152):# record_number = 1,應(yīng)該要放外面# 記錄數(shù)據(jù)的一個(gè)判斷值,設(shè)置為第一次if k < 1150:new_result1 = reverse_list(new_response["result"]["data"])[k]new_result2 = reverse_list(new_response["result"]["data"])[k + 1]new_result3 = reverse_list(new_response["result"]["data"])[k + 2]data1 = new_result1['preDrawCode'].split(',')data2 = new_result2['preDrawCode'].split(',')data3 = new_result3['preDrawCode'].split(',')for m in range(10):if m == 0:if data2[0] == data1[1]:N += 1if (data2[0] in low_list and data3[0] in high_list) or (data2[0] in high_list and data3[0] in low_list):n += 1# 如果命中了的話,本輪結(jié)束,開啟下一輪list_data_number.append(record_number)if f"{record_number}" in dict_time_record.keys():dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])else:dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]# print(record_number)record_number = 1 # 初始化else:record_number += 1 # 沒中,次數(shù)加一# 自加一breakelif m == 9:if data2[9] == data1[8]:N += 1if (data2[9] in low_list and data3[9] in high_list) or (data2[9] in high_list and data3[9] in low_list):n += 1list_data_number.append(record_number)if f"{record_number}" in dict_time_record.keys():dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])else:dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]# print(record_number)record_number = 1else:record_number += 1breakelse:if data2[m] == data1[m + 1] or data2[m] == data1[m - 1]:N += 1if (data2[m] in low_list and data3[m] in high_list) or (data2[m] in high_list and data3[m] in low_list):n += 1list_data_number.append(record_number)if f"{record_number}" in dict_time_record.keys():dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])else:dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]# print(record_number)record_number = 1else:record_number += 1breakprint(f"日期:{new_response['result']['data'][0]['preDrawTime'][:10]},總的梯子數(shù)為{N}個(gè),一共有{n}次命中,一共有{N - n}次掛了")sh.write(sheet_seek_position, 1, N)sh.write(sheet_seek_position, 2, n)sh.write(sheet_seek_position, 3, N - n)# new_list_data_number = list_data_number.sort()list_data_number.sort()# 進(jìn)行排序dict_record = {}# 設(shè)置空字典for i in list_data_number:if f"{i}" in dict_record.keys(): # 判斷是否已經(jīng)有了這個(gè)數(shù)字?dict_record[f"{i}"] += 1# 如果有的話,那么就會自加一else: # 如果沒有的話,那么就會創(chuàng)建并且賦值等于 1dict_record[f"{i}"] = 1# 創(chuàng)建一個(gè)新的字典元素,然后進(jìn)行賦值為 1# print(dict_record)# print(f"買彩票第幾次才中獎(jiǎng)?")# print(f"按照我們的規(guī)律買彩票的情況:")for j in dict_record.keys():if (int(j) >= 6) and (int(j) < 15):print(f"買{j}次才中獎(jiǎng)的次數(shù)為{dict_record[j]}")print(dict_time_record[j])str0 = ""for letter in dict_time_record[j]:str0 += letterstr0 += ", "print(str0)sh.write(sheet_seek_position, 4 + (int(j) - 6) * 2, dict_record[j])# 寫入幾次sh.write(sheet_seek_position, 4 + (int(j) - 6) * 2 + 1, str0[:-2])# 注意這里應(yīng)該要改為 -2# 寫入幾次對應(yīng)的時(shí)間# print(j)sheet_seek_position += 1# 每次寫完了以后,要對位置進(jìn)行換行,換到下一行,從而方便下一行的寫入# 保存wb.save('極速飛艇彩票分析結(jié)果.xls')
運(yùn)行結(jié)果展示:
展示1、

展示2、

for m in range(10):if m == 0:if data2[0] == data1[1]:N += 1if (data2[0] in low_list and data3[0] in low_list) or (data2[0] in high_list and data3[0] in high_list):n += 1# 如果命中了的話,本輪結(jié)束,開啟下一輪list_data_number.append(record_number)if f"{record_number}" in dict_time_record.keys():dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])else:dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]# print(record_number)record_number = 1 # 初始化else:record_number += 1 # 沒中,次數(shù)加一# 自加一breakelif m == 9:if data2[9] == data1[8]:N += 1if (data2[9] in low_list and data3[9] in low_list) or (data2[9] in high_list and data3[9] in high_list):n += 1list_data_number.append(record_number)if f"{record_number}" in dict_time_record.keys():dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])else:dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]# print(record_number)record_number = 1else:record_number += 1breakelse:if data2[m] == data1[m + 1] or data2[m] == data1[m - 1]:N += 1if (data2[m] in low_list and data3[m] in low_list) or (data2[m] in high_list and data3[m] in high_list):n += 1list_data_number.append(record_number)if f"{record_number}" in dict_time_record.keys():dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])else:dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]# print(record_number)record_number = 1else:record_number += 1break
總結(jié)
最后,如果本文對你有幫助的話,請?jiān)诹粞詤^(qū)給個(gè)三連哦!
推薦閱讀:
入門: 最全的零基礎(chǔ)學(xué)Python的問題 | 零基礎(chǔ)學(xué)了8個(gè)月的Python | 實(shí)戰(zhàn)項(xiàng)目 |學(xué)Python就是這條捷徑
干貨:爬取豆瓣短評,電影《后來的我們》 | 38年NBA最佳球員分析 | 從萬眾期待到口碑撲街!唐探3令人失望 | 笑看新倚天屠龍記 | 燈謎答題王 |用Python做個(gè)海量小姐姐素描圖 |
趣味:彈球游戲 | 九宮格 | 漂亮的花 | 兩百行Python《天天酷跑》游戲!
AI: 會做詩的機(jī)器人 | 給圖片上色 | 預(yù)測收入 | 碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影
自動(dòng)化辦公: PDF提取圖片和表格 | html一鍵保存pdf | Pdf轉(zhuǎn)Word輕松搞定表格和水印! | Pdf轉(zhuǎn)Word
年度爆款文案
2).學(xué)Python真香!我用100行代碼做了個(gè)網(wǎng)站,幫人PS旅行圖片,賺個(gè)雞腿吃
9).發(fā)現(xiàn)一個(gè)舔狗福利!這個(gè)Python爬蟲神器太爽了,自動(dòng)下載妹子圖片
點(diǎn)閱讀原文,領(lǐng)廖雪峰視頻資料!


