-
Notifications
You must be signed in to change notification settings - Fork 2
/
finnmarkslopet_resultatliste.py
74 lines (57 loc) · 1.77 KB
/
finnmarkslopet_resultatliste.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import re # Regular expressions
import sys
try:
# For Python 3.0 and later
from urllib.request import urlopen
except ImportError:
# Fall back to Python 2's urllib2
from urllib2 import urlopen
def to_minutes(datestring):
datestring = re.sub('\+','', datestring)
date_chunks = datestring.split()
minutes = 0
for c in date_chunks:
if 'd' in c:
minutes += int(c[:-1]) * 24 * 60
elif 'h' in c:
minutes += int(c[:-1]) * 60
elif 'min' in c:
minutes += int(c[:-3])
return minutes
def resultatliste(r_id):
results_url = root_url + '/race/results/results.jsp?rid=' + r_id
response = requests.get(results_url)
soup = BeautifulSoup(response.text)
header = soup.select('#rshead')[0].find_all('span')
raw_label = header[0].text
print('Parsing race #{} - {}'.format(r_id, raw_label))
results_list = soup.select('table tr')
results_list.pop(0)
winner_time = 0
for row in results_list:
columns = row('td')
current_row = {}
rank = columns[0].text
number = columns[1].text
name = columns[2].text
time = columns[5].text
minutes = to_minutes(time)
if not winner_time:
winner_time = minutes
else:
minutes += winner_time
print('{:>3}\t{:>4}\t{:<25}\t{:<9}\t{}'.format(rank, number, name, time, minutes))
# variables
root_url = 'http://www.finnmarkslopet.no'
# Main part
if len(sys.argv) == 2:
if sys.argv[1].isdigit():
resultatliste(sys.argv[1])
else:
raise ValueError("Invalid argument")
else:
raise ValueError("Please indicate the race number")