I am trying to scrape data from this website. To be specific, I want to scrape all the data from the following:
var bilancio_tree = [{"slug": "pcox-quadro-2-11", "label": "Totale generale delle Entrate", "values": [{"2021": {"abs": 1659238.91, "pc": 3463.96432150313}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}], "children": []}, {"slug": "pcox-quadro-2-2", "label": "Entrate correnti di natura tributaria, contributiva e perequativa", "values": [{"2021": {"abs": 618720.93, "pc": 1291.69296450939}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}], "children": [{"slug": "pcox-quadro-2-2-16", "label": "Imposte,tasse e proventi assimilati", "values": [{"2021": {"abs": 461222.66, "pc": 962.886555323591}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-2-31", "label": "Compartecipazioni di tributi", "values": [{"2021": {"abs": 2231.31, "pc": 4.65826722338205}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-2-41", "label": "Fondi perequativi da Amministrazioni Centrali", "values": [{"2021": {"abs": 155266.96, "pc": 324.148141962422}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-2-51", "label": "Fondi perequativi dalla Regione o Provincia autonoma", "values": [{"2021": {"abs": 0.0, "pc": 0.0}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}]}, {"slug": "pcox-quadro-2-3", "label": "Trasferimenti correnti", "values": [{"2021": {"abs": 114907.44, "pc": 239.890271398747}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}], "children": [{"slug": "pcox-quadro-2-3-71", "label": "Trasferimenti correnti da Amministrazioni pubbliche -", "values": [{"2021": {"abs": 91755.54, "pc": 191.556450939457}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-3-81", "label": "Trasferimenti correnti da Famiglie", "values": [{"2021": {"abs": 0.0, "pc": 0.0}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-3-91", "label": "Trasferimenti correnti da Imprese", "values": [{"2021": {"abs": 23151.9, "pc": 48.3338204592902}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-3-101", "label": "Trasferimenti correnti da Istituzioni Sociali Private", "values": [{"2021": {"abs": 0.0, "pc": 0.0}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-3-111", "label": "Trasferimenti correnti dall'Unione europea e dal Resto del Mondo- previsione di cassa", "values": [{"2021": {"abs": 0.0, "pc": 0.0}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}]}, {"slug": "pcox-quadro-2-4", "label": "Entrate extratributarie", "values": [{"2021": {"abs": 98243.25, "pc": 205.100730688935}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}], "children": [{"slug": "pcox-quadro-2-4-131", "label": "Vendita di beni e servizi e proventi derivanti dalla gestione dei beni", "values": [{"2021": {"abs": 84043.78, "pc": 175.456743215031}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-4-141", "label": "Proventi derivanti dall'attivit\u00e0 di controllo e repressione delle irregolarit\u00e0 e degli illeciti", "values": [{"2021": {"abs": 1000.0, "pc": 2.08768267223382}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-4-151", "label": "Interessi attivi", "values": [{"2021": {"abs": 100.0, "pc": 0.208768267223382}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-4-161", "label": "Altre entrate da redditi da capitale", "values": [{"2021": {"abs": 0.0, "pc": 0.0}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-4-171", "label": "Rimborsi e altre entrate correnti", "values": [{"2021": {"abs": 13099.47, "pc": 27.3475365344468}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}]}, {"slug": "pcox-quadro-2-5", "label": "Entrate in conto capitale", "values": [{"2021": {"abs": 451082.56, "pc": 941.717244258873}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}], "children": [{"slug": "pcox-quadro-2-5-191", "label": "Tributi in conto capitale", "values": [{"2021": {"abs": 0.0, "pc": 0.0}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-5-201", "label": "Contributi agli investimenti", "values": [{"2021": {"abs": 316616.62, "pc": 660.99503131524}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-5-211", "label": "Altri trasferimenti in conto capitale", "values": [{"2021": {"abs": 123965.94, "pc": 258.801544885177}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-5-221", "label": "Entrate da alienazione di beni materiali e immateriali", "values": [{"2021": {"abs": 8500.0, "pc": 17.7453027139875}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-5-231", "label": "Altre entrate in conto capitale", "values": [{"2021": {"abs": 2000.0, "pc": 4.17536534446764}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}]}, {"slug": "pcox-quadro-2-6", "label": "Entrate da riduzione di attivita\u0300 finanziarie", "values": [{"2021": {"abs": 0.0, "pc": 0.0}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}], "children": [{"slug": "pcox-quadro-2-6-251", "label": "Alienazione di attivit\u00e0 finanziarie", "values": [{"2021": {"abs": 0.0, "pc": 0.0}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-6-261", "label": "Riscossione crediti di breve termine", "values": [{"2021": {"abs": 0.0, "pc": 0.0}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-6-266", "label": "Riscossione crediti di medio", "values": [{"2021": {"abs": 0.0, "pc": 0.0}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-6-271", "label": "Altre entrate per riduzione di attivit\u00e0 finanziarie", "values": [{"2021": {"abs": 0.0, "pc": 0.0}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}]}, {"slug": "pcox-quadro-2-7", "label": "Accensione prestiti", "values": [{"2021": {"abs": 522.42, "pc": 1.09064718162839}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}], "children": [{"slug": "pcox-quadro-2-7-291", "label": "Emissione di titoli obbligazionari", "values": [{"2021": {"abs": 0.0, "pc": 0.0}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-7-301", "label": "Accensione prestiti a breve termine", "values": [{"2021": {"abs": 0.0, "pc": 0.0}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-7-311", "label": "Accensione mutui e altri finanziamenti a medio lungo termine", "values": [{"2021": {"abs": 522.42, "pc": 1.09064718162839}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-7-321", "label": "Altre forme di indebitamento", "values": [{"2021": {"abs": 0.0, "pc": 0.0}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}]}, {"slug": "pcox-quadro-2-8", "label": "Anticipazioni da istituto tesoriere/cassiere", "values": [{"2021": {"abs": 100000.0, "pc": 208.768267223382}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}], "children": [{"slug": "pcox-quadro-2-8-336", "label": "Anticipazione da istituto tesoriere/cassiere", "values": [{"2021": {"abs": 100000.0, "pc": 208.768267223382}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}]}, {"slug": "pcox-quadro-2-9", "label": "Entrate per conto terzi e partite di giro", "values": [{"2021": {"abs": 275762.31, "pc": 575.704196242171}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}], "children": [{"slug": "pcox-quadro-2-9-351", "label": "Entrate per partite di giro", "values": [{"2021": {"abs": 200719.26, "pc": 419.038121085595}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}, {"slug": "pcox-quadro-2-9-361", "label": "Entrate per conto terzi", "values": [{"2021": {"abs": 75043.05, "pc": 156.666075156576}}, {"2022": {"abs": 0.0, "pc": 0.0}}, {"2023": {"abs": 0.0, "pc": 0.0}}]}]}];
I am trying to build a dataset of the following form (with all the variables listed above):
Totale generale delle Entrate Total | Totale generale delle Entrate PC |
---|---|
1659238.91 | 3463.96 |
Right now, I have the following script:
import requests
from bs4 import BeautifulSoup
import csv
import json
import re
URL = "https://openbilanci.it/armonizzati/bilanci/veglio-comune-bi/entrate/dettaglio?year=2021&type=preventivo"
r = requests.get(URL)
soup = BeautifulSoup(r.content, 'html.parser')
data = soup.find_all("script")[19].string
p = re.compile('var bilancio_tree = (.*?);')
m = p.match(data)
stocks = json.loads(m.groups()[0])
for stock in stocks:
print(stock)
But, it's not working. I'm new to using python for web scraping, any help would be much appreciated!
CodePudding user response:
Try:
import re
import json
import requests
import pandas as pd
URL = "https://openbilanci.it/armonizzati/bilanci/veglio-comune-bi/entrate/dettaglio?year=2021&type=preventivo"
r = requests.get(URL)
p = re.compile("var bilancio_tree = (.*?);")
data = p.search(r.text).group(1)
data = json.loads(data)
all_data = []
for d in data:
for v in d["values"]:
for kk, vv in v.items():
all_data.append([d["label"], "-", kk, vv.get("abs"), vv.get("pc")])
for c in d["children"]:
for v in c["values"]:
for kk, vv in v.items():
all_data.append(
[d["label"], c["label"], kk, vv.get("abs"), vv.get("pc")]
)
df = pd.DataFrame(all_data, columns=["label 1", "label 2", "year", "abs", "pc"])
print(df.head(10).to_markdown(index=False))
Prints:
label 1 | label 2 | year | abs | pc |
---|---|---|---|---|
Totale generale delle Entrate | - | 2021 | 1.65924e 06 | 3463.96 |
Totale generale delle Entrate | - | 2022 | 0 | 0 |
Totale generale delle Entrate | - | 2023 | 0 | 0 |
Entrate correnti di natura tributaria, contributiva e perequativa | - | 2021 | 618721 | 1291.69 |
Entrate correnti di natura tributaria, contributiva e perequativa | - | 2022 | 0 | 0 |
Entrate correnti di natura tributaria, contributiva e perequativa | - | 2023 | 0 | 0 |
Entrate correnti di natura tributaria, contributiva e perequativa | Imposte,tasse e proventi assimilati | 2021 | 461223 | 962.887 |
Entrate correnti di natura tributaria, contributiva e perequativa | Imposte,tasse e proventi assimilati | 2022 | 0 | 0 |
Entrate correnti di natura tributaria, contributiva e perequativa | Imposte,tasse e proventi assimilati | 2023 | 0 | 0 |
Entrate correnti di natura tributaria, contributiva e perequativa | Compartecipazioni di tributi | 2021 | 2231.31 | 4.65827 |
CodePudding user response:
You can try the next example
import requests
import re
import json
import pandas as pd
url='https://openbilanci.it/armonizzati/bilanci/veglio-comune-bi/entrate/dettaglio?year=2021&type=preventivo'
r = requests.get(url,headers = {'User-Agent':'Mozilla/5.0'})
data = json.loads(re.search(r'var bilancio_tree = (\[{.*}\])', r.text).group(1))
#print(data)
# with open('out.json','w') as f:
# f.write(json.dumps(data, indent=4))
lst1 = []
lst2 = []
for item in data:
for j in item['children']:
d={'lable':j['label']}
lst1.append(d)
for i in item['values']:
for v in i.values():
d2={
'Totale generale delle Entrate Total':v['abs'],
'Totale generale delle Entrate pc':v['pc']
}
lst2.append(d2)
[lst1.update(lst2) for lst1, lst2 in zip(lst1, lst2)]
#print(lst1)
df = pd.DataFrame(lst1)
print(df)
Output:
lable Totale generale delle Entrate Total Totale generale delle Entrate pc
0 Imposte,tasse e proventi assimilati 1659238.91 3463.964322
1 Compartecipazioni di tributi 0.00 0.000000
2 Fondi perequativi da Amministrazioni Centrali 0.00 0.000000
3 Fondi perequativi dalla Regione o Provincia au... 618720.93 1291.692965
4 Trasferimenti correnti da Amministrazioni pubb... 0.00 0.000000
5 Trasferimenti correnti da Famiglie 0.00 0.000000
6 Trasferimenti correnti da Imprese 114907.44 239.890271
7 Trasferimenti correnti da Istituzioni Sociali ... 0.00 0.000000
8 Trasferimenti correnti dall'Unione europea e d... 0.00 0.000000
9 Vendita di beni e servizi e proventi derivanti... 98243.25 205.100731
10 Proventi derivanti dall'attività di controllo ... 0.00 0.000000
11 Interessi attivi 0.00 0.000000
12 Altre entrate da redditi da capitale 451082.56 941.717244
13 Rimborsi e altre entrate correnti 0.00 0.000000
14 Tributi in conto capitale 0.00 0.000000
15 Contributi agli investimenti 0.00 0.000000
16 Altri trasferimenti in conto capitale 0.00 0.000000
17 Entrate da alienazione di beni materiali e imm... 0.00 0.000000
18 Altre entrate in conto capitale 522.42 1.090647
19 Alienazione di attività finanziarie 0.00 0.000000
20 Riscossione crediti di breve termine 0.00 0.000000
21 Riscossione crediti di medio 100000.00 208.768267
22 Altre entrate per riduzione di attività finanz... 0.00 0.000000
23 Emissione di titoli obbligazionari 0.00 0.000000
24 Accensione prestiti a breve termine 275762.31 575.704196
25 Accensione mutui e altri finanziamenti a medio... 0.00 0.000000
26 Altre forme di indebitamento 0.00 0.000000
27 Anticipazione da istituto tesoriere/cassiere NaN NaN
28 Entrate per partite di giro NaN NaN
29 Entrate per conto terzi NaN NaN