Estrarre dati da pagina web

di il
20 risposte

20 Risposte - Pagina 2

  • Re: Estrarre dati da pagina web

    …….. sparito ?????

  • Re: Estrarre dati da pagina web

    Ciao…scusa è stata una settimana incasinata

    Il codice che avevo postato funziona e mi crea tabella in excel 

    Credevo tu avessi trovato un'altra strada…

  • Re: Estrarre dati da pagina web


    Analizzando la pagina MHTML che hai inviato mi sono accorto che ci sono dentro dei dati che purtroppo le RegularExpression non riescono a riconoscere, per cui ho optato per HTML Agility Pack.

    Vedi tu se vuoi mantenere il programma usando Selenium, tieni conto che ogni volta che esce un'aggiornamento di Google Chrome dovrai anche scaricarti il drivere EXE relativo e aggiornarlo, per cui se è un programma per te ok, ma se è installato dal cliente ti continuerà a chiamare per dirti che si è bloccato.

    Se pensi di utilizzare anche tu HTML Agility Pack ti posso dare il sorgente che ho scritto e poi lo modifichi come vuoi tu

  • Re: Estrarre dati da pagina web

    Il programma è per utilizzarlo nella nostra società 

    Se hai voglia di condividerlo me lo studio e vedo le differenze….così imparo una cosa nuova

    Grazie per l'aiuto che mi hai dato!!

  • Re: Estrarre dati da pagina web

    Eccoti qui il codice
    Tieni presente che con HTML Agility Pack le ricerche devi farle usando XPath
    Per qualsiasi chiarimento chiedi pure
    Tieni conto che con questo codice non dipendi più dalla versione di Chrome, non devi più attendere che si carichi e dovrebbe quindi essere molto più veloce

            ' carico il file MHTML
            Dim mhtml = My.Computer.FileSystem.ReadAllText("c:\vbn\hap\pagina_unica.mhtml") ' <<<<<<< TODO: correggere cartella e nome file
    
            ' trasformo MHTML in HTML
            Dim html = mhtml.Replace("=3D", "=").Replace("=" & vbCrLf, "").Replace(vbCrLf, "")
            Dim startIndex As Integer = html.IndexOf("<html", StringComparison.OrdinalIgnoreCase)
            Dim endIndex As Integer = html.IndexOf("</html>", StringComparison.OrdinalIgnoreCase) + 7
            html = html.Substring(startIndex, endIndex - startIndex)
    
            ' lo carico su HTML Agility Pack
            Dim htmlDoc = New HtmlAgilityPack.HtmlDocument
            htmlDoc.LoadHtml(html)
    
            ' mi estraggo la tabella principale
            Dim mainTable = htmlDoc.DocumentNode.SelectSingleNode("//div[@class='BaseTable']")
    
            ' mi estraggo la riga "header"
            Dim header = mainTable.SelectSingleNode(".//div[@class='BaseTable__header-row']")
    
            ' estraggo le colonne
            Dim headerCols = header.SelectNodes(".//div[@class='BaseTable__header-column BaseTable__header-column--align-center']")
    
            ' creo il file CSV
            ' <<<<<<<< TODO: cambiare cartella e nome file CSV
            Dim fp = New IO.StreamWriter(My.Computer.FileSystem.SpecialDirectories.Desktop & "\result.csv", False, New System.Text.UTF8Encoding(False)) ' UTF-8 without BOM
    
            ' aggiungo due colonne vuote
            fp.Write(",")
    
            ' faccio il ciclo per leggere le intestazioni
            For Each headerCol As HtmlAgilityPack.HtmlNode In headerCols
                Dim nomeColonna = headerCol.InnerText
                ' scrivo intestazione
                fp.Write("," & nomeColonna)
            Next
            fp.WriteLine("") ' fine riga "header"
    
            ' ora mi leggo le righe
            Dim baseTableRows = mainTable.SelectNodes(".//div[@class='BaseTable__row']")
    
            For Each baseTableRow As HtmlAgilityPack.HtmlNode In baseTableRows
    
                ' mi estraggo le colonne
                Dim baseTableCols = baseTableRow.SelectNodes(".//div[contains(@class,'BaseTable__row-column')]")
    
                ' estraggo i dati
                For x = 0 To baseTableCols.Count - 1
                    If x = 0 Then ' prima colonna, divido le due righe
                        Dim multiRiga = baseTableCols(x).SelectNodes(".//div[@data-dd-action-name='<MASKED-DATA>']")
                        Dim testo1 = multiRiga(0).InnerText
                        Dim testo2 = multiRiga(1).InnerText
                        ' lo scrivo nel file CSV
                        fp.Write(testo1 & "," & testo2)
                    Else
                        Dim testo = baseTableCols(x).InnerText
                        ' lo scrivo nel file CSV
                        fp.Write("," & testo)
                    End If
                Next
                fp.WriteLine("") ' fine riga
    
            Next
    
            fp.Close()
    
  • Re: Estrarre dati da pagina web

    Grazie!!

Devi accedere o registrarti per scrivere nel forum
20 risposte