Estrapolare valori dal web



  • Estrapolare valori dal web
    di Textomb data: 12/04/2015 20:41:24

    Salve ragazzi,
    mi sono imbattutto in una problematica per me nuova ed inesplorata.
    dovrei prendere, tramite VBA, il valore riferito al numero delle famiglie censite in quel Comune e presente nella sezione statistiche di quel sito web che ho inserito nella variabile sWeb e riportarla nella mia brava tabella Excel..
    Sono riuscito a scrivere la porzione di codice qui sotto. Ma non riesco ad andare avanti.
    Ho capito che mi interessa la classe "Principali valori" del codice HTML ma ora come proseguo..? Come faccio ad estrapolare il n. 1.820 che è quello che mi serve
    confido nel Vostro aiuto...
     
    Sub EstraiDati()
      Dim ie As Object, Ele As Object
      Dim ie_Element As Object
      Dim nLoops As Long
      Const sWeb As String = "accatitipi : / / www.comuni-italiani.it/061/004/statistiche/"
      
      Set ie = CreateObject("InternetExplorer.Application")
      
      With ie
        .Silent = True
        .navigate sWeb
        .Visible = False
        Do While .busy Or .ReadyState <> 4
          DoEvents
        Loop
        
        For Each Ele In ie.document.all
            If Ele.classname = "itit" Then Debug.Print Ele.innertext
        Next
    End With
    End Sub
    



  • di azzeccagarbugli (utente non iscritto) data: 13/04/2015 12:42:47

    Cit. Salve ragazzi ...

    Grazie per "ragazzo" ; sai, alla mia età ...

    Venendo alla tua richiesta, potresti provare questo Codice.

    Considera che il Codice, strutturato come ora, cancella tutti i Dati presenti nel foglio nel quale viene lanciato; quindi, se nel foglio di lavoro ci sono Dati che non devono essere cancellati, dovrai utilizzare un foglio d'appoggio.

    Poi, se il Codice necessita di qualche "aggiustamento", possiamo vedere assieme.

    Solo una precisazione, la Variabile "Auto" dovrà contenere l'indirizzo completo; questo non sono riuscito a farlo (mi viene segnalata sempre l'impossibilità di inserire l'indirizzo completo), ma questo, molto probabilmente è dovuto ad una mia scarsa conoscenza delle regole.
     
    Option Explicit
    Sub WEB()
    Dim Pop As Long
    Dim Auto As String, Comune As String
        Cells.Clear
        Range("A1").Select
    Application.ScreenUpdating = False
        Auto = "URL;//www.comuni-italiani.it/061/004/statistiche/recenti.html"
    
            With ActiveSheet.QueryTables.Add(Connection:=Auto, Destination:=Range("$A$2"))
                .WebSelectionType = xlEntirePage
                .Refresh BackgroundQuery:=False
            End With
        Pop = Cells(18, 5)
        Cells.Clear
        [A1] = "Popolazione del Comune di Arienzo: "
        [B1] = Pop
        [B1].NumberFormat = "#,##0 ""Abitanti"""
        Cells.Columns.AutoFit
    Application.ScreenUpdating = True
    End Sub
    



  • di Textomb data: 13/04/2015 17:58:39

    ciao azzeccagarbugli... (che nome che ti sei scelto)
    ti ringrazio molto per la dritta.
    In effetti non era ciò che cercavo ma, indirettamente mi hai portato sulla buona strada.
    Alla fine ho scelto una via intermedia, probabilmente più articolata, ma ugualmente efficace.
    lo considero risolto.
    alla prossima.



  • di Textomb data: 13/04/2015 18:02:45

    dimenticavo la spunta del risolto...



  • di azzeccagarbugli (utente non iscritto) data: 13/04/2015 18:28:22

    Cit. ciao azzeccagarbugli... (che nome che ti sei scelto)
    Il Nome non l'ho scelto io; l'ha scelto "Alessandro ... Manzoni (Fermo e Lucia, poi, Promessi sposi)".

    Credo sarebbe interessante conoscere la tua soluzione; potrebbe interessare qualche altro Utente.




  • di Textomb data: 13/04/2015 19:07:44

    Come dicevo la routine è venuta un pò diversa nella logica e nella struttura.
    Sono certo che potrà farsi in modo molto più efficace e più semplice. Ma a me è venuta così.
    sostanzialmente cerco per i primi nove comuni della lista, rispetto al dato che mi serve, la sua posizione nella pagina web (offsettop e offsetleft) e, non appena la trovo la sparo nel mio foglio nel range A1 e seguenti...
     
    Sub EstrapolaValori()
        Dim ie As Object, Ele As Object
        Dim ie_Element As Object
        Dim sWeb As String
        Dim w As Byte
      
      Set ie = CreateObject("InternetExplorer.Application")
        
            For w = 1 To 9
                sWeb = "h t t p : //www.comuni-italiani.it/061/00" & w & "/statistiche/recenti.html"
                With ie
                    .Silent = True
                    .navigate sWeb
                    .Visible = False
                    Do While .busy Or .ReadyState <> 4
                      DoEvents
                    Loop
                End With
        
                For Each Ele In ie.document.all
                    If Ele.offsettop < 320 And Ele.offsettop > 315 And Ele.offsetleft < 385 And Ele.offsetleft > 375 Then
                        Range("a" & w).Value = CInt(Replace((Ele.innertext), ".", ""))
                        Range("a" & w).NumberFormat = "#,#"
                    End If
                Next
                
            Next
        
    End Sub