1. 程式人生 > >爬蟲學習記錄——測試彩票倍投法

爬蟲學習記錄——測試彩票倍投法

之前上大學時候無聊接觸過一段時間網路彩票,期間有贏有輸,曾經從1000塊贏到將近兩萬,但是後來全還給了莊家,還倒虧了幾百塊。沒玩彩票之前對於彩票預測這種東西嗤之以鼻,感覺完完全全是對大數定理的錯誤應用。但是接觸之後慢慢開始相信各種玄學預測,網上有各種網站、軟體、群進行預測的,都曾經參考過。但是,畢竟贏錢是過程,輸錢才是結果。後來期末考試比較忙就沒有再玩了,畢竟只是當做遊戲消遣在玩。之前上大學時候無聊接觸過一段時間網路彩票,期間有贏有輸,曾經從1000塊贏到將近兩萬,但是後來全還給了莊家,還倒虧了幾百塊。沒玩彩票之前對於彩票預測這種東西嗤之以鼻,感覺完完全全是對大數定理的錯誤應用。但是接觸之後慢慢開始相信各種玄學預測,網上有各種網站、軟體、群進行預測的,都曾經參考過。但是,畢竟贏錢是過程,輸錢才是結果。後來期末考試比較忙就沒有再玩了,畢竟只是當做遊戲消遣在玩。

最近學習爬蟲,爬了一些網站,貼吧、新聞什麼的,雖然成功爬到了一些資料,但是感覺這些資料對於我個人來說並沒有什麼實際的作用,所以突發奇想驗證一下當年聽說的一種投注方法——”倍投法。倍投法是彩票中有一種很經典的投注方法,簡單來說就是這次輸了,下次雙倍投注,再輸再加倍,只要贏一把就可以回本另外盈利第一把的投注金額。舉個例子:第一把押10塊,輸了,第二把押20塊,再輸,第三把押40塊,再輸……這樣假如押160塊時候盈利,此時一個支出10+20+40+80+160=310塊,收入160*2=320塊,盈利320-310=10(實際賠了並不是2,一般是1.9左右,實際盈利小於10)。 

我這裡測試了一種簡單的買法,龍虎買法,如果這期結果大於上期,就是龍,小於則為虎,相同則為和,例如上期開15978,這期開68479,則開獎結果是“虎,虎,龍,和,龍”。根據這期的龍虎結果,對應位置開龍買龍,開虎買虎,開和則不買,等出龍或者虎。測試中每個數字基礎買100,在此次基礎上翻倍,當翻倍到3200時止損,不買3200,重新從基礎的100開始買。賠率採用1.9。

程式碼如下:

import requests
from bs4 import BeautifulSoup
import time


days = []
for i in range(1,31):
    if i<10:
        day = '0'+str(i)
    else:
        day = str(i)
    days.append(day)

haoma_all = []
#獲取一天的所有開獎號碼
def get_haoma(url):
    req = requests.get(url)
    req.encoding = 'GBK'
soup = BeautifulSoup(req.text,'lxml'
) for number in soup.find_all('td', class_='red big'): haoma = []
        num = int(number.text)
        wan = int(num/10000)
        qian = int((num-wan*10000)/1000)
        bai = int((num-wan*10000-qian*1000)/100)
        shi = int((num-wan*10000-qian*1000-bai*100)/10)
        ge = int(num-wan*10000-qian*1000-bai*100-shi*10)
        haoma = [wan,qian,bai,shi,ge]
        haoma_all.append(haoma)
    return haoma_all

#判斷所有開獎結果的龍虎情況 從第二期開始
def get_longhu(haoma_all):
    try:
        longhu_list = []
        temp = haoma_all[0]
        for haoma in haoma_all[1:]:
            # 1 = 龍 , 0 = 虎 ,-1 = he
longhu = ['', '', '', '', '']
            for num in range(0,5):
                #萬位龍虎
if temp[num]>haoma[num]:    #如果上期結果大,開龍
longhu[num] =''
elif temp[num]==haoma[num]:  #兩期結果相同,開和
longhu[num] = ''
else:
                    longhu[num] = ''  #上期結果小,開虎
longhu_list.append(longhu)
            temp = haoma
    except IndexError as e :
        print(e)
    return longhu_list

#計算出每期各個位置上的輸贏 從第三期開始
def get_jieguo(longhu_list):
    temp = longhu_list[0]
    flag_list = []
    for i in longhu_list[1:]:
        flag_one = []
        for num in range(0,5):
            if temp[num] == '':  #如果
flag = ''
elif temp[num] == i[num]:
                flag = ''
else:
                flag = ''
flag_one.append(flag)
        flag_list.append(flag_one)
        temp = i
    return flag_list

#計算盈利虧損
def yingli(flag_list,sum):
    wan = 100
qian = 100
bai = 100
shi = 100
ge = 100
sum0 = sum
    for i in flag_list:
        #wan
if i[0] == '':
            sum = sum + wan * 0.9
wan = 100
elif i[0] == '':
            sum = sum - wan
            wan = wan * 2
if wan >= 3200:
                wan = 100
if sum <= 0:
            break
# elif sum >= sum0*1.2:
        #     break
        #qian
if i[1] == '':
            sum = sum + qian * 0.9
qian = 100
elif i[1] == '':
            sum = sum - wan
            qian = qian * 2
if qian >= 3200:
                qian = 100
if sum <= 0:
            break
# elif sum >= sum0*1.2:
        #     break
        #bai
if i[2] == '':
            sum = sum + bai * 0.9
bai = 100
elif i[2] == '':
            sum = sum - bai
            bai = bai * 2
if bai >= 3200:
                bai = 100
if sum <= 0:
            break
# elif sum >= sum0*1.2:
        #     break
        #shi
if i[3] == '':
            sum = sum + shi * 0.9
shi = 100
elif i[3] == '':
            sum = sum - shi
            shi = shi * 2
if shi >= 3200:
                shi = 100
if sum <= 0:
            break
# elif sum >= sum0*1.2:
        #     break
        #ge
if i[4] == '':
            sum = sum + ge * 0.9
ge = 100
elif i[4] == '':
            sum = sum - ge
            ge = ge * 2
if ge >= 3200:
                ge = 100
if sum <= 0:
            break
# elif sum >= sum0 * 1.2:
        #     break
return sum-sum0


if __name__ == '__main__':
    sum_all = 0
for d in days:
        sum = 10000
url_1 = 'http://chart.cp.360.cn/kaijiang/kaijiang?lotId=255401&spanType=2&span='
url_2 =('2017-11-%s_' %d)
        url_3 = ('2017-11-%s' %d)
        url = url_1+url_2+url_3
        haoma_all = get_haoma(url)
        print('獲取號碼成功',len(haoma_all))
        longhu_list = get_longhu(haoma_all)
        print('計算龍虎結果成功',len(longhu_list))
        flag_list = get_jieguo(longhu_list)
        print('獲得勝負結果成功',len(flag_list))
        sum = yingli(flag_list,sum)
        print('日期是11月:',d,'')
        print('盈利or虧損:',sum)
        sum_all += sum
        haoma_all = []
        longhu_list = []
        flag_list = []

    print('最終金額',sum_all)

測試結果如下:

每日本金/月份 11月 12月 11月不止損 12月不止損 11月不止損1.2倍收 12月不止損1.2倍收
10000 -311950 -328360 -456550 -378960 -333270 -364150
100000 -2834890 -2842080 -1263420 -3687330 -2170460 -3346720
1000000 -3065510 -2989050 2995940 -10447720 10482470 -8674270
 結果不出所料——虧錢,賭博埋葬過去,奮鬥成就未來,一起戒賭吧

這次爬取的網站並沒有什麼反爬策略,就連最簡單的瀏覽器驗證也沒有,整體實現並沒有遇到什麼特別的問題,唯一有一個小問題就是每天的開獎結果的網址格式url最後是“日期_日期”,原來迭代的時候習慣用陣列(list) format來實現,在這裡不好用,所以採用了分成三個字串,對後兩個字串進行格式化來實現。