Condividi:        

Importare da web dati specifici

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Importare da web dati specifici

Postdi BG66 » 26/02/21 06:32

Ciao a tutti.
Ho iniziato a leggere qualcosina su power query...quindi in attesa di stressarvi appena inizierò a farmi del male creando "qualcosa di follemente incasinato"... :lol, inizio nel chiedervi, se è possibile importare solamente alcuni dati specifici da un sito web (principalmente borsa italiana ma non escludo anche un secondo riferimento?
In pratica:
1) Inserisco a mano nella colonna B della tabella il codice isin.
2) Ricerca manuale della pagina su sito finanziario ( prevalentemente borsa italiana ma potrebbe esserci anche qualcun altro.
3) Lancio macro e carica alcuni dei dati presenti nel sito e precisamente:
- Nome titolo
- Valuta
-Tasso prossima cedola
- Data ultima cedola pagata
- Data Scadenza
- Ultimi 5 prezzi

https://www.dropbox.com/scl/fi/my5dv37tktztokcmkwzwv/Import_forum.xlsm?dl=0&rlkey=kse23bdlh64uw3ezfon4hrxc0
PS La ricerca manuale ipotizzata nel punto 2 è perchè non ho idea se è fattibile ( o vale la pena) farla in automatico al lancio della macro

Grazie in anticipo.
Gene
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 320
Iscritto il: 20/08/16 07:44

Sponsor
 

Re: Importare da web dati specifici

Postdi BG66 » 26/02/21 07:11

A margine aggiungo l'obiettivo finale che mi sono posto nell'imparare power query:
un foglio di lavoro specifico che selezionando il codice isin dinamicamente mi aggiorna i dati.


Per ora non riesco neanche ad unire due tabelle!! :oops:

Gene
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 320
Iscritto il: 20/08/16 07:44

Re: Importare da web dati specifici

Postdi Anthony47 » 26/02/21 12:46

Non sono un conoscitore delle PowerQuery, ne' mi pare lo siano gli altri frequentatori di questo forum; quindi non ti aiutero' (per incapacita') nell'apprendimento di questo strumento.
Mi limito quindi a suggerimenti basati su approccio tradizionale.
1) Se tu avessi Office 365 allora potresti sfruttare il tipo dati "Azioni" per accedere a una serie di dati finanziari e di borsa abbastanza vario.
Ad esempio:
Immagine

I dati in colonna D sono stati caricati come 4AIM, A2A, ENEL, etc; formattando i dati come "Azionari" (formato evidenziato nel circolo) sono stati espansi come li vedi.
A questo punto hai accesso a una serie di dettagli (oltre 20), sia di tipo societario che finanziario facilmente assemblabili. Non so se trovi parametri quali prox cedola, ultima cedola, scadenza, che tra l'altro sono propri di alcuni titoli, non di tutti)

2) Oppure puoi usare la tecnica di "scraping" di siti web, usando la libreria mshtml.tlb per aprire la pagina web, cercare tramite i tag html una certa voce e importarla.
Sfortunatamente ogni sito ha bisogno di un approccio diverso, e la stabilita' di queste soluzioni dipendono dalla creativita' del gestore del sito (piu' e' alta e piu' spesso la struttura del sito viene modificata, richiedendo la revisione dil criteri di selezione).

A titolo di esempio, lavorando sul sito http://www.borsaitaliana.it
-Dato un foglio contenente in colonna A, da A2 verso il basso, il codice del titolo
-questo codice estrae dal sito le voci Descrizione, valore di Apertura, valore e ora di Ultimo scambio (altri valori possono essere estratti analogamente)
Codice: Seleziona tutto
#If VBA7 Then       '!!! ON  TOP  OF  THE  VBA  MODULE   !!!!
    Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If


Sub ScanTitoli()
Dim IE As Object, myF As Object, myG As Object, I As Long
'
For I = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    myUrl = "https://www.borsaitaliana.it/borsa/azioni/scheda/" & Cells(I, 1) & ".html"            'L'url della pagina da accedere
    If InStr(1, myUrl, "http", vbTextCompare) = 1 Then
        'Se url valido, apre tramite InternetExplorer...
        If IE Is Nothing Then Set IE = CreateObject("InternetExplorer.Application")
        With IE
            .Visible = True         '... rendi visibile IE
            .navigate myUrl         '....vai all'url
            Sleep 100               '
            Do While .Busy: DoEvents: Sleep (20): Loop              'Attesa not busy
            Do While .readyState <> 4: DoEvents: Sleep (20): Loop   'Attesa document
        End With
        Sleep (100)                 'Stabilizza
        'Cerca le voci di interesse
        Set myF = IE.document.getElementsByClassName("w-999")
        Cells(I, "B").Value = myF(0).getElementsByTagName("a")(0).innerText         'Descrizione
        Set myF = IE.document.getElementsByClassName("m-table")
        Cells(I, "C").Value = CSng(myF(0).getElementsByTagName("td")(1).innerText)  'Apertura
        Set myG = myF(3).getElementsByTagName("td")
        Cells(I, "D").Value = CSng(myG(myG.Length - 2).innerText)                   'ultimo, valore
        Cells(I, "E").Value = myG(myG.Length - 3).innerText                         'ultimo, orarioi
        'etc
        'etc
    End If
Next I
'Chiusura
On Error Resume Next
IE.Quit
Set IE = Nothing
End Sub

La macro usa metodi e proprieta' resi disponibile dalla libreria mshtml.tlb (gli stessi peraltro usati da PowerQuery), per accedere alla pagina web del titolo, cercare tramite i tag e gli attributi html le voci di interesse e prelevarne il valore.

Il file dimostrativo e' scaricabile qui:
https://www.dropbox.com/s/85xypv4c29ndm ... .xlsm?dl=0
(Foglio1: tipo dati Borsa; Foglio2: macro)

Per "esaminare" il codice html di una pagina web devi aprire la pagina, puntare l'elemento di interesse e poi tramite il menu di tasto dx usi il comando Esamina (Edge) o Ispeziona (Chome).

Ti segnalo anche che parecchie funzioni di calcolo di dati finanziari sono presenti in Google Spreadsheet (tramite la funzione GOOGLEFINANCE), piu' la possibilita' di estrarre da siti web molti dati tramite la funzione IMPORTXML, usando l' xPath dell'informazione desiderata.
Ad esempio
-se in A2 e' inserito l'url della pagina web di un titolo, es https://www.borsaitaliana.it/borsa/azio ... 33417.html
-allora questa formula restituira' il valore dell'ultimo scambio
=IMPORTXML(A2;"//*[@id=""fullcontainer""]/main/section/div[7]/article[1]/div/div[4]/table/tbody/tr[1]/td[8]/span/strong")

L'Xpath si puo' ottenere sempre tramite il processo di Esamina (o Ispeziona); poi, sul codice sorgente si seleziona l'informazione e tramite menu di tastodx si sceglie Copia /Copia xPath
L'xPath va poi inserito tra virgolette nelle formula, ed eventuali Virgolette presenti vanno raddoppiate.
Infatti nella formula di prima, l'xPath restituito era:
//*[@id="fullcontainer"]/main/section/div[7]/article[1]/div/div[4]/table/tbody/tr[1]/td[1]/span

Non sono riuscito ad avere lo stesso effetto tramite la funzione Excel FILTRO.XML (disponibile da Office 2013)

Quanto al mondo delle PowerQuery, segnalo con piacere il sito dell'amico "klingklang": https://www.mondobi.it/

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19228
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Importare da web dati specifici

Postdi BG66 » 26/02/21 22:08

Ciao Anthony,
grazie come al solito per la tua disponibilità.
Vorrei capire le possibili ricadute sulla mia attività lavorativa della conoscenza di Power Query.
Quindi, ho scelto di riproporre integralmente questa richiesta nel forum di klingklang.
Per non lasciare adito a dubbi mi sono:
1) "autodenunciato" su possibile crossposting :lol:
2) mi sono presentato con un titolo esplicativo "Mi manda Anthony" :)

A presto
Gene
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 320
Iscritto il: 20/08/16 07:44

Re: Importare da web dati specifici

Postdi Anthony47 » 27/02/21 01:33

mi sono presentato con un titolo esplicativo "Mi manda Anthony" :)
Sono sicuro che ti aiuteranno ...lo stesso
:D
Avatar utente
Anthony47
Moderatore
 
Post: 19228
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Importare da web dati specifici":


Chi c’è in linea

Visitano il forum: Nessuno e 100 ospiti