Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Estrazione dati da HTML dinamici

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

Estrazione dati da HTML dinamici

Postdi replymonster » 07/02/18 12:57

Buongiorno,

Ultimamente sto chiedendo spesso il vostro aiuto per chiudere un problema riguardo estrazione di dati riguardo farmaci per il completamento di un indice per una organizzazione benevole (io lavoro a scopo no profit) e per questo apprezzo moltissimo il vostro contributo prezioso. Detto ciò, il problema dovrebbe essere molto simile ad un post in precedenza soltanto con una piccola differenza. Vi ho chiesto un aiuto nell'estrarre dati da una pagina web riguardo dei farmaci, problema risolto alla perfezione in questo post http://www.pc-facile.com/forum/viewtopic.php?f=26&t=109381, adesso però la componente di estrazione dati rimane più o meno la stessa ma mentre prima le pagine erano poche, e quindi le cambiavo a mano, ora sono diventato molte di più.

Nello specifico io ho una lista di circa 1000 termini per i quali dovrei trovare i farmaci associati tramite questo motore di ricerca:
https://www.torrinomedica.it/farmaci/ricercadbfarmaci/formIN.asp

Per ogni termine è possibile che ci siano dei farmaci associati come ad esempio per Diabete come possiamo visualizzare qui:
https://www.torrinomedica.it/farmaci/ricercadbfarmaci/RisultatiIN.asp?IN1=diabete&IN2=&IN3=
Oppure è possibile che non ci sia alcun farmaco associato come ad esempio per Acalasia:
https://www.torrinomedica.it/farmaci/ricercadbfarmaci/RisultatiIN.asp?IN1=acalasia&IN2=&IN3=

Ho notato che l'URL è esettamente lo stesso, ma cambia solo in una parte finale come evidenziato qui sotto:
https://www. torrinomedica.it/farmaci/ricercadbfarmaci/RisultatiIN.asp?IN1=acalasia&IN2=&IN3=
https://www. torrinomedica.it/farmaci/ricercadbfarmaci/RisultatiIN.asp?IN1=acetonemia&IN2=&IN3=
https://www. torrinomedica.it/farmaci/ricercadbfarmaci/RisultatiIN.asp?IN1=acne&IN2=&IN3=
https://www. torrinomedica.it/farmaci/ricercadbfarmaci/RisultatiIN.asp?IN1=acidosi+metabolica&IN2=&IN3=

Quindi pensavo che con un codice basti sostituire quella parte dell'URL con una lista di parole che do come input, e poi procedere con il download dei farmaci, se presenti (da notare che acidosi metabolica, una parola composta da più parole, genera il link con il + e non so se questo sia un problema). Fatemi inoltre sapere se è necessario che vi dia il file con i termini di input, oppure queste informazioni sono sufficienti.

Il risultato sperato sarebbe avere coppie di associazioni per riga semplicemente con l'input ed il nome dei farmaci se presenti, ad esempio per Ciglia:
Ciglia | Azzalure
Ciglia | Blefarolin
Ciglia | Bocouture
Ciglia | Oftasteril
Ciglia | Vistabex
Ecco la pagina web per la conferma https://www.torrinomedica.it/farmaci/ricercadbfarmaci/RisultatiIN.asp?IN1=ciglia&IN2=&IN3=
Mi rendo conto che cosi la lista potrebbe essere estremamente lunga e quindi non so se conviene dividere il download delle informazioni (diabete ha oltre 600 medicinali associati ad esempio, anche se probabilmente è un caso limite).

Spero di essere stato chiaro e per qualsiasi considerazione scrivete pure.

Grazie ancora per il vostro tempo e buona serata.
replymonster
Utente Junior
 
Post: 17
Iscritto il: 06/11/17 11:45

Sponsor
 

Re: Estrazione dati da HTML dinamici

Postdi Anthony47 » 08/02/18 00:36

Questi esercizi richiedono solo tempo e pazienza, e (come vedi) non creano nell'utente nessuna capacita' di autosostentamento...

Con un po' di tempo e di pazienza ho impostato questo codice, da inserire in un Modulo standard del vba di un file nuovo:
Codice: Seleziona tutto
Dim IE As Object, dSh As Worksheet          '<<< Rigorosamente in testa al modulo

Sub GetTabbbSub(mySrc As String)
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=109381
Dim myBUrl As String, myUrl As String, K As Long, J As Long
Dim myColl, myCollA, myCollS, myItm, myS

myUrl = "https://www.torrinomedica.it/farmaci/prontuario/Prontuario_Aa-Ac.asp"
If IE Is Nothing Then Set IE = CreateObject("InternetExplorer.Application")
myBUrl = "https://www.torrinomedica.it/farmaci/ricercadbfarmaci/RisultatiIN.asp?IN1=ZC2ZC&IN2=&IN3="
myUrl = Replace(myBUrl, "ZC2ZC", Replace(mySrc, " ", "+", , , vbTextCompare), , , vbTextCompare)
ReNav:
With IE
    .navigate myUrl
    .Visible = True
'Stop                '*** VEDI Testo
    Do While .Busy: DoEvents: Loop    'Attesa not busy
    Do While .readyState <> 4: DoEvents: Loop 'Attesa documento
End With
'
myStart = Timer  'attesa addizionale
Do
    DoEvents
    If Timer > myStart + 2 Or Timer < myStart Then Exit Do
Loop


'Leggi le tabelle SUL FOGLIO ATTIVO
''Sheets("Classifica Home").Select
'Cells.Clear
Set myColl = IE.document.getElementsByClassName("vc")
If myColl.Length > 0 Then
    For J = 0 To myColl.Length - 1
        dSh.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = mySrc
        dSh.Cells(Rows.Count, 1).End(xlUp).Offset(0, 1) = Replace(myColl(J).innerText, Chr(160), " ", , , vbTextCompare)
    Next J
Else
    Exit Sub
End If
K = K + J + 1
myUrl = myUrl & "&StartingRecord=" & K
GoTo ReNav
'
'Stop
'
'Chiusura IE
'IE.Quit
'Set IE = Nothing
End Sub


Sub call1()
Dim I As Long

Set dSh = Sheets("Foglio2")

For I = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    If Cells(I, 1) <> "" Then
        Call GetTabbbSub(Cells(I, 1))
    End If

Next I
On Error Resume Next
IE.Quit
Set IE = Nothing

End Sub

Poi su Foglio1, da A2 verso il basso, scrivi le chiavi di ricerca.

Quando sei pronto, tenendo attivo Foglio1, lanci la Sub call1:
-premi Alt-F8, scegli CALL1 dall'elenco di macro disponibili, premi Esegui.

Verra' creato in Foglio2 un elenco con
-la chiave di ricerca (col A)
-le N risposte disponibili

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 15649
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Estrazione dati da HTML dinamici

Postdi replymonster » 08/02/18 15:26

Fuonziona alla perfezione, come sempre !!

Grazie ancora Anthony, buona serata.
replymonster
Utente Junior
 
Post: 17
Iscritto il: 06/11/17 11:45


Torna a Applicazioni Office Windows


Topic correlati a "Estrazione dati da HTML dinamici":


Chi c’è in linea

Visitano il forum: marcoc, Marius44 e 23 ospiti