def racer(opener, url): soup = readurl(opener, 'RACER', url) part_url = url.split('http://statsf1.com') href = part_url[1] divname = soup.find('div', 'NavigCenter') divnation = soup.find('div', style='float:left;padding-right:20px;width:600px;') h1 = divname.find('h1') racer = plain(h1) parts = racer.split(' ') first_name = urlify(parts[0]).capitalize() last_name = get_last_name(parts) slug = urlify(racer) strong = divnation.find('strong') nation = plain(strong) asite = soup.find('a', id='ctl00_CPH_Main_HL_SiteWeb') if asite is None: website = None else: website = asite['href'] date = plain(strong.nextSibling.nextSibling) parts = date.split(' ') if parts[2] == '?': day = 01 month = 01 year = 1700 else: day = int(parts[2]) month = MONTH.index(parts[3]) + 1 year = int(parts[4]) print '@' + href + '@' + ':' + '@' + first_name + ' ' + last_name + '@' + ','
def racer(opener, url): soup = readurl(opener, "RACER", url) divname = soup.find("div", "NavigCenter") divnation = soup.find("div", style="float:left;padding-right:20px;width:600px;") h1 = divname.find("h1") racer = plain(h1) parts = racer.split(" ") en_parts = [] for i in range(0, len(parts)): family_parts = plain(urlify(parts[i].encode("utf-8").replace("'", "2").capitalize()).capitalize()) + " " en_parts.append(family_parts) first_name = plain(urlify(en_parts[0])).capitalize() family_name = plain(en_parts[1:]) slug = urlify(family_name.lower()) slug_details = urlify(first_name.lower() + "_" + family_name.lower()) strong = divnation.find("strong") nation = plain(strong) asite = soup.find("a", id="ctl00_CPH_Main_HL_SiteWeb") if asite is None: website = None else: site = asite["href"] siteparts = asite["href"].split("://") website = siteparts[1] date = plain(strong.nextSibling.nextSibling) parts = date.split(" ") if parts[2] == "?": day = 01 month = 01 year = 1700 else: day = int(parts[2]) month = MONTH.index(parts[3]) + 1 year = int(parts[4]) racer = Racer() racer.first_name = first_name racer.family_name = family_name racer.en_first_name = first_name racer.en_family_name = family_name if not Racer.objects.filter(family_name=family_name).count(): racer.slug = slug else: racer.slug = slug_details racer.website = website racer.photo = "upload/drivers/" + slug + ".jpg" racer.country = Country.objects.get(name=nation) racer.birthday = datetime.date(int(year), int(month), int(day)) racer.save() # print 'First Name:', first_name print "Family Name:", family_name
def entrans(opener, url): soup = readurl(opener, 'entrans', url) tbody = soup.find('tbody') result = {} for tr in tbody.findAll('tr'): num = plain(tr.contents[1]) rac = tr.contents[2] racer_a = rac.find('a') href = racer_a['href'] racer = getRacer(href) print racer parts = racer.split(' ') first_name = urlify(parts[0]).capitalize() family_name = get_last_name(parts) #print first_name, family_name team = plain(tr.contents[4]) engine = plain(tr.contents[6]) if engine == 'Pratt & Whitney': engine = 'Pratt & Whitney' elif engine == 'Küchen': engine = 'Kuchen' tyre = plain(tr.contents[8]) if tyre == '?': tyre = 'Unknown' result[(first_name, family_name, team, engine)] = (num, tyre) return result
def team(opener, url): soup = readurl(opener, "TEAM", url) divname = soup.find("div", "NavigCenter") h1 = divname.find("h1") name = plain(h1) founder = None divfounder = soup.find("div", style="margin-top:5px;") for strong in divfounder.find("strong"): founder = plain(divfounder.contents[1]) divnation = soup.find("div", style="float:left;min-width:500px;") for strong in divnation.findAll("strong"): nation_name = plain(strong) parts = nation_name.split(" (") nation = parts[0] asite = soup.find("a", id="ctl00_CPH_Main_HL_SiteWeb") if asite is None: website = None else: website = asite["href"] # print 'Team:', team # print 'Founder:', founder # print 'Nation:', nation # print 'Website:', website team = Team() team.name = name team.en_name = name team.slug = urlify(name) team.founder = founder team.country = Country.objects.get(name=nation) team.website = website team.save()
def engine(opener, url): soup = readurl(opener, "ENGINE", url) divname = soup.find("div", "NavigCenter") h1 = divname.find("h1") name = plain(h1) founder = None divfounder = soup.find("div", style="margin-top:5px;") for strong in divfounder.find("strong"): founder = plain(divfounder.contents[1]) divnation = soup.find("div", style="float:left;min-width:500px;") for strong in divnation.findAll("strong"): nation_name = plain(strong) parts = nation_name.split(" (") nation = parts[0] asite = soup.find("a", id="ctl00_CPH_Main_HL_SiteWeb") if asite is None: website = None else: website = asite["href"] engine = Engine() engine.name = name engine.en_name = name engine.slug = urlify(name) engine.founder = founder engine.country = Country.objects.get(name=nation) engine.website = website engine.save()
def entrans(opener, url): soup = readurl(opener, "entrans", url) tbody = soup.find("tbody") result = {} for tr in tbody.findAll("tr"): num = plain(tr.contents[1]) rac = tr.contents[2] racer_a = rac.find("a") href = racer_a["href"] racer = getRacer(href) # print racer parts = racer.split(" ") first_name = urlify(parts[0]).capitalize() family_name = get_last_name(parts) # print first_name, family_name team = plain(tr.contents[4]) engine = plain(tr.contents[6]) if engine == "Pratt & Whitney": engine = "Pratt & Whitney" elif engine == "Küchen": engine = "Kuchen" tyre = plain(tr.contents[8]) if tyre == "?": tyre = "Unknown" result[(first_name, family_name, team, engine)] = (num, tyre) return result
def track(opener, url): soup = readurl(opener, "TRACK", url) maintable = soup.find("table", id="ctl00_CPH_Main_TBL_Version") lenall = [] divname = soup.find("div", "NavigCenter") name = plain(divname.find("h1")) if name == "New Delhi": length = 0 lengths = [] asite = soup.find("a", id="ctl00_CPH_Main_Hl_SiteWeb") if asite is None: website = None else: website = asite["href"] maps = soup.find("a", id="ctl00_CPH_Main_HL_Google") if maps is None: googlemaps = None else: googlemaps = maps["href"] track = Track() track.name = name track.en_name = name track.slug = urlify(name) track.website = website track.googlemaps = googlemaps track.save() if name != "New Delhi": tracklen(opener, url)
def tracklen(opener, url): soup = readurl(opener, "TRACKLEN", url) maintable = soup.find("table", id="ctl00_CPH_Main_TBL_Version") divname = soup.find("div", "NavigCenter") name = plain(divname.find("h1")) lenall = [] for table in maintable.findAll("table", cellpadding="0"): for tr in table.findAll("tr")[1:]: length_str = plain(tr.contents[4]) lparts = length_str.split(".") temp_km = lparts[0] + lparts[1] length_int = int(temp_km) length = int(length_int) if length == "L (km)": continue lenall.append(length) lengths = [] for a in lenall: if a not in lengths: lengths.append(a) for i in range(0, len(lengths)): test = lengths[i] tracklen = TrackLen() tracklen.track = Track.objects.get(name=name) tracklen.photo = "upload/tracks/" + urlify(name) + "-" + str(test) + ".png" tracklen.length = test tracklen.save()
def death(opener, url): soup = readurl(opener, 'RACER', url) part_url = url.split('http://statsf1.com') href = part_url[1] divname = soup.find('div', 'NavigCenter') divnation = soup.find('div', style='float:left;padding-right:20px;width:600px;') h1 = divname.find('h1') racer = plain(h1) parts = racer.split(' ') first_name = urlify(parts[0]).capitalize() last_name = get_last_name(parts) if divnation.find(text=re.compile('Die the')): dparts = divnation.find(text=re.compile('Die the')).split(' ') if dparts[3] == '?': day = 01 month = 01 year = 2100 else: day = int(dparts[3]) month = MONTH.index(dparts[4]) + 1 year = int(dparts[5]) #try: racer = Racer.objects.filter(first_name=first_name, family_name=last_name) print first_name, last_name print day, month, year racer.update(deathday = datetime.date(int(year), int(month), int(day))) #except: # pass else: pass
def racerlist(opener, url): soup = readurl(opener, "RACERLIST", url) table = soup.find("table", id="ctl00_CPH_Main_GV_Pilote") for tr in table.findAll("tr"): link = tr.contents[1] for a in link.findAll("a"): href = a["href"] driver = plain(a) parts = driver.split(" ") first_name = plain(urlify(parts[0])).capitalize() first_name = plain(parts[-1]) fname = first_name[0] + "." family_name = plain(" ".join(parts[0:-1])) # racer(opener, SITE + href) print fname, family_name
def qual(opener, url): soup = readurl(opener, 'qual', url) entr = soup.find('a', id='ctl00_CPH_Main_Entete_HL_Engages') entrans_href = entr['href'] wtime = 0 slug = None num = 0 tyre = None # открываем список заявленных пилотов result = entrans(opener, SITE + entrans_href) divname = soup.find('div', 'NavigCenter') h1 = divname.find('h1') slug = urlify(plain(h1)) + '-qual' h1_parts = plain(h1).split(' ') gpname = ' '.join(h1_parts[0:-1]) # название гран-при season = int(h1_parts[-1]) # сезон re = h1.find('a') gp_link = re['href'] # нужно чтобы дёргать дату заезда tbody = soup.find('tbody') if tbody is None: gp = GrandPrix() gp.name = GPName.objects.get(en_name=gpname) gp.season = Season.objects.get(year=season) q = Heat() q.grandprix = GrandPrix.objects.get(name=gp.name, season=gp.season) q.type = 'Q' q.date = getdate(opener, SITE + gp_link) q.time = wtime q.laps = 0 q.slug = slug q.save() pass else: for tr in tbody.findAll('tr')[0:1]: pos = plain(tr.contents[1]) if pos =='': pass else: racer_a = tr.contents[2].find('a') racer_href = racer_a['href'] racer = getRacer(racer_href) parts = racer.split(' ') first_name = urlify(parts[0]).capitalize() family_name = get_last_name(parts) team = plain(tr.contents[3]) engine = plain(tr.contents[4]) if engine == 'Pratt & Whitney': engine = 'Pratt & Whitney' elif engine == 'Küchen': engine = 'Kuchen' time = plain(tr.contents[5]) tparts = time.split("'") mins = int(tparts[0]) seconds = int(tparts[1]) try: if len(tparts[3]) == 1: etc = Decimal(tparts[3]) / 10 elif len(tparts[3]) == 2: etc = Decimal(tparts[3]) / 100 elif len(tparts[3]) == 3: etc = Decimal(tparts[3]) / 1000 except: etc = 0 wtime = Decimal(60*mins + seconds + etc) try: num, tyre = result[(first_name, family_name, team, engine)] except IndexError: num, tyre = 0, None print pos, num, first_name, family_name, team, engine, wtime gp = GrandPrix() gp.name = GPName.objects.get(en_name=gpname) gp.season = Season.objects.get(year=season) q = Heat() q.grandprix = GrandPrix.objects.get(name=gp.name, season=gp.season) q.type = 'Q' q.date = getdate(opener, SITE + gp_link) q.time = wtime q.laps = 0 q.slug = slug q.save() r = Racer() r.en_first_name = first_name r.en_family_name = family_name qual = Result() qual.heat = Heat.objects.get(grandprix=q.grandprix, type=q.type) qual.position = 1 qual.num = num qual.racer = Racer.objects.get(en_first_name=r.en_first_name, en_family_name=r.en_family_name) qual.team = Team.objects.get(name=team) qual.engine = Engine.objects.get(name=engine) qual.tyre = Tyre.objects.get(name=tyre) qual.delta = 0 qual.save() for tr in tbody.findAll('tr')[1:]: pos = plain(tr.contents[1]) if pos =='': pass else: racer_a = tr.contents[2].find('a') racer_href = racer_a['href'] racer = getRacer(racer_href) parts = racer.split(' ') first_name = urlify(parts[0]).capitalize() family_name = get_last_name(parts) team = plain(tr.contents[3]) engine = plain(tr.contents[4]) if engine == 'Pratt & Whitney': engine = 'Pratt & Whitney' elif engine == 'Küchen': engine = 'Kuchen' try: delta = Decimal(plain(tr.contents[6])) except: delta = None try: num, tyre = result[(first_name, family_name, team, engine)] except IndexError: num, tyre = 0, None r = Racer() r.en_first_name = first_name r.en_family_name = family_name qual = Result() qual.heat = Heat.objects.get(grandprix=q.grandprix, type=q.type) qual.position = pos qual.num = num qual.racer = Racer.objects.get(en_first_name=r.en_first_name, en_family_name=r.en_family_name) qual.team = Team.objects.get(name=team) qual.engine = Engine.objects.get(name=engine) qual.tyre = Tyre.objects.get(name=tyre) qual.delta = delta qual.save() print pos, num, first_name, family_name, team, engine, delta
def bestlap(opener, url): soup = readurl(opener, "bestlap", url) entr = soup.find("a", id="ctl00_CPH_Main_Entete_HL_Engages") entrans_href = entr["href"] wtime = 0 slug = None num = 0 tyre = None # открываем список заявленных пилотов result = entrans(opener, SITE + entrans_href) divname = soup.find("div", "NavigCenter") h1 = divname.find("h1") slug = urlify(plain(h1)) + "-bestlap" h1_parts = plain(h1).split(" ") gpname = " ".join(h1_parts[0:-1]) # название гран-при season = int(h1_parts[-1]) # сезон re = h1.find("a") gp_link = re["href"] # нужно чтобы дёргать дату заезда tbody = soup.find("tbody") if tbody is None: gp = GrandPrix() gp.name = GPName.objects.get(en_name=gpname) gp.season = Season.objects.get(year=season) q = Heat() q.grandprix = GrandPrix.objects.get(name=gp.name, season=gp.season) q.type = "B" q.date = getdate(opener, SITE + gp_link) q.time = wtime q.laps = 0 q.slug = slug q.save() pass else: for tr in tbody.findAll("tr")[0:1]: pos = plain(tr.contents[1]) if pos == "": pass else: racer_a = tr.contents[2].find("a") racer_href = racer_a["href"] racer = getRacer(racer_href) parts = racer.split(" ") first_name = urlify(parts[0]).capitalize() family_name = get_last_name(parts) team = plain(tr.contents[3]) engine = plain(tr.contents[4]) if plain(tr.contents[7]) == "": lap = None else: lap = plain(tr.contents[7]) if engine == "Pratt & Whitney": engine = "Pratt & Whitney" elif engine == "Küchen": engine = "Kuchen" time = plain(tr.contents[5]) tparts = time.split("'") mins = int(tparts[0]) seconds = int(tparts[1]) try: if len(tparts[3]) == 1: etc = Decimal(tparts[3]) / 10 elif len(tparts[3]) == 2: etc = Decimal(tparts[3]) / 100 elif len(tparts[3]) == 3: etc = Decimal(tparts[3]) / 1000 except: etc = 0 wtime = Decimal(60 * mins + seconds + etc) try: num, tyre = result[(first_name, family_name, team, engine)] except IndexError: num, tyre = 0, None print pos, num, first_name, family_name, team, engine, wtime, lap gp = GrandPrix() gp.name = GPName.objects.get(en_name=gpname) gp.season = Season.objects.get(year=season) q = Heat() q.grandprix = GrandPrix.objects.get(name=gp.name, season=gp.season) q.type = "B" q.date = getdate(opener, SITE + gp_link) q.time = wtime q.laps = lap q.slug = slug q.save() r = Racer() r.en_first_name = first_name r.en_family_name = family_name bestlap = Result() bestlap.heat = Heat.objects.get(grandprix=q.grandprix, type=q.type) bestlap.position = 1 bestlap.num = num bestlap.racer = Racer.objects.get(en_first_name=r.en_first_name, en_family_name=r.en_family_name) bestlap.team = Team.objects.get(name=team) bestlap.engine = Engine.objects.get(name=engine) bestlap.tyre = Tyre.objects.get(name=tyre) bestlap.delta = 0 bestlap.save() for tr in tbody.findAll("tr")[1:]: pos = plain(tr.contents[1]) if pos == "": pass else: racer_a = tr.contents[2].find("a") racer_href = racer_a["href"] racer = getRacer(racer_href) parts = racer.split(" ") first_name = urlify(parts[0]).capitalize() family_name = get_last_name(parts) team = plain(tr.contents[3]) engine = plain(tr.contents[4]) if plain(tr.contents[7]) == "": lap = None else: lap = plain(tr.contents[7]) if engine == "Pratt & Whitney": engine = "Pratt & Whitney" elif engine == "Küchen": engine = "Kuchen" try: delta = Decimal(plain(tr.contents[6])) except: delta = None try: num, tyre = result[(first_name, family_name, team, engine)] except IndexError: num, tyre = 0, None r = Racer() r.en_first_name = first_name r.en_family_name = family_name bestlap = Result() bestlap.heat = Heat.objects.get(grandprix=q.grandprix, type=q.type) bestlap.position = pos bestlap.num = num bestlap.racer = Racer.objects.get(en_first_name=r.en_first_name, en_family_name=r.en_family_name) bestlap.team = Team.objects.get(name=team) bestlap.engine = Engine.objects.get(name=engine) bestlap.tyre = Tyre.objects.get(name=tyre) bestlap.delta = delta bestlap.laps = lap bestlap.save() print pos, num, first_name, family_name, team, engine, delta, lap
def race(opener, url): soup = readurl(opener, 'race', url) entr = soup.find('a', id='ctl00_CPH_Main_Entete_HL_Engages') entrans_href = entr['href'] tyre = None dsq = False dnf = False # открываем список заявленных пилотов result = entrans(opener, SITE + entrans_href) divname = soup.find('div', 'NavigCenter') h1 = divname.find('h1') slug = urlify(plain(h1)) + '-race' h1_parts = plain(h1).split(' ') gpname = ' '.join(h1_parts[0:-1]) # название гран-при season = int(h1_parts[-1]) # сезон re = h1.find('a') gp_link = re['href'] # нужно чтобы дёргать дату заезда tbody = soup.find('tbody') # дергаем данные победителя for tr in tbody.findAll('tr'): if plain(tr.contents[1]) == '1': try: winlaps = int(plain(tr.contents[6].contents[0])) results = plain(tr.contents[7].find('i')) try: rparts = results.split(' ') hours = Decimal(rparts[0].split('h')[0]) minutes = Decimal(rparts[1].split('m')[0]) etc = Decimal(rparts[2].split('s')[0]) except: hours = 0 minutes = Decimal(results.split("'")[0]) etc = Decimal(str(results.split("'")[1] + '.' + results.split("''")[1])) wintime = Decimal(hours * 3600 + minutes * 60 + etc) print 'Winner time:', wintime print 'Laps: ', winlaps except: print 'fail' else: pass test = GrandPrix() test.name = GPName.objects.get(en_name=gpname) test.season = Season.objects.get(year=season) r = Heat() r.grandprix = GrandPrix.objects.get(name=test.name, season=test.season) r.type = 'R' r.date = getdate(opener, SITE + gp_link) #wintime = Decimal(str(11197.800)) if wintime < 3700: r.time = wintime r.half_points = True print 'KUKU' else: r.time = wintime r.laps = winlaps r.slug = slug r.save() # считаем количество финишировавших fcounter = 0 for tr in tbody.findAll('tr'): try: position = int(plain(tr.contents[1])) fcounter += 1 except: pass # считаем количество сошедших counter = 0 for tr in tbody.findAll('tr'): position = plain(tr.contents[1]) if position == 'ab': counter += 1 # считаем количество dsq dcounter = 0 for tr in tbody.findAll('tr'): position = plain(tr.contents[1]) laps = plain(tr.contents[6]) if laps == '' or laps == 'tf': laps is None laps_gap = None else: laps_gap = int(winlaps) - int(laps) if position == 'dsq' and laps_gap <= (winlaps/10 + 1): dcounter += 1 #tr_count = fcounter + counter for tr in tbody.findAll('tr'): position = plain(tr.contents[1]) laps = plain(tr.contents[6]) if laps == '' or laps == 'tf': laps is None laps_gap = None else: laps_gap = int(winlaps) - int(laps) fail = '' if position == '' or position == 'f' or position == 'nq' or position == 'npq' or position == 'exc' or position == 'np': pass else: # определяем позицию пилота if position == 'dsq': #pos = 16 dsq = True dnf = False else: dsq = False if position == 'ab': dsq = False dnf = True else: dnf = False try: pos = Decimal(position) except: if position == '&': pos = pos else: pos += 1 #num = plain(tr.contents[2]) racer_a = tr.contents[3].find('a') racer_href = racer_a['href'] racer = getRacer(racer_href) parts = racer.split(' ') first_name = urlify(parts[0]).capitalize() family_name = get_last_name(parts) team = plain(tr.contents[4]) engine = plain(tr.contents[5]) if engine == 'Pratt & Whitney': engine = 'Pratt & Whitney' elif engine == 'Küchen': engine = 'Kuchen' try: #tyre = result[(first_name, family_name, team, engine)] tyre, team, engine, num = result[(first_name, family_name)] except IndexError: tyre = None # проверяем время или сход try: time = plain(tr.contents[7].find('i')) try: tparts = time.split(' ') hours = Decimal(tparts[0].split('h')[0]) minutes = Decimal(tparts[1].split('m')[0]) etc = Decimal(tparts[2].split('s')[0]) except: hours = 0 minutes = Decimal(time.split("'")[0]) etc = Decimal(str(time.split("'")[1] + '.' + time.split("''")[1])) result_time = str(hours * 3600 + minutes * 60 + etc) time_gap = abs(Decimal(wintime) - Decimal(result_time)) if tr.contents[7].find('br'): fail = plain(tr.contents[7].find('br').previousSibling) except: results = plain(tr.contents[7]) if results == '': time_gap = None fail = None else: fail = results time_gap = None rac = Racer() rac.en_first_name = first_name rac.en_family_name = family_name ret = Retire() ret.en_reason = fail race = Result() race.heat = Heat.objects.get(grandprix=r.grandprix, type=r.type) race.position = pos race.num = num race.racer = Racer.objects.get(en_first_name=rac.en_first_name, en_family_name=rac.en_family_name) race.team = Team.objects.get(name=team) race.engine = Engine.objects.get(name=engine) race.tyre = Tyre.objects.get(name=tyre) race.delta = time_gap race.laps = laps_gap try: race.retire = Retire.objects.get(en_reason=ret.en_reason) except Retire.DoesNotExist: race.retire = None race.dsq = dsq race.save() print pos, num, first_name, family_name, team, engine, tyre, laps, laps_gap, time_gap, fail, dnf, dsq
def grandprix(opener, url): soup = readurl(opener, 'GRANDPRIX', url) meteo = soup.find('img', id='ctl00_CPH_Main_IMG_Meteo') td = meteo.parent.nextSibling.nextSibling divname = soup.find('div', 'NavigCenter') h1 = divname.find('h1') title = plain(h1) parts = title.split(' ') index_p = parts[0] index_parts = index_p.split('.') index = index_parts[0] for a in h1.find('a'): name = plain(a) country = name if country == 'Indianapolis': country = 'USA' season = parts[2] slug = urlify(name) + '-' + season try: season_t = parts[3] slug = urlify(name) + '-' + season_t except: None track = plain(td.contents[1]) date = cut(td.contents[0]) dparts = date.split(' ') day = int(dparts[0]) month = MONTH.index(dparts[1]) + 1 year = int(dparts[2]) info = cut(td.contents[3]) kparts = info.split(' ') laps = int(kparts[0]) len = kparts[3] lparts = len.split('.') temp_km = lparts[0] + lparts[1] km = int(temp_km) #print index #print name #print season #print track #print 'Date:', day, month, year #print 'Laps:', laps #print 'Track len:', km #result = soup.find('a', id='ctl00_CPH_Main_HL_Classement') #best = soup.find('a', id='ctl00_CPH_Main_HL_MeilleurTour') #reshref = result['href'] #besthref = best['href'] #race(SITE + reshref) #bestlap(SITE + besthref) # test = TrackLen() # test.track = Track.objects.get(name=track) # fail = Track() # fail.tracklen = TrackLen.objects.get(track=test.track, length=km) # # grandprix = GrandPrix() # grandprix.index = index # try: # grandprix.season = Season.objects.get(year=season) # except: # grandprix.season = Season.objects.get(year=season_t) # grandprix.name = GPName.objects.get(name=name) # grandprix.slug = slug # #try: # grandprix.country = Country.objects.get(name=country) # #except: # # grandprix.country = Country.objects.get(name='Unknown') # grandprix.tracklen = fail.tracklen # grandprix.save() # Going to Starting grid race_link = soup.find('a', id='ctl00_CPH_Main_HL_Classement') racehref = race_link['href'] race(opener, SITE + racehref)
def grid(opener, url): soup = readurl(opener, 'grid', url) entr = soup.find('a', id='ctl00_CPH_Main_Entete_HL_Engages') entrans_href = entr['href'] wtime = 0 slug = None num = 0 tyre = None # открываем список заявленных пилотов result = entrans(opener, SITE + entrans_href) divname = soup.find('div', 'NavigCenter') h1 = divname.find('h1') slug = urlify(plain(h1)) + '-grid' h1_parts = plain(h1).split(' ') gpname = ' '.join(h1_parts[0:-1]) # название гран-при season = int(h1_parts[-1]) # сезон re = h1.find('a') gp_link = re['href'] # нужно чтобы дёргать дату заезда table = soup.find('table', id='ctl00_CPH_Main_TBL_Grille') if table is None: print 'None' else: for td in table.findAll('td', 'Grille'): if td.find('strong'): if td.find('div', 'NP'): pole = td.find('div', 'NP') else: pole = td.find('div') pos = 1 racer = getRacer(pole.contents[2]['href']) parts = racer.split(' ') first_name = urlify(parts[0]).capitalize() family_name = get_last_name(parts) team = plain(pole.contents[4]) try: num, tyre, engine = result[(first_name, family_name, team,)] except IndexError: num, tyre, engine = 0, None time = plain(pole.contents[6]) tparts = time.split("'") if len(tparts) > 1: mins = int(tparts[0]) seconds = int(tparts[1]) try: if len(tparts[3]) == 1: etc = Decimal(tparts[3]) / 10 elif len(tparts[3]) == 2: etc = Decimal(tparts[3]) / 100 elif len(tparts[3]) == 3: etc = Decimal(tparts[3]) / 1000 except: etc = 0 wtime = Decimal(60*mins + seconds + etc) else: time = plain(pole.contents[8]) tparts = time.split("'") mins = int(tparts[0]) seconds = int(tparts[1]) try: if len(tparts[3]) == 1: etc = Decimal(tparts[3]) / 10 elif len(tparts[3]) == 2: etc = Decimal(tparts[3]) / 100 elif len(tparts[3]) == 3: etc = Decimal(tparts[3]) / 1000 except: etc = 0 wtime = Decimal(60*mins + seconds + etc) gp = GrandPrix() gp.name = GPName.objects.get(en_name=gpname) gp.season = Season.objects.get(year=season) q = Heat() q.grandprix = GrandPrix.objects.get(name=gp.name, season=gp.season) q.type = 'G' q.date = getdate(opener, SITE + gp_link) q.time = wtime q.laps = 0 q.slug = slug q.save() r = Racer() r.en_first_name = first_name r.en_family_name = family_name qual = Result() qual.heat = Heat.objects.get(grandprix=q.grandprix, type=q.type) qual.position = 1 qual.num = num qual.racer = Racer.objects.get(en_first_name=r.en_first_name, en_family_name=r.en_family_name) qual.team = Team.objects.get(name=team) qual.engine = Engine.objects.get(name=engine) qual.tyre = Tyre.objects.get(name=tyre) qual.delta = 0 qual.save() print pos, first_name, family_name, team, engine, wtime for td in table.findAll('td', 'Grille'): if td.find('strong'): pass else: if td.find('div', 'NP'): cell = td.find('div', 'NP') else: cell = td.find('div') if plain(td) == '': pass else: pos = plain(cell.contents[0].split('.')[0]) racer = getRacer(cell.contents[1]['href']) parts = racer.split(' ') first_name = urlify(parts[0]).capitalize() family_name = get_last_name(parts) team = plain(cell.contents[3]) try: num, tyre, engine = result[(first_name, family_name, team,)] except IndexError: num, tyre, engine = 0, None time = plain(cell.find('i')) if time: tparts = time.split("'") mins = int(tparts[0]) seconds = int(tparts[1]) try: if len(tparts[3]) == 1: etc = Decimal(tparts[3]) / 10 elif len(tparts[3]) == 2: etc = Decimal(tparts[3]) / 100 elif len(tparts[3]) == 3: etc = Decimal(tparts[3]) / 1000 except: etc = 0 gtime = Decimal(60*mins + seconds + etc) delta = Decimal(gtime, 3) - Decimal(wtime, 3) else: gtime = None delta = None r = Racer() r.en_first_name = first_name r.en_family_name = family_name qual = Result() qual.heat = Heat.objects.get(grandprix=q.grandprix, type=q.type) qual.position = pos qual.num = num qual.racer = Racer.objects.get(en_first_name=r.en_first_name, en_family_name=r.en_family_name) qual.team = Team.objects.get(name=team) qual.engine = Engine.objects.get(name=engine) qual.tyre = Tyre.objects.get(name=tyre) qual.delta = delta qual.save() print pos, first_name, family_name, team, engine, gtime, delta
def get_last_name(list): f = '' for i in list[1:-1]: f = f + urlify(i).capitalize() + ' ' f = f + urlify(list[-1]).capitalize() return f
def test_string_with_padded_spaces(self): data = ' hello, world! ' expected = 'hello,%20world!' result = urlify(data) self.assertEqual(result, expected)
def qual(opener, url): soup = readurl(opener, "qual", url) entr = soup.find("a", id="ctl00_CPH_Main_Entete_HL_Engages") entrans_href = entr["href"] table = soup.find("table", id="ctl00_CPH_Main_TBL_Grille") wtime = 0 slug = 0 num = 0 tyre = None result = entrans(opener, SITE + entrans_href) divname = soup.find("div", "NavigCenter") h1 = divname.find("h1") for a in h1.find("a"): slug_t = plain(a) slpart = slug_t.split(" ") slug = (plain("-".join(slpart[0:])) + "-q").lower() gpname = plain(" ".join(slpart[0:-1])) season = int(slpart[-1]) print gpname, season re = h1.find("a") gp_link = re["href"] for p in table.findAll("div", "GrillePos"): temp = plain(p) parts = temp.split(".") pos = parts[0] if p.find("strong"): if len(p) > 8: href = p.contents[2]["href"] racer = getRacer(href) parts = racer.split(" ") first_name = urlify(parts[0]).capitalize() family_name = get_last_name(parts) team = plain(p.contents[4]) engine = plain(p.contents[6]) time = plain(p.contents[8]) tparts = time.split("'") mins = int(tparts[0]) seconds = int(tparts[1]) try: if len(tparts[3]) == 1: etc = Decimal(tparts[3]) / 10 elif len(tparts[3]) == 2: etc = Decimal(tparts[3]) / 100 elif len(tparts[3]) == 3: etc = Decimal(tparts[3]) / 1000 except: etc = 0 # wtime = str(60*mins + seconds + etc/1000) else: href = p.contents[2]["href"] racer = getRacer(href) parts = racer.split(" ") first_name = urlify(parts[0]).capitalize() family_name = get_last_name(parts) team = plain(p.contents[4]) engine = team time = plain(p.contents[6]) tparts = time.split("'") mins = int(tparts[0]) seconds = int(tparts[1]) try: if len(tparts[3]) == 1: etc = Decimal(tparts[3]) / 10 elif len(tparts[3]) == 2: etc = Decimal(tparts[3]) / 100 elif len(tparts[3]) == 3: etc = Decimal(tparts[3]) / 1000 except: etc = 0 wtime = str(60 * mins + seconds + etc) else: continue try: num, tyre = result[(first_name, family_name, team, engine)] except IndexError: num, tyre = 0, None print pos, num, first_name, family_name, team, engine, tyre, wtime # test = GrandPrix() # test.name = GPName.objects.get(name=gpname) # test.season = Season.objects.get(year=season) # # q = Heat() # q.grandprix = GrandPrix.objects.get(name=test.name, season=test.season) # q.type = 'Q' # q.date = getdate(opener, SITE + gp_link) # q.time = wtime # q.laps = 0 # q.slug = slug # q.save() # # r = Racer() # r.first_name = first_name # r.family_name = family_name # # qual = Result() # qual.heat = Heat.objects.get(grandprix=q.grandprix) # qual.position = 1 # qual.num = num # qual.racer = Racer.objects.get(first_name=r.first_name, family_name=r.family_name) # qual.team = Team.objects.get(name=team) # qual.engine = Engine.objects.get(name=engine) # qual.tyre = Tyre.objects.get(name=tyre) # qual.delta = 0 # qual.save() for p in table.findAll("div", "GrillePos"): temp = plain(p) parts = temp.split(".") pos = parts[0] if p.find("strong"): continue if p.find: href = p.contents[1]["href"] racer = getRacer(href) parts = racer.split(" ") first_name = urlify(parts[0]).capitalize() family_name = get_last_name(parts) team = plain(p.contents[3]) if len(p) < 8: engine = team time = plain(p.contents[5]) if time: tparts = time.split("'") mins = int(tparts[0]) seconds = int(tparts[1]) try: if len(tparts[3]) == 1: etc = Decimal(tparts[3]) / 10 elif len(tparts[3]) == 2: etc = Decimal(tparts[3]) / 100 elif len(tparts[3]) == 3: etc = Decimal(tparts[3]) / 1000 except: etc = 0 qtime = str(60 * mins + seconds + etc) delta = Decimal(qtime, 3) - Decimal(wtime, 3) else: delta = None elif len(p): engine = plain(p.contents[5]) if engine == "Pratt & Whitney": engine = "Pratt & Whitney" elif engine == "Küchen": engine = "Kuchen" time = plain(p.contents[7]) tparts = time.split("'") if time: tparts = time.split("'") mins = int(tparts[0]) seconds = int(tparts[1]) try: if len(tparts[3]) == 1: etc = Decimal(tparts[3]) / 10 elif len(tparts[3]) == 2: etc = Decimal(tparts[3]) / 100 elif len(tparts[3]) == 3: etc = Decimal(tparts[3]) / 1000 except: etc = 0 qtime = str(60 * mins + seconds + etc) delta = Decimal(qtime, 3) - Decimal(wtime, 3) else: delta = None qtime = str(60 * mins + seconds + etc / 1000) qq = Decimal(qtime, 3) try: num, tyre = result[(first_name, family_name, team, engine)] except IndexError: num, tyre = 0, None print pos, num, first_name, family_name, team, engine, tyre, delta
def get_fuckin_name(list): f = '' for i in list[0:-1]: f = f + urlify(i).capitalize() + ' ' return f
def test_empty_string(self): data = '' result = urlify(data) self.assertEqual(result, data)
def fp(opener, url): soup = readurl(opener, 'fp', url) links = soup.find('div', id='tertiaryNav') #List of seasons season = plain(links.contents[1].contents[1]) #Current season try: gpn = plain(links.contents[1].contents[5]).split(' ') #Current Grand Prix gpname = gpn[0].capitalize() + ' ' + gpn[1].capitalize() except: gpname = plain(links.contents[1].contents[5]).capitalize() type = plain(links.contents[1].contents[9]) #Heat type print type types = { 'PRACTICE 1': '1', 'PRACTICE 2': '2', 'PRACTICE 3': '3', } slug = urlify(gpname) + '-' + str(season) + '-' + 'fp' + urlify(types[type]) print gpname print slug heading = soup.find('div', 'raceResultsHeading') gpdate = plain(heading.find('span')) gparts = gpdate.split(' ') day = int(gparts[0]) try: month = MONTH.index(gparts[3]) + 1 except: month = MONTH.index(gparts[1]) + 1 results = soup.find('table', 'raceResults') #Searching for the First place for tr in results.findAll('tr')[1:2]: pos = plain(tr.contents[1]) #Position num = plain(tr.contents[3]) #Car number racer = plain(tr.contents[5]) #Racer parts = racer.split(' ') first_name = urlify(parts[0]).capitalize() family_name = get_last_name(parts) team_engine = plain(tr.contents[7]) #Team-Engine try: dash = team_engine.split('-') team = dash[0] #Team engine = dash[1] #Engine except: team = plain(tr.contents[7]) if team == 'BMW Sauber': engine = 'BMW' elif team == 'Mercedes GP': engine = 'Mercedes' else: engine = plain(tr.contents[7]) tyre = 'Pirelli' win_time = plain(tr.contents[9]) wparts = win_time.split(':') mins = int(wparts[0]) seconds = int((wparts[1].split('.'))[0]) etc = Decimal((wparts[1].split('.'))[1]) / 1000 wtime = Decimal(60*mins + seconds + etc) #Winner's time gp = GrandPrix() if gpname == 'Great Britain': gp.name = GPName.objects.get(en_name='Britain') elif gpname == 'United States': gp.name = GPName.objects.get(en_name='USA') elif gpname == 'Korea': gp.name = GPName.objects.get(en_name='South Korea') else: gp.name = GPName.objects.get(en_name=gpname) gp.season = Season.objects.get(year=season) print gp.name, gp.season q = Heat() q.grandprix = GrandPrix.objects.get(name=gp.name, season=gp.season) q.type = types[type] if types[type] == '1' or types[type] == '2': q.date = datetime.datetime(int(season), int(month), day, 0, 0) elif types[type] == '3' or types[type] == '4': if gpname == 'Monaco': q.date = datetime.datetime(int(season), int(month), day+2, 0, 0) else: q.date = datetime.datetime(int(season), int(month), day+1, 0, 0) print q.date q.time = wtime q.laps = 0 q.slug = slug q.save() r = Racer() r.en_first_name = first_name r.en_family_name = family_name qual = Result() qual.heat = Heat.objects.get(grandprix=q.grandprix, type=q.type) qual.position = 1 qual.num = num qual.racer = Racer.objects.get(en_first_name=r.en_first_name, en_family_name=r.en_family_name) if team == 'RBR': qual.team = Team.objects.get(name='Red Bull') elif team == 'STR': qual.team = Team.objects.get(name='Toro Rosso') elif team == 'Mercedes GP': qual.team = Team.objects.get(name='Mercedes') else: qual.team = Team.objects.get(name=team) qual.engine = Engine.objects.get(name=engine) qual.tyre = Tyre.objects.get(name=tyre) qual.delta = 0 qual.save() print pos, num, first_name, family_name, team, engine, tyre, wtime #Searching for the other places for tr in results.findAll('tr')[2:]: pos = plain(tr.contents[1]) #Position num = plain(tr.contents[3]) #Car number racer = plain(tr.contents[5]) #Racer parts = racer.split(' ') first_name = urlify(parts[0]).capitalize() family_name = get_last_name(parts) team_engine = plain(tr.contents[7]) #Team-Engine try: dash = team_engine.split('-') team = dash[0] #Team engine = dash[1] #Engine except: team = plain(tr.contents[7]) if team == 'BMW Sauber': engine = 'BMW' elif team == 'Mercedes GP': engine = 'Mercedes' else: engine = plain(tr.contents[7]) tyre = 'Pirelli' dl = plain(tr.contents[11]) if dl == '': delta = None else: dparts = dl.split('.') seconds = int(dparts[0]) etc = Decimal(dparts[1]) / 1000 delta = Decimal(seconds + etc) #Delta r = Racer() r.en_first_name = first_name r.en_family_name = family_name qual = Result() qual.heat = Heat.objects.get(grandprix=q.grandprix, type=q.type) qual.position = pos qual.num = num qual.racer = Racer.objects.get(en_first_name=r.en_first_name, en_family_name=r.en_family_name) if team == 'RBR': qual.team = Team.objects.get(name='Red Bull') elif team == 'STR': qual.team = Team.objects.get(name='Toro Rosso') elif team == 'Mercedes GP': qual.team = Team.objects.get(name='Mercedes') else: qual.team = Team.objects.get(name=team) qual.engine = Engine.objects.get(name=engine) qual.tyre = Tyre.objects.get(name=tyre) qual.delta = delta qual.save() print pos, num, first_name, family_name, team, engine, tyre, delta
def test_space_between_words(self): data = 'hello, world!' expected = 'hello,%20world!' result = urlify(data) self.assertEqual(result, expected)
def test_no_spaces_in_string(self): data = 'helloworld!' result = urlify(data) self.assertEqual(result, data)