-
Notifications
You must be signed in to change notification settings - Fork 0
/
zajem_in_obdelava_podatkov.py
85 lines (65 loc) · 2.81 KB
/
zajem_in_obdelava_podatkov.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
75
76
77
78
79
80
81
82
83
84
85
import re
import orodja
# url strani s podatki
prehrana_frontpage_url = 'https://www.studentska-prehrana.si/sl/restaurant'
# datoteka s stranjo
frontpage_filename = 'prehrana_stran.html'
vzorec_bloka = re.compile(
r'<div class="row restaurant.*?(data-naslov.*?<div class="pull-right margin-right-10">.*?)</div>',
flags=re.DOTALL
)
vzorec_restavracije = re.compile(
r'data-cena="(?P<cena_obroka>.*?)"\s*?'
r'data-doplacilo="(?P<doplacilo>.*?)"'
r'\s*?data-posid="(?P<id>\d{4})".*?'
r'<a href="/sl/restaurant/Details/\d*?">\s*(?P<ime>.*?)\s*?</a>.*?<small>\s*?<i>'
r'(?P<naslov>.*,\s\d{4}\s'
r'(?P<kraj>.*?))</i>',
flags=re.DOTALL
)
vzorec_lastnosti = re.compile(
r'alt=".*?"\s*?title="(?P<lastnost>.*?)"',
flags=re.DOTALL
)
def izlocimo_lastnosti(blok):
lastnost = vzorec_lastnosti.findall(blok)
return lastnost
# Izločimo zajete podatke iz bloka za restavracijo
def izlocimo_podatke(blok):
restavracija = vzorec_restavracije.search(blok).groupdict()
restavracija['cena_obroka'] = float(restavracija['cena_obroka'].replace(',','.'))
restavracija['doplacilo'] = float(restavracija['doplacilo'].replace(',','.'))
restavracija['id'] = int(restavracija['id'])
restavracija['lastnosti'] = izlocimo_lastnosti(blok)
return restavracija
def izlocimo_gnezdene_podatke(restavracije):
lastnosti = []
for restavracija in restavracije:
for lastnost in restavracija.pop('lastnosti'):
lastnosti.append({'restavracija': restavracija['id'], 'lastnost': lastnost})
lastnosti.sort(key=lambda lastnost: (lastnost['restavracija'], lastnost['lastnost']))
return lastnosti
# tu sem zaj spremenila finditer v findall
def izlocimo_restavracije_s_strani(url):
podatki = []
orodja.shrani_spletno_stran(url, frontpage_filename)
vsebina = orodja.vsebina_datoteke(frontpage_filename)
for blok in vzorec_bloka.findall(vsebina):
podatki.append(izlocimo_podatke(blok))
return podatki
restavracije = []
for restavracija in izlocimo_restavracije_s_strani(prehrana_frontpage_url):
restavracije.append(restavracija)
restavracije.sort(key=lambda restavracija: restavracija['id'])
orodja.zapisi_json(restavracije, 'obdelani-podatki/restavracije.json')
lastnosti = izlocimo_gnezdene_podatke(restavracije)
orodja.zapisi_csv(
restavracije,
['id', 'ime', 'naslov', 'kraj', 'cena_obroka', 'doplacilo'], 'obdelani-podatki/restavracije.csv'
)
orodja.zapisi_csv(lastnosti, ['restavracija', 'lastnost'], 'obdelani-podatki/lastnosti.csv')
vsebina = orodja.vsebina_datoteke(frontpage_filename)
# vsebina = orodja.vsebina_datoteke(frontpage_filename)
# for blok in vzorec_bloka.findall(vsebina):
# if vzorec_restavracije.search(blok) == None:
# print(blok)