Repository: wzhe06/soccerbet Branch: master Commit: 6f2585cba23e Files: 7 Total size: 21.7 KB Directory structure: gitextract_ja1wahn6/ ├── README.md ├── companyrank.rtf ├── findcompany.py ├── lottery.py ├── main.py ├── portfoliomodel.py └── spider.py ================================================ FILE CONTENTS ================================================ ================================================ FILE: README.md ================================================ # SoccerBet 一个研究足球彩票购买策略的小项目 ## 数据源 各博彩公司的赔率数据来自于500.com,在运行程序后,从500.com实时抓取近期比赛数据,以及各比赛的赔率数据。由于500.com对于国外博彩公司的数据有延迟,所以在实际购买时还应该参照国外博彩公司官方网站公布的实时赔率。 ## 博彩策略 该项目采取的博彩策略是利用不同博彩公司的赔率差,通过建立一个购买彩票的portfolio,获得盈利的彩票组合。 ## 程序入口 请使用python执行项目中的main.py 即在安装好python环境,确保接入互联网,执行 python main.py ## 程序输出 程序输出,程序会输出每场比赛的比赛信息,盈利百分比,以及应购买的彩票组合。 例子如下: 642471 //比赛代号 http://odds.500.com/fenxi/ouzhi-642471.shtml //比赛信息页面 match name: 17亚冠杯分组赛 //比赛名称 match members: 西悉尼漫步者 VS 浦和红钻 //交战双方 match time: 比赛时间2017-02-21 16:00 //比赛时间 profit: 109.88 //按照下面的比例购买彩票,能够获得的收益109.88%,即盈利9.88% win: 168 Pinnbet 4.2 27 //从Pinnbet下注 27%的资金押胜 (其中168是公司id,Pinnbet是公司名称,4.2是赔率,27是押27%的资金) draw: 168 Pinnbet 3.5 32 //从Pinnbet下注 32%的资金押平 lose: 26 Leon 2.68 41 //从Leon下注 41%的资金押负 ================================================ FILE: companyrank.rtf ================================================ {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf370 {\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset134 STHeitiSC-Light;} {\colortbl;\red255\green255\blue255;} \margl1440\margr1440\vieww10800\viewh8400\viewkind0 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural \f0\fs24 \cf0 1 176 Kajotbet 75.0083333333\ 2 181 Islenskar Getraunir 80.1645945946\ 3 173 Iceland 80.1689189189\ 4 261 Sporttip 80.7978947368\ 5 270 Supermatch 82.9346428571\ 6 94 Betpeople 83.1669230769\ 7 174 Iddaa 83.377037037\ 8 177 Inteltek 83.4179310345\ 9 285 Tipp3 83.7673076923\ 10 200 Miseojeu 84.3452272727\ 11 232 PMU 84.5666666667\ 12 225 Parionsweb 85.3918367347\ 13 144 France-pari.fr 85.578\ 14 211 Norsk Tipping 85.9234545455\ 15 212 Norway 85.9803846154\ 16 204 Norsk tipting 86.0715217391\ 17 206 Netbet.fr 86.0929411765\ 18 213 Oddsen 86.1608108108\ 19 76 BetClic.fr 86.1987037037\ 20 79 BetClick.fr 86.2878846154\ 21 223 Pamestihima 86.6271153846\ 22 10 Oddset ( \f1 \'b0\'c2\'b5\'c2\'c8\'fc\'cc\'d8 \f0 ) 86.6733333333\ 23 237 SAjOO.fr 87.2183333333\ 24 32 Bwin.fr 87.2183333333\ 25 300 Unibet.fr 87.5094230769\ 26 236 SAjOO 87.6429268293\ 27 142 Evobet 87.7243478261\ 28 69 Betbright 87.7931666667\ 29 138 E-stave 87.8838961039\ 30 254 Sportna loterija 88.0257142857\ 31 245 Singapore pools 88.4616\ 32 297 Toto 88.86390625\ 33 259 Sporttery 89.0075\ 34 304 Veikkaus 89.0660416667\ 35 21 \f1 \'cf\'e3\'b8\'db\'c2\'ed\'bb\'e1 \f0 89.0822666667\ 36 73 BGT 89.196\ 37 5 Interwetten ( \f1 \'d3\'a2\'cc\'d8 \f0 ) 89.4026666667\ 38 3 Ladbrokes ( \f1 \'c1\'a2\'b2\'a9 \f0 ) 89.4048571429\ 39 44 \f1 \'b0\'c2\'b5\'d8\'c0\'fb\'b2\'a9\'b2\'ca \f0 89.4062162162\ 40 34 Interwetten.es 89.4236619718\ 41 147 Fivebet.it 89.5043859649\ 42 2 \f1 \'b0\'c4\'c3\'c5 \f0 89.5380519481\ 43 146 FiveBet 89.5895238095\ 44 58 Balkanbet.rs 89.6095774648\ 45 57 Balkan Bet 89.6211267606\ 46 220 Paddy Power.it 89.70671875\ 47 198 Milenium 89.8823214286\ 48 50 STS 90.0\ 49 60 Bet-at-home 90.0019736842\ 50 308 Vierklee 90.020754717\ 51 239 Sazkashop 90.0225\ 52 235 Remi 90.0263829787\ 53 78 BetClick 90.0279220779\ 54 266 Startip 90.0597183099\ 55 319 Youwin 90.1377631579\ 56 282 TipKurz 90.147260274\ 57 258 Sportsbook.com 90.1534666667\ 58 177 Totolotek 90.1547727273\ 59 284 Tipos 90.1854545455\ 60 63 Bet2be 90.1981081081\ 61 269 SuperSport 90.2030882353\ 62 126 Chance 90.2294520548\ 63 45 \f1 \'ba\'cf\'b6\'d4 \f0 90.2320454545\ 64 271 Sweden 90.2474074074\ 65 313 Wettpunkt 90.2513207547\ 66 270 Svenska Spel 90.2589090909\ 67 157 Germania Sport 90.2650704225\ 68 272 Synot TIP 90.2736986301\ 69 283 TipKurz.sk 90.2896666667\ 70 68 BetBoo 90.3447826087\ 71 186 Kogler 90.375\ 72 15 Coral 90.4173239437\ 73 238 Sazka 90.417761194\ 74 88 Etoto 90.4397619048\ 75 250 Skybet 90.4737333333\ 76 176 Instant Action Sports 90.5145833333\ 77 39 \f1 \'b2\'a9\'cc\'ec\'cc\'c3 \f0 .vu 90.5253333333\ 78 278 TheBetArena 90.5407792208\ 79 167 Gwbet 90.5635526316\ 80 61 Betsafe 90.566\ 81 62 Betsafe.DK 90.566\ 82 241 Scandic Bookmakers 90.5687671233\ 83 18 SportingBet ( \f1 \'b2\'a9\'cc\'ec\'cc\'c3 \f0 ) 90.5687671233\ 84 127 Com-bet.com 90.5868292683\ 85 65 Betsson Sportsbook 90.6048\ 86 107 BetUS 90.6336956522\ 87 199 Millenniumbet 90.6347457627\ 88 177 Intertops 90.6447272727\ 89 87 BetInternet ( \f1 \'b7\'a2\'b4\'ef \f0 ) 90.6732467532\ 90 132 Danske Spil 90.6764615385\ 91 306 Victoriatip 90.6875\ 92 137 DoxxBet 90.7003947368\ 93 73 Betchance 90.7022222222\ 94 75 BetClic 90.7026229508\ 95 171 IACS 90.7033333333\ 96 8 Easybets ( \f1 \'d2\'d7\'ca\'a4\'b2\'a9 \f0 ) 90.7077027027\ 97 48 \f1 \'d2\'d7\'ca\'a4\'b2\'a9 \f0 88 90.7122666667\ 98 133 Denmark 90.7126984127\ 99 51 ABCmanager 90.715\ 100 88 BetISN( \f1 \'d6\'c7\'b2\'a9 \f0 ) 90.7222535211\ 101 56 As3388 90.7447945205\ 102 170 Hrvatska Lutrija 90.7705555556\ 103 182 Iziplay 90.7717241379\ 104 86 Betin 90.8024\ 105 113 Maxi-tip 90.8212\ 106 147 888Sport 90.84\ 107 233 Public Bet 90.8428571429\ 108 160 Sportplus 90.8456097561\ 109 149 Fortuna 90.8664864865\ 110 208 Nike 90.8895890411\ 111 52 Adabet 90.8982857143\ 112 144 Expekt 90.9088\ 113 77 BetClic.it 90.9097333333\ 114 158 Giocodigitale 90.9105172414\ 115 33 Bwin.it 90.9123728814\ 116 168 Hattrick 90.9193617021\ 117 217 Offsidebet 90.9233333333\ 118 93 Betoto.com 90.9424657534\ 119 145 Fantasticwin 90.9428378378\ 120 175 IFortuna.eu 90.9613846154\ 121 91 BetNGo 90.9648\ 122 286 Tipsport 90.9828571429\ 123 89 betitaly.it 90.9979166667\ 124 11 Bwin ( \f1 \'b1\'d8\'d3\'ae \f0 ) 91.0098648649\ 125 103 Betsson 91.0164788732\ 126 61 Bet-at-home.it 91.0304347826\ 127 31 Bwin.es 91.0425675676\ 128 169 Hititbet 91.045\ 129 226 Parisport 91.0509375\ 130 117 Boylesports 91.0544927536\ 131 295 Tote 91.0802666667\ 132 243 Seanie Mac 91.0803174603\ 133 228 Pianeta Scommesse 91.0807142857\ 134 178 IFortuna.sk 91.0845714286\ 135 213 Novibet 91.087027027\ 136 219 Paddy Power 91.0873684211\ 137 99 Bets4all.com 91.0992957746\ 138 108 Betway 91.1050666667\ 139 257 sportsbetting.com.au 91.115106383\ 140 84 Betfred ( \f1 \'b2\'a9\'b7\'a2 \f0 ) 91.1208108108\ 141 201 Mozzart 91.1891025641\ 142 261 SprotsTAB 91.2118181818\ 143 307 Victory 91.2187837838\ 144 273 Tabcorp 91.2218518519\ 145 24 Betcruise 91.2226666667\ 146 90 Betliner 91.2233333333\ 147 96 Betpro.it 91.2675925926\ 148 120 CashPoint 91.2698648649\ 149 296 Totesport 91.2779166667\ 150 22 Bovada 91.2940384615\ 151 111 Bluebet.it 91.2998148148\ 152 140 Europe-bet 91.3422368421\ 153 154 GameLux.it 91.3471698113\ 154 320 138sungame 91.3472413793\ 155 72 Bovada.lv 91.3480701754\ 156 70 Bodog.eu 91.3480701754\ 157 105 Betting2000 91.3572413793\ 158 321 18Bet 91.3605333333\ 159 190 LUXBET 91.362\ 160 227 PartyBets 91.3670666667\ 161 12 Gamebookers 91.3762337662\ 162 202 MyBet 91.3803947368\ 163 53 Admiral 91.3811764706\ 164 288 Tipsport.sk 91.3847916667\ 165 194 Match Point 91.3853623188\ 166 248 Sisal 91.4034782609\ 167 104 Better.it 91.4118181818\ 168 298 TotoSi 91.4205454545\ 169 224 PariMatch 91.4502985075\ 170 292 Topgoal 91.455\ 171 87 Egobet 91.4618055556\ 172 209 Nikebet 91.4753333333\ 173 305 Victoria-Tip 91.4766666667\ 174 260 SportYes.it 91.4781481481\ 175 312 Wetten.de 91.492\ 176 287 Tipsport.net 91.5002083333\ 177 196 MeridianBet 91.5048\ 178 135 Digibet 91.5052631579\ 179 216 Offside 91.508125\ 180 59 Ball2Win 91.5102816901\ 181 20 188Bet ( \f1 \'bd\'f0\'b1\'a6\'b2\'a9 \f0 ) 91.5136842105\ 182 197 Mobibet 91.5155555556\ 183 249 Skiller.it 91.5287719298\ 184 294 TopSportWetten 91.537826087\ 185 55 Apollobet 91.5682978723\ 186 264 StarPrice 91.5685714286\ 187 7 Singbet ( \f1 \'bb\'ca\'b9\'da \f0 ) 91.5721052632\ 188 160 Gmatic 91.5737142857\ 189 191 LUXBET.com 91.5791428571\ 190 246 Singlebet (SB) 91.5793506494\ 191 43 E \f1 \'c0\'d6\'b2\'a9 \f0 91.5884415584\ 192 314 Wewbet ( \f1 \'d3\'af\'ba\'cc \f0 ) 91.5994736842\ 193 54 Agile.it 91.6120833333\ 194 83 Betflag.it 91.612173913\ 195 302 Unitab 91.6520833333\ 196 210 Nordicbet 91.6536986301\ 197 30 \f1 \'b1\'d8\'b7\'a2 \f0 .it 91.6572093023\ 198 136 Domusbet.it 91.6664864865\ 199 299 Triobet 91.6686111111\ 200 28 Betsson Exchang 91.6791666667\ 201 130 Completesportsbetting 91.68\ 202 274 Tattsbet 91.7026530612\ 203 17 Unibet ( \f1 \'d3\'c5\'ca\'a4\'bf\'cd \f0 ) 91.7087012987\ 204 203 MyBet.com 91.7115942029\ 205 165 GSNetwork 91.7191304348\ 206 98 BetRedKings 91.7236842105\ 207 156 Gamenet.it 91.7352727273\ 208 263 Stanleybet 91.7392307692\ 209 22 Eurobet ( \f1 \'c5\'b7\'b2\'a9 \f0 ) 91.7404347826\ 210 265 Starpricebet 91.7450724638\ 211 109 BINGOAL 91.7556923077\ 212 112 BoDog ( \f1 \'b2\'a9\'b9\'b7 \f0 ) 91.7680821918\ 213 326 99Bet 91.7698214286\ 214 16 Sbobet ( \f1 \'c0\'fb\'bc\'c7 \f0 ) 91.772027027\ 215 221 PAF 91.7773684211\ 216 155 Gamenet 91.7834482759\ 217 153 Gamebookers.it 91.7971428571\ 218 189 Luckia.es 91.8038028169\ 219 19 Mansion88 ( \f1 \'c3\'f7\'c9\'fd \f0 ) 91.8113333333\ 220 80 CMD368.com 91.8131818182\ 221 188 Leon 91.8132258065\ 222 40 FUN88 ( \f1 \'c0\'d6\'cc\'ec\'cc\'c3 \f0 ) 91.8159210526\ 223 322 1Bet 91.8164\ 224 328 12BET ( \f1 \'d2\'bc\'d9\'45\'b2\'a9 \f0 ) 91.8172\ 225 41 \f1 \'c0\'d6\'cc\'ec\'cc\'c3 \f0 .au 91.8172\ 226 85 BetGun.com 91.8214035088\ 227 166 Guts 91.8323684211\ 228 42 IBCBET ( \f1 \'c9\'b3\'b0\'cd \f0 ) 91.8345333333\ 229 179 Isibet 91.8370454545\ 230 14 10BET 91.8622368421\ 231 222 PAF.es 91.8742028986\ 232 82 Betflag 91.8751851852\ 233 290 Toals 91.8973684211\ 234 67 Betaland 91.9126666667\ 235 327 88asia88 91.9245714286\ 236 123 Centrebet 91.9294666667\ 237 66 BetAdria 91.9372972973\ 238 47 \f1 \'c9\'ea\'b2\'a9 \f0 138 91.9502739726\ 239 280 Tipico 91.9668\ 240 205 NetBet 91.9692105263\ 241 251 Smart Live Sport 91.9868421053\ 242 63 Bet16 ( \f1 \'c8\'f0\'b7\'e1 \f0 ) 91.9938461538\ 243 316 Winner 91.997027027\ 244 289 Titanbet 91.9989189189\ 245 148 Flemington Sportsbet 92.0011111111\ 246 27 Smarkets 92.0014705882\ 247 184 Jetbull 92.0043421053\ 248 214 Noxwin 92.0043421053\ 249 101 Betsi 92.0109090909\ 250 207 NGG 92.0169767442\ 251 29 Eurobet.it 92.0221875\ 252 6 SNAI 92.0328070175\ 253 275 Teambet 92.0380821918\ 254 128 ComeOn 92.0419736842\ 255 141 Evebet ( \f1 \'d2\'f8\'ba\'d3 \f0 ) 92.0492063492\ 256 309 Vwin 92.04921875\ 257 301 Unibet.it 92.072962963\ 258 197 Mermaidbet 92.0788888889\ 259 326 888.it 92.08475\ 260 131 Contorabet 92.0873972603\ 261 113 Bookie Bob 92.0892537313\ 262 323 24hBET 92.1015068493\ 263 100 Betshop 92.103442623\ 264 143 Evona 92.1097777778\ 265 102 Betsonic 92.1186666667\ 266 268 SuperLenny 92.1402739726\ 267 38 \f1 \'b2\'a9\'cc\'ec\'cc\'c3 \f0 .au 92.153\ 268 121 CBM Bookmaker 92.2138157895\ 269 49 Intralot ( \f1 \'d2\'f2\'cc\'d8\'c0\'ad\'c2\'e5 \f0 ) 92.2449090909\ 270 122 CBMsport 92.2610294118\ 271 324 24hPoker 92.2640425532\ 272 178 Intralot.it 92.2772413793\ 273 303 VBet 92.3023684211\ 274 1 \f1 \'cd\'fe\'c1\'ae\'cf\'a3\'b6\'fb \f0 92.3031081081\ 275 231 Playbet 92.3166666667\ 276 95 BetPhoenix 92.3507407407\ 277 254 Sports-1 92.3507407407\ 278 65 Bet7days 92.36\ 279 129 Comeon! 92.3616666667\ 280 118 Carib Sports 92.3814285714\ 281 50 Intralot Italia 92.3869767442\ 282 62 Bet1128 92.3891891892\ 283 35 UEDBET (UED \f1 \'d1\'c7\'d6\'de \f0 ) 92.4116326531\ 284 92 BetOnline 92.4126190476\ 285 253 Sportgewin 92.4168656716\ 286 279 TheGreek.com 92.4470588235\ 287 281 Tipico.it 92.4567241379\ 288 37 \f1 \'cd\'fe\'c1\'ae\'cf\'a3\'b6\'fb \f0 .it 92.4696551724\ 289 291 TonyBet 92.4871641791\ 290 277 The Greek 92.505\ 291 130 Optibet 92.5158823529\ 292 106 BetuniQ 92.5205797101\ 293 97 Betrally 92.5501315789\ 294 81 Betfair SB 92.5531034483\ 295 36 \f1 \'cd\'fe\'c1\'ae\'cf\'a3\'b6\'fb \f0 .es 92.5735714286\ 296 286 Tomwaterhouse 92.5794117647\ 297 110 BizonBet 92.6001388889\ 298 172 IASbet.com 92.6034210526\ 299 255 Sportsbet 92.6080263158\ 300 64 Bet3000 92.6176315789\ 301 242 Schwechat 92.6252083333\ 302 150 Fubo ( \f1 \'b8\'bb\'b2\'a9 \f0 ) 92.6255813953\ 303 162 Gobetgo 92.6293846154\ 304 151 Fubo.com 92.6413953488\ 305 124 Centurionbet 92.6436170213\ 306 119 CaribSports 92.6871428571\ 307 256 Sportsbet.com.au 92.7521428571\ 308 315 Wilsonbet 92.7606666667\ 309 234 Rebels 92.7721276596\ 310 25 BETDAQ 92.7832\ 311 183 Jenningsbet 92.7913333333\ 312 229 Pinnbet 92.8056944444\ 313 311 Wettbuero 92.8318604651\ 314 318 YouWager 92.8771428571\ 315 163 GoldBet 92.8886666667\ 316 293 TopSport 92.9373469388\ 317 262 Stan James ( \f1 \'ca\'b7\'b5\'a4\'d5\'b2 \f0 ) 92.9626086957\ 318 164 Goldenpark 92.9626086957\ 319 139 Efbet 93.0287012987\ 320 125 Championsbet 93.1439189189\ 321 230 PlanetWin365 93.1921621622\ 322 159 GLB 93.195\ 323 218 Olimpkz 93.2336206897\ 324 74 Betcity 93.2505263158\ 325 4 Bet365 93.5053424658\ 326 215 OddsRing 93.5060810811\ 327 70 Betbutler 93.6438888889\ 328 185 JoinBet 93.6766666667\ 329 247 Sirbobet 93.6822972973\ 330 72 Betcenter.be 93.8234722222\ 331 276 Tempobet 93.9002272727\ 332 187 Leaderbet 93.9204615385\ 333 161 Goalbet 93.9716438356\ 334 267 Stoiximan 93.9993150685\ 335 305 Victor Chandler 94.2515789474\ 336 195 Mcbookie 94.3330555556\ 337 180 Kashmobet 94.3722222222\ 338 71 Betcenter 94.4366666667\ 339 244 Setantabet 94.4393333333\ 340 80 BetCRIS 94.488490566\ 341 317 Yabet 94.488490566\ 342 152 Gamblers Palace 94.4998076923\ 343 134 Diamond Sportsbook Int. 94.5313207547\ 344 9 BetVictor ( \f1 \'ce\'b0\'b5\'c2 \f0 ) 94.5641333333\ 345 115 Bookmaker.com 94.5903846154\ 346 114 Bookmaker.ag 94.7641176471\ 347 240 SBG Global 95.0\ 348 116 Bookmaker.eu 95.0641176471\ 349 310 WagerWeb 95.0894117647\ 350 23 \f1 \'b1\'d8\'b7\'a2 \f0 95.6610810811\ 351 192 Marathon 96.5362857143\ 352 13 PinnacleSports ( \f1 \'c6\'bd\'b2\'a9 \f0 ) 96.5728767123\ 353 193 Marathonbet 96.5860273973\ 354 46 \f1 \'c6\'bd\'b2\'a9 \f0 96.6658064516\ 355 252 SportBet 97.0444230769\ 356 325 5Dimes 97.0444230769\ 357 180 Island Casino 97.0444230769\ 358 26 Matchbook 98.9114285714} ================================================ FILE: findcompany.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- """ find best return rate company """ __author__ = 'ggstar' import spider import time import lottery match_all_ids = [] for day in range(13, 20, 1): match_ids = spider.crawl_match_list_by_date("2014-07-" + str(day)) match_all_ids += match_ids item_list = [] seq = 0 company_map = {} for match_id in match_all_ids: seq += 1 print seq, match_id match = spider.get_match(match_id) for item in match.item_arr: if item.company in company_map: cur_company = company_map[item.company] cur_company.back_ratio = \ (cur_company.back_ratio * cur_company.count + item.back_ratio) / \ (cur_company.count + 1) cur_company.count += 1 else: company_map[item.company] = item time.sleep(5) companies = [] for company in company_map.values(): companies.append(company) companies.sort(lambda x, y: cmp(x.back_ratio, y.back_ratio)) seq = 0 for company in companies: seq += 1 print seq, company.id, company.company, company.back_ratio ================================================ FILE: lottery.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- """ lottery related class """ __author__ = 'ggstar' class LotteryItem(object): def __init__(self): self.company = "" self.id = 0 self.w_odds = float(0) self.d_odds = float(0) self.l_odds = float(0) self.cw_odds = float(0) self.cd_odds = float(0) self.cl_odds = float(0) self.back_ratio = 0 self.count = 1 def display(self): print "%s\t%s\t%s\t%s\t%s\t" % (self.id, self.company, self.cw_odds, self.cd_odds, self.cl_odds) class LotteryMatch(object): def __init__(self, match_name, match_link, match_time, host_team, guest_team, item_arr): self.match_name = match_name self.match_link = match_link self.match_time = match_time self.host_team = host_team self.guest_team = guest_team self.item_arr = item_arr def display(self): print "match name:\t%s\nmatch members:\t%s VS %s\nmatch time:\t%s" % \ (self.match_name, self.host_team, self.guest_team, self.match_time) def display_items(self): for item in self.item_arr: item.display() class LotteryPortfolio(object): def __init__(self): self.fund_count = 0 self.profit = 0 self.win_item = LotteryItem() self.draw_item = LotteryItem() self.lose_item = LotteryItem() self.win_percentage = 0 self.draw_percentage = 0 self.lose_percentage = 0 def display(self): print "profit:\t%s\nwin:\t%s %s\t%s\t%s\ndraw:\t%s %s\t%s\t%s\nlose:\t%s %s\t%s\t%s" % \ (self.profit, self.win_item.id, self.win_item.company, self.win_item.cw_odds, self.win_percentage, self.draw_item.id, self.draw_item.company, self.draw_item.cd_odds, self.draw_percentage, self.lose_item.id, self.lose_item.company, self.lose_item.cl_odds, self.lose_percentage) ================================================ FILE: main.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- """ soccer bet main function file """ __author__ = 'ggstar' import spider import portfoliomodel import time import sys reload(sys) sys.setdefaultencoding('utf8') m_match_ids = spider.crawl_match_list() for m_match_id in m_match_ids: print m_match_id m_match = spider.get_match(m_match_id) portfolio = portfoliomodel.best_portfolio(m_match) m_match.display() portfolio.display() time.sleep(4) ================================================ FILE: portfoliomodel.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- """ determine lottery portfolio model """ __author__ = 'ggstar' import lottery def get_best_profit(portfolio): def min_pay(w, d, l, wp, dp, lp): if w * wp <= d * dp and w * wp <= l * lp: return w * wp if d * dp <= w * wp and d * dp <= l * lp: return d * dp else: return l * lp for i in range(100): for j in range(100-i): profit = min_pay(portfolio.win_item.cw_odds, portfolio.draw_item.cd_odds, portfolio.lose_item.cl_odds, i, j, 100 - i -j) if profit > portfolio.profit: portfolio.profit = profit portfolio.win_percentage = i portfolio.draw_percentage = j portfolio.lose_percentage = 100 - i - j return portfolio def best_portfolio(match): portfolio = lottery.LotteryPortfolio() for item in match.item_arr: if portfolio.win_item.cw_odds < item.cw_odds: portfolio.win_item = item if portfolio.draw_item.cd_odds < item.cd_odds: portfolio.draw_item = item if portfolio.lose_item.cl_odds < item.cl_odds: portfolio.lose_item = item portfolio = get_best_profit(portfolio) return portfolio ================================================ FILE: spider.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- """ lottery item class """ __author__ = 'ggstar' import re import lottery import datetime import requests def url_get(url_str, decode): r = requests.get(url_str) return r.content.decode(decode, "ignore").encode('utf-8') def crawl_match_info(match_id): url_str = "http://odds.500.com/fenxi/ouzhi-" + str(match_id) + ".shtml" print url_str content = url_get(url_str, "gb2312") #print content match = lottery.LotteryMatch("match_name", "match_link", "match_time", "host_team", "guest_team", "item_arr") match_info_r = re.compile(r'([\s\S]*?)<') seq = 0 for m in match_info_r.finditer(content): seq += 1 if seq == 1: match.host_team = m.group(1) elif seq == 2: match.match_name = m.group(1) elif seq == 3: match.guest_team = m.group(1) match_time_r = re.compile(r'

([\s\S]*?)

') for m in match_time_r.finditer(content): match.match_time = m.group(1) return match def crawl_lottery_items(match_id): url_str = "http://odds.500.com/fenxi1/ouzhi.php?id=" + str(match_id) + "&ctype=1&start="+str(1)+"&r=1&style=0&last=1&guojia=0&chupan=0" content = url_get(url_str, "utf-8") item_r = re.compile(r'(xls="row"[\s\S]*?)(.*?)') seq = 0 for odd in odds_pattern.finditer(one_item): seq += 1 odd_f = float(odd.group(1)) if seq == 1: lottery_item.w_odds = odd_f elif seq == 2: lottery_item.d_odds = odd_f elif seq == 3: lottery_item.l_odds = odd_f elif seq == 4: lottery_item.cw_odds = odd_f elif seq == 5: lottery_item.cd_odds = odd_f elif seq == 6: lottery_item.cl_odds = odd_f lottery_items.append(lottery_item) return_pattern = re.compile(r'\s*\s*(.*?)%') return_rate_match = return_pattern.search(one_item) if return_rate_match: lottery_item.back_ratio = float(return_rate_match.group(1)) return lottery_items def get_match(match_id): match = crawl_match_info(match_id) match.item_arr = crawl_lottery_items(match_id) return match def crawl_match_list(): today = datetime.datetime.now() return crawl_match_list_by_date(str(today.year) + "-" + str(today.month) + "-" + str(today.day)) def crawl_match_list_by_date(date): url_str = "http://trade.500.com/jczq/dgp.php?date="+ date +"&playtype=both" content = url_get(url_str, "gb2312") match_id_r = re.compile(r'http://odds.500.com/fenxi/ouzhi-(\d+).shtml') match_ids = [] for m in match_id_r.finditer(content): match_ids.append(m.group(1)) return match_ids