DOMANDA VBA o altro linguaggio?

Betspo22

Nuovo Utente
7
0
Ciao a tutti, ho avviato un progetto personale di tipo statistico ed ho creato una cartella di lavoro excel che mi faciliti le operazione.

Fondamentalmente la cartella di lavoro è strutturata in una grande query (100k di righe) che contiene i dati di partenza, poi ho vari fogli che eseguono i calcoli statistici tramite degli if nidificati e matrici dinamiche sulle singole voci della query e poi ho un foglio finale che mette tutti questi dati assieme, col peso totale della cartella di lavoro di 40mb.

I dati di partenza vengono presi da vari siti internet (letteralmetne li copio e incollo col mouse in un'altra cartella di lavoro trovandomeli ovviamente disordinati, quindi in base a delle formule li "aggiusto" così da essere pronti per essere immessi nella query della cartella di lavoro principale).

La mia intenzione era usare il VBA per andare ad automatizzare questo processo di copia e incolla che mi richiede molto tempo, è possibile quindi far andare automaticamente excel sul sito internet di riferimento e pescare i dati che mi interessano?

So che sembra abbastanza elaborato e forse excel+vba non è neanche la soluzione migliore, ho usato excel perchê era l'unico applicativo che conoscevo quando ho iniziato questo progetto.
Visto che comunque dovrei imparare ad usare VBA da zero, forse mi conviene imparare direttamente un nuovo linguaggio di programmazione più adatto alla scopo, cosa ne dite? Nel caso cosa mi consigliate?

Se VBA va bene potreste anche indicarmi una guida o comunque un sito al quale fare affidamento per imparare?

Grazie in anticipo a tutti
 

Andretti60

Utente Èlite
6,440
5,091
Questo è un classico esempio per cui Python calza a pennello. Ti colleghi al sito, prendi i dati che vuoi e li salvi nel formato che vuoi (per esempio CVS che può essere facilmente importato su Excel o qualunque altro database.
Visto che parti da zero ritengo molto più utile imparare Python che poi lo puoi usare in qualsiasi piattaforma invece di VBA che è molto meno flessibile e funziona solo su Windows.
 

Betspo22

Nuovo Utente
7
0
Grazie mille per il consiglio, ho visto una guida su YT e con la libreria beautiful soap sembra molto semplice, non mi resta che studiare le varie funzioni!

Altra domanda ma lato hardware, se riuscissi a fare un web scraping come si deve la cartella di lavoro di excel avrebbe in input 10 volte i dati che ho ora, ma già adesso il file pesa 40mb e ci mette dei minuti ad aprirsi e ad elaborare i dati, questo è dovuto alla RAM o alla CPU?

Al momento sto lavorando su questo Lenovo Legion 5 (5800h, 16gb ram 3200mhz) comprato a fine anno scorso, e se il progetto procede come spero vorrei assemblare un pc fisso ad hoc.
 
Ultima modifica:

Andretti60

Utente Èlite
6,440
5,091
Excel non è veramente pensato per grossi progetti, 40MB sono nulla, il peso è tutto nella CPU. Se la tua query e la conseguente elaborazione sono troppo complesse considera migrare su un database personale (ossia non distribuito) tipo SQLite, per cui esistono librerie di interfaccia per ormai quasi tutti i linguaggi, Python incluso.
 

« MoMy »

Utente Èlite
1,529
771
Altra domanda ma lato hardware, se riuscissi a fare un web scraping come si deve la cartella di lavoro di excel avrebbe in input 10 volte i dati che ho ora
Sicuramente interpreto male io, ma la funzione ultima dello scraping è quella di salvare il dato di cui necessiti filtrando e scartando ciò che non ti serve. Quindi no!
 

Betspo22

Nuovo Utente
7
0
Sicuramente interpreto male io, ma la funzione ultima dello scraping è quella di salvare il dato di cui necessiti filtrando e scartando ciò che non ti serve. Quindi no!
Ti spiego, visto che ora mi sto prendendo i dati in input dai siti internet facendo copia e incolla, essendo una operazione noiosa ho scelto di prendere pochi dati; facendo scraping l'operazione è veloce quindi potrei scegliere di introdurre più variabili e quindi avere molti più dati
Post unito automaticamente:

Excel non è veramente pensato per grossi progetti, 40MB sono nulla, il peso è tutto nella CPU. Se la tua query e la conseguente elaborazione sono troppo complesse considera migrare su un database personale (ossia non distribuito) tipo SQLite, per cui esistono librerie di interfaccia per ormai quasi tutti i linguaggi, Python incluso.
Forse ti dirò un eresia non conoscendo i linguaggi, io ho prediletto excel anche perché mi ritorna particolarmente utile la formattazione condizionale e riesco a creare delle dashboard con i risultati che mi servono, potrei farlo anche con altri linguaggi?

SQLite a quanto so serve a gestire i database, se ne creassi uno con i dati derivanti dallo scraping con python potrei avere una facilitazione nelle analisi in excel?
(Uso soprattutto matrici dinamiche e formule di tipo statistico)
 
Ultima modifica:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Python è la scelta migliore, e come dice Andretti utilizzando SQLite, che è comodo e facile da gestire e da portare anche su altri pc.

Con un db relazionale farai ricerche ben più complesse e su una mole di dati ben più ampia.
Con Python potrai anche crearti uno script che porta i dati in CSV, e poi manipolati come meglio credi. Ci sono anche librerie in Python che ti permettono di creare e "plottare" dei grafici.

E considera che i 40MB di un file Excel conterranno parecchio overhead (non mi viene in italiano...) dovuto alla formattazione del file (usa XML internamente).

Se smanetti con Python vedrai che ti ritroverai a fare analisi statistiche usando quello, visto che è di norma uno dei linguaggi utilizzati con maggior frequenza.

La difficoltà più grande che vedo è prelevare le pagine internet e parsarle, pulendo ciò che non ti serve. Una prima cosa a cui dovrai pensare è lo schema del tuo db, che tabelle e che colonne creare.
 

Andretti60

Utente Èlite
6,440
5,091
Per web scraping, aggiungo la libreria BeautifulSoup

Piccola nota about web scraping: occorre farlo con attenzione in quanto inviare troppe richieste in tempi brevi può bloccare il sito, si può venire automaticamente bannati a vita o più semplicemente la richiesta viene negata (molti siti richiedono una identificazione di non essere un bot). Occorre mandare le richieste simulando una modalità “umana”, ossia inserendo dei ritardi casuali tra una richiesta e l’altra.
Alcuni siti non permettono di scaricare i propri dati, altri lo permettono con limitazioni, quindi occorre prima leggere bene le informazioni sul sito.
Ok, mi rimangio la parola: non è proprio una “piccola” nota ;)
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Normalmente le richieste vengono fatte anche con un user agent diverso, per sembrare reali e non automatiche.
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,948
11,581
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
Per web scraping, aggiungo la libreria BeautifulSoup
...
Piccola nota about web scraping: occorre farlo con attenzione
OT
hai qualche libreria da suggerire da utilizzare da applicazioni Java?
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
  • Mi piace
Reazioni: BAT

Betspo22

Nuovo Utente
7
0
Per web scraping, aggiungo la libreria BeautifulSoup

Piccola nota about web scraping: occorre farlo con attenzione in quanto inviare troppe richieste in tempi brevi può bloccare il sito, si può venire automaticamente bannati a vita o più semplicemente la richiesta viene negata (molti siti richiedono una identificazione di non essere un bot). Occorre mandare le richieste simulando una modalità “umana”, ossia inserendo dei ritardi casuali tra una richiesta e l’altra.
Alcuni siti non permettono di scaricare i propri dati, altri lo permettono con limitazioni, quindi occorre prima leggere bene le informazioni sul sito.
Ok, mi rimangio la parola: non è proprio una “piccola” nota ;)
Grazie per il consiglio, infatti ho visto la beautiful soap in un tutorial sullo scraping con python e sembra quella adatta a me, l'altra consigliata da @giammo82 invece non la conosco.

Comunque non penso ci sia questo problema visto che i dati che devo prendere sono pubblici quindi non ho ho bisogno di fare richieste di accesso oppure login.

Unico "problema" è che non tutti i dati sono visualizzati automaticamente nel codice html dell link di riferimento, bensì c'è un tasto da cliccare ed una volta fatto appaiono gli huperlink che mi servono.
Credo sia possibile automatizzare questo "click" del mouse ma non so come 😅.

Metterei il link della pagina ed un esempio per spiegare meglio, ma credo che non sia consentito dalle regole del forum.
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!