Advertisement
Guest User

Greg

a guest
Sep 18th, 2009
394
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.35 KB | None | 0 0
  1. import re
  2. from BeautifulSoup import BeautifulSoup
  3. import numpy as NP
  4. import sys
  5.  
  6. def parseSpreads(spreads):
  7.     for spread in spreads:
  8.         try:
  9.             spreadValue = spread.renderContents().replace('½', '.5')
  10.             yield float(spreadValue)
  11.         except Exception, e:
  12.             pass
  13.  
  14. def extractOdds(soup):
  15.     games = {}
  16.  
  17.     for cell in soup.findAll('td', attrs={'class': 'teams'}):
  18.         teams = cell.findAll('span', attrs={'class': 'team'})
  19.         team1, team2 = [str(t.find('a').renderContents()) for t in teams]
  20.  
  21.         games[(team1, team2)] = {}
  22.  
  23.         topspreads = [c for c in cell.parent.findAll('span', 'top-line')]
  24.         botspreads = [c for c in cell.parent.findAll('span', 'bottom-line')]
  25.         games[(team1,team2)]['topSpreads'] = [ts for ts in parseSpreads(topspreads)]
  26.         games[(team1,team2)]['botSpreads'] = [ts for ts in parseSpreads(botspreads)]
  27.         if games[(team1,team2)]['topSpreads']:
  28.             games[(team1,team2)]['avgSpread'] = NP.average(games[(team1,team2)]['topSpreads'])
  29.         elif games[(team1,team2)]['botSpreads']:
  30.             games[(team1,team2)]['avgSpread'] = NP.average(games[(team1,team2)]['botSpreads'])
  31.         else:
  32.             games[(team1,team2)]['avgSpread'] = 0.0
  33.  
  34.         overunders = [c.find('span') for c in cell.parent.findAll('div', 'over-under')]
  35.         games[(team1,team2)]['overUnders'] = [ou for ou in parseSpreads(overunders)]
  36.         games[(team1,team2)]['avgOverUnder'] = NP.average(games[(team1,team2)]['overUnders'])
  37.  
  38.     return games
  39.  
  40. def main():
  41.     filename = "html/odds_20090918.html"
  42.     file = open(filename)
  43.     soup = BeautifulSoup(''.join(file.readlines()))
  44.     file.close()
  45.    
  46.     games = extractOdds(soup)
  47.     print "%7s | %-25s      %-25s %6s %6s" % ('weight', 'winner', 'loser', 'spread', 'o/u')
  48.     print "================================================================================"
  49.     for i, ((team1,team2),data) in enumerate(sorted(games.items(), key=lambda (k,v): (v['avgSpread'], -1 * v['avgOverUnder']))):
  50.         weight = len(games) - i
  51.         if data['topSpreads']:
  52.             winner,loser = team1,team2
  53.         else:
  54.             winner,loser = team2,team1
  55.         print "%7d | %-25s over %-25s %6.2f %6.2f" % (weight, winner, loser, data['avgSpread'], data['avgOverUnder'])
  56.  
  57. if __name__ == "__main__":
  58.     main()
  59.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement