Risolto VBA e Web Scraping

Mark87

Utente abituale
21 Aprile 2018
223
18
Milano
Excel 2010
0
Ho ripetuto questa routine:

Visual Basic:
Sub ImportaTitoli()
'dichiarazione variabili
    Dim IE As Object
    Dim Doc As Object
    Dim HTMLAs As Object
    Dim HTMLA As Object

    Set IE = CreateObject("InternetExplorer.Application") 'variabile Internet Explorer
    
    IE.navigate "https://www.borsaitaliana.it/borsa/etf/scheda/IE00B1TXK627.html?lang=it" 'naviga pagina
    Do While IE.Busy: DoEvents: Loop 'Attesa not busy
    Do While IE.readyState <> 4: DoEvents: Loop 'Attesa documento

    Set HTMLAs = Doc.GetElementsByClassName("strong") 'collezione di elementi di tipo Class
    Sheets("IH20").Range("D3") = HTMLAs(0).innerText 'scrivi nella cella D3 del foglio IH20 il contenuto dell'elemento

    IE.Quit 'chiusura IE

    'eliminazione variabili
    Set IE = Nothing
    Set Doc = Nothing
    Set HTMLAs = Nothing
End Sub
Il codice non va per due motivi:

1) La classe di elemento è sbagliata?
2) Il sito Internet è strano? Mi sembra corretto però.
4) Hos bagliato il codice di lavoro del foglio. E' IH20.

Non capisco il problema. Qualche suggerimento?
 

Mark87

Utente abituale
21 Aprile 2018
223
18
Milano
Excel 2010
0
Potresti allegare il file?
Vorrei capire come funziona e cosa fa
Non per essere poco efficace però è inutile che ti allego il file Excel è soltanto molto incasinato. Ho fatto il debug, comunque, e ti dico che i problemi sono i seguenti:


Poi in effetti la riga che mi da problemi è la seguente:

Visual Basic:
Sheets("IH20").Range("D3") = HTMLAs(0).innerText 'scrivi nella cella D3 del foglio IH20 il contenuto dell'elemento
Io credo che il problema principale sia il sito Web che è diverso rispetto al sito Web prcedente e fa conflitto con qualche variabile con la modalità con la quale Rubik ha fatto il codice. Perchè mi sono spostato a "prelevare" dati da un altro sito Web ed è entrato in conflitto. Credo che sia questo il problema.
 

Mark87

Utente abituale
21 Aprile 2018
223
18
Milano
Excel 2010
0
Cels @Cels il file è lo stesso delle altre discussioni ';)
Eh sì per quello non l'ho messo. Non cambierebbe tantissimo, secondo me. E' sempre lo stesso il codice. Il problema secondo me è da ricercare nel conflitto tra l'HTML della pagina Web di ora con le variabili e il codice di Rubik. Io ho "intuito" questo. Poi, con esattezza faccia conflitto è un'altra storia. Per questo ho bisogno del vostro supporto.
 

Rubik72

Excel/VBA Expert
Supermoderatore
Expert
12 Dicembre 2015
5.392
83
47
Cosenza
Excel 2016
165
Un saluto a tutti.
  1. Non hai impostato la variabile Document; MartelloTesta
  2. Sei sicuro che nel sito esista l'oggetto di Class Strong? (solitamente in HTML il suffisso STRONG si usa per impostare il carattere grassetto/importante)
 
  • Like
Reactions: Mark87

Mark87

Utente abituale
21 Aprile 2018
223
18
Milano
Excel 2010
0
Un saluto a tutti.
  1. Non hai impostato la variabile Document; MartelloTesta
  2. Sei sicuro che nel sito esista l'oggetto di Class Strong? (solitamente in HTML il suffisso STRONG si usa per impostare il carattere grassetto/importante)
Quindi devo stabiliare la variabile

Visual Basic:
Set Doc = IE.document 'variabile documento
Comunque questa variabile non l'ho settata per tutti gli altri siti. Cambiando sito Web (come struttura di sito intendo) la devi definire di nuovo?

Per l'oggetto di class strong così mi sembra che si chiami strong proprio. Confermi dall'immagine?

 

Mark87

Utente abituale
21 Aprile 2018
223
18
Milano
Excel 2010
0
Si Rubik ho capito cosa intendi. Beh mi sono lasciato fregare però dall'immagine a sinistra esce bello grande strong. Però si effettivamente a destra esce scritto strong dopo quello che hai scritto tu, quindi hai ragione, come sempre d'altronde.

Per la variabile

Visual Basic:
Set Doc = IE.document 'variabile documento
Non penso che è corretto setterla. Ho messo tutto insieme nel codice e non è andato, ancora. C'è qualche altro errore?
 

Mark87

Utente abituale
21 Aprile 2018
223
18
Milano
Excel 2010
0
Anzi, forse va però c'è un solo problema:

Excel non riconosce la virgola e passa da 38,73 a 38735.

A questo punto devo cambiare da virgola a punto per leggere il numero in maniera corretta. Come si fa? :(
 

Mark87

Utente abituale
21 Aprile 2018
223
18
Milano
Excel 2010
0
Replace(expression, find, replace, [ start, [ count, [ compare ]]])


Beh Rubik stavolta mi vuoi far ragionare un minimo. Ci ho provato e questa è la soluzione che ho dato.

Sostituisce la virgola con i punti partendo da 1. Non se se il codice funzione in questo modo. Ovviamente metto questa riga di codice in questo modo:


Visual Basic:
Set HTMLAs = Doc.GetElementsByClassName("t-text -size-lg -black-warm-60") 'collezione di elementi di tipo Class
    Sheets("IH20").Range("D3") = HTMLAs(0).innerText 'scrivi nella cella D3 del foglio IH20 il contenuto dell'elemento
A = Replace(A, ",", ".", 1)
 

Mark87

Utente abituale
21 Aprile 2018
223
18
Milano
Excel 2010
0
Mi rispondo da solo. Non funziona! :(

Aveo pensato anche ad una soluzione del genere:

Visual Basic:
replace (Sheets("IH20").Range("D3") = HTMLAs(0).innerText; ","; ".")
 

Mark87

Utente abituale
21 Aprile 2018
223
18
Milano
Excel 2010
0
Mi rispondo da solo non funziona nemmeno questo. Comunque io penso che grosso modo sia questa la procedura però magari devo creare una variabile prima di replace del tempo:

Visual Basic:
A=Sheets("IH20").Range("D3") = HTMLAs(0).innerText
B= replace (A; ","; ".")
 

Mark87

Utente abituale
21 Aprile 2018
223
18
Milano
Excel 2010
0
Che poi ho sbagliato perchè il separatore non è ; ma , quindi tutto al più poteva essere:

Visual Basic:
A = Sheets("IH20").Range("D3") = HTMLAs(0).innerText
    B = Replace(A, ",", ".")
 

Mark87

Utente abituale
21 Aprile 2018
223
18
Milano
Excel 2010
0
Volevo chiamare il valore che viene piazzato in D3 del foglio di lavoro IH20 e poi utilizzare la funziona replace. Il ragionamento che è dietro è questo.

Suggerimenti?
 

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
18.842
113
Como
2011MAC 2016WIN
353
Ok,
prova così
Visual Basic:
Sub ImportaTitoli()

    Dim IE As Object
    Dim Doc As Object
    Dim HTMLAs As Object
    Dim HTMLA As Object
    Dim risultato As Double
    
    Set IE = CreateObject("InternetExplorer.Application")
    
    IE.navigate "https://www.borsaitaliana.it/borsa/etf/scheda/IE00B1TXK627.html?lang=it"
    IE.Visible = False
    
    Do While IE.Busy: DoEvents: Loop
    Do While IE.readyState <> 4: DoEvents: Loop
    
    Set Doc = IE.document
    
    Set HTMLAs = Doc.GetElementsByClassName("t-text -size-lg -black-warm-60")
    risultato = HTMLAs(0).innerText
    Sheets("IH20").Range("D3") = Replace(risultato, ",", ".")
    
    IE.Quit
    
    Set IE = Nothing
    Set Doc = Nothing
    Set HTMLAs = Nothing
    
End Sub
 
  • Like
Reactions: Mark87

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!