一、概況
一般大家都能會有個財富自由、時間自由的夢想。除了我們勤奮努力外,有些人運氣比較好,買了一注彩票,瞬間會走上人生巔峰。彩票確實讓有些人實現了這個夢想,但是這個概率太低了,低到無法想象。所以我們還是努力奮鬥,做一個追夢人吧!
我們今天就爬取有史以來所有的雙色球資料,看看這些年哪些數字出現的次數比較高。有的小夥伴可能不知道雙色球是什麼?雙色球顧名思義就是兩種顏色的球,一個紅色,一個藍色。紅球從1-33中取出6個,籃球從1-16取出1個,如果你買的跟開獎號碼一樣,恭喜你幾百萬到手。
二、分析網站
我們今天準備爬取的網站叫500彩票(www.500.com/) 這個網站有很多彩票的開獎資訊,我們找到全國開獎這個導航(kaijiang.500.com/)
在這我們可以查詢任何的彩票開獎資訊: 我們選擇雙色球,並開啟瀏覽器除錯: 可以看出來是一個ajax(kaijiang.500.com/static/info… 請求,並且返回很多的xml資訊。資訊裡面包括了有史以來所有雙色球的開獎號碼資訊。資料有了,我們完全可以用正規表示式把我們想要的資料提取出來,然後儲存到資料庫。三、邏輯實現
我們在本地先建立好資料庫,我們要的資訊只有三個:
- 紅球
- 籃球
- 日期 程式碼比較簡單:
import requests
import re
import pymysql
# 請求地址
url = 'http://kaijiang.500.com/static/info/kaijiang/xml/ssq/list.xml?_A=BLWXUIYA1546584359929'
# 資料庫連線
connection = pymysql.connect(host='localhost',
user='root',
password='123456',
db='db_shuangseqiu', )
# 獲取遊標物件
cursor = connection.cursor()
# 請求頭
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'
}
# 發起請求
reponse = requests.get(url=url, headers=headers)
# 正則規則
pattern = re.compile(r'<row.*?opencode="(.*?)".*?opentime="(.*?)"')
# 雙色球資料
ssq_data = pattern.findall(reponse.text)
# ('10,11,12,13,26,28|11', '2003-02-23 00:00:00')
for data in ssq_data:#處理資料
info, date = data
red, blue = info.split("|")
#插入資料
sql = """
INSERT INTO ssq_info(red,blue,date)values (%s,%s,%s)
"""
try:
cursor.execute(sql, [red, blue, date])
connection.commit()
except Exception as e:
connection.rollback()
複製程式碼
從2003年第一個雙色球開始,我們本地一共有2389條開獎資料。
四、統計
我們來統計一下這些年紅球1-33出現的次數和籃球1-16出現的次數,通過matplotlib
繪製成柱形統計圖。在繪製前,我們得先從資料庫中把紅球和籃球出現的次數統計出來。
import pymysql
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import numpy as np
# 資料庫連線
connection = pymysql.connect(host='localhost',
user='root',
password='123456',
db='db_shuangseqiu', )
# 獲取遊標物件
cursor = connection.cursor()
reds_count = [] #1-33紅球所有個數
blues_count = [] #1-16籃球所有個數
def getdata():
sql = 'select * from ssq_info'
cursor.execute(sql)
results = cursor.fetchall()#獲取全部資料
blues = []#所有紅球個數
reds = []#所有籃球個數
for row in results :
red = row[1]
blue = row[2]
red_list = red.split(",")#把查詢的紅球進行以,分割 ["01","02","03","04","05","06"]
reds.extend(red_list)
blues.append(blue)
global reds_count,blues_count
#統計所有出現紅球的個數
for i in range(1,34):
reds_count.append(reds.count(str(i).zfill(2)))
# 統計所有出現籃球的個數
for i in range(1,17):
blues_count.append(blues.count(str(i).zfill(2)))
# redstatistics()
# bluestatistics()
#新增標籤
def autolabel(rects):
for rect in rects:
height = rect.get_height()
plt.text(rect.get_x()-rect.get_width()/4, 1.02*height, "%s" % int(height))
#紅球統計圖
def redstatistics():
width=0.35
index = np.arange(1, 34)
y = reds_count
y1 = np.array(y)
x1 = index + 1
fig = plt.figure()
ax1 = fig.add_subplot(111)
rect = ax1.bar(x1, y1, width, facecolor='#9999ff', edgecolor='white')
x = [str(i) for i in range(1,34)]
plt.xticks(index+1+width/20, x)
plt.ylim(0, 500)
autolabel(rect)
ax1.xaxis.set_ticks_position('bottom')
l1 = ax1.legend(loc=(.02,.92), fontsize=16)
plt.show()
# 籃球統計圖
def bluestatistics():
width = 0.35
index = np.arange(1, 17)
y = blues_count
y1 = np.array(y)
x1 = index + 1
fig = plt.figure()
ax1 = fig.add_subplot(111)
rect = ax1.bar(x1, y1, width, facecolor='#9999ff', edgecolor='white')
x = [str(i) for i in range(1, 17)]
plt.xticks(index + 1 + width / 20, x)
plt.ylim(0, 500)
autolabel(rect)
ax1.xaxis.set_ticks_position('bottom')
l1 = ax1.legend(loc=(.02, .92), fontsize=16)
plt.show()
if __name__ == '__main__':
getdata()
複製程式碼
最後我們統計紅球的柱形圖統計圖:
能看出來紅球除了24和33,其餘出現都超過了400次,出現次數還是比較平均的。 籃球就8出現的次數比較少一點,也看不出來什麼門道。五、總結
通過統計圖也看不出來什麼,雙色球根本就是毫無規律可言。能學到的知識是爬蟲和製圖。所以基本靠雙色球實現財富自由很難,但運氣這種東西誰又說的好呢,所以我給大家精選了一注:
雙色球:06,09,12,24,29,31+12,週二晚上21:15開獎。
只要還買得起一注雙色球,人生就不至於絕望。最後祝願大家早日實現財富自由,走上人生巔峰。
歡迎關注我的公眾號,我們一起學習。