Пример #1
0
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 + '@' + ','
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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()
Пример #5
0
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()
Пример #6
0
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
Пример #7
0
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)
Пример #8
0
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()
Пример #9
0
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
Пример #10
0
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
Пример #11
0
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
Пример #12
0
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
Пример #13
0
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 == '&amp;':
                    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 &amp; Whitney':
                engine = 'Pratt & Whitney'
            elif engine == 'K&#252;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
Пример #14
0
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)
Пример #15
0
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
Пример #16
0
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
Пример #17
0
 def test_string_with_padded_spaces(self):
     data = '   hello, world!   '
     expected = 'hello,%20world!'
     result = urlify(data)
     self.assertEqual(result, expected)
Пример #18
0
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 &amp; Whitney":
                    engine = "Pratt & Whitney"
                elif engine == "K&#252;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
Пример #19
0
def get_fuckin_name(list):
    f = ''
    for i in list[0:-1]:
        f = f + urlify(i).capitalize() + ' '
    return f    
Пример #20
0
 def test_empty_string(self):
     data = ''
     result = urlify(data)
     self.assertEqual(result, data)
Пример #21
0
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
Пример #22
0
 def test_space_between_words(self):
     data = 'hello, world!'
     expected = 'hello,%20world!'
     result = urlify(data)
     self.assertEqual(result, expected)
Пример #23
0
 def test_no_spaces_in_string(self):
     data = 'helloworld!'
     result = urlify(data)
     self.assertEqual(result, data)