Python爬取雙色球,媽媽再也不會擔心我不會中獎了

〆 小源。發表於2019-03-18

一、概況

一般大家都能會有個財富自由、時間自由的夢想。除了我們勤奮努力外,有些人運氣比較好,買了一注彩票,瞬間會走上人生巔峰。彩票確實讓有些人實現了這個夢想,但是這個概率太低了,低到無法想象。所以我們還是努力奮鬥,做一個追夢人吧!

我們今天就爬取有史以來所有的雙色球資料,看看這些年哪些數字出現的次數比較高。有的小夥伴可能不知道雙色球是什麼?雙色球顧名思義就是兩種顏色的球,一個紅色,一個藍色。紅球從1-33中取出6個,籃球從1-16取出1個,如果你買的跟開獎號碼一樣,恭喜你幾百萬到手。

Python爬取雙色球,媽媽再也不會擔心我不會中獎了

二、分析網站

我們今天準備爬取的網站叫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開獎。
只要還買得起一注雙色球,人生就不至於絕望。最後祝願大家早日實現財富自由,走上人生巔峰。

歡迎關注我的公眾號,我們一起學習。

歡迎關注

相關文章