-
Notifications
You must be signed in to change notification settings - Fork 0
/
scraper.py
90 lines (73 loc) · 1.94 KB
/
scraper.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
86
87
88
89
90
import csv
import re
import requests
content = requests.get(
"https://www.enre.gov.ar/mapaCortes/datos/Datos_PaginaWeb.js"
).content.decode("utf8")
def parse_tipo(s):
if "media" in s.lower():
return "media"
elif "baja" in s.lower():
return "baja"
return "alta"
def parse_empresa(s):
return "Edesur" if "EDESUR" in s else "Edenor"
def _(s):
return s
def dospuntos(s):
return s.partition(": ")[-1].title().rstrip('"')
def number(s):
return "".join(_ for _ in s if _.isdigit())
nuevos = []
for incidente in re.findall("\[(\-.*?)\]", content):
incidente = incidente.split(",")
if len(incidente) == 11:
# corte alta/media
headers = {
"latitud": _,
"longitud": _,
"nn": _,
"tipo": parse_tipo,
"empresa": parse_empresa,
"partido": dospuntos,
"localidad": dospuntos,
"subestacion": dospuntos,
"alimentador": dospuntos,
"afectados": number,
"normalizacion estimada": dospuntos,
}
else:
headers = {
"latitud": _,
"longitud": _,
"nn": _,
"tipo": parse_tipo,
"empresa": parse_empresa,
"partido": dospuntos,
"localidad": dospuntos,
"afectados": number,
}
incidente = {
header: f(value.strip())
for (header, f), value in zip(headers.items(), incidente)
}
nuevos.append(incidente)
with open("cortes_enre.csv", "w") as file:
writer = csv.DictWriter(
file,
fieldnames=[
"latitud",
"longitud",
"nn",
"tipo",
"empresa",
"partido",
"localidad",
"subestacion",
"alimentador",
"afectados",
"normalizacion estimada",
],
)
writer.writeheader()
writer.writerows(nuevos)