爬蟲學習記錄——測試彩票倍投法
之前上大學時候無聊接觸過一段時間網路彩票,期間有贏有輸,曾經從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來實現,在這裡不好用,所以採用了分成三個字串,對後兩個字串進行格式化來實現。