Соскребание данных в «var» внутри <script> с веб-страницы

Я пытаюсь собрать данные с этого сайта. Чтобы быть конкретным, я хочу очистить все данные из следующего:

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}}]}]}];
        

Я пытаюсь построить набор данных следующего вида (со всеми перечисленными выше переменными):

Общая сумма поступлений Всего Totale generale delle Entrate PC 1659238,91 3463,96

Прямо сейчас у меня есть следующий скрипт:

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)

Но это не работает. Я новичок в использовании python для очистки веб-страниц, любая помощь будет очень признательна!

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Пытаться:

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))

Отпечатки:

метка 1 этикетка 2 год пресс ПК Общая сумма делле Энтрате - 2021 1.65924e+06 3463,96 Общая сумма делле Энтрате - 2022 0 0 Общая сумма делле Энтрате - 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 proofti assimilati 2021 461223 962,887 Entrate correnti di natura tributaria, contributiva e perequativa Imposte, tasse e proofti assimilati 2022 0 0 Entrate correnti di natura tributaria, contributiva e perequativa Imposte, tasse e proofti assimilati 2023 0 0 Entrate correnti di natura tributaria, contributiva e perequativa Сравнение наград 2021 2231.31 4,65827

Большое спасибо. Есть ли способ включить дочерние элементы меток? Например, в этом наборе выходных данных отсутствует IMPOSTE,TASSE E PROVENTI ASSIMILATI COMPARTECIPAZIONI DI TRIBUTI, FONDI PEREQUATIVI DA AMMINISTRAZIONI CENTRALI, FONDI PEREQUATIVI DALLA REGIONE O PROVINCIA AUTONOMA.

Pepa 01.12.2022 23:52

Вы можете попробовать следующий пример

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)

Вывод:

                               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

Другие вопросы по теме