HTML - Prendere una parte specifica

di il
1 risposte

HTML - Prendere una parte specifica

Salve a tutti , mi chiamo Alfio e da poco mi sto cimentando con VB.net come primo compilatore.
Per iniziare avevo pensato di esercitarmi in programmini ed adesso come idea avrei bisogno di prendere una parte specifica di un html source che ho estratto , in particolare gli href e possibilmente anche i "Title"
----------------------------------------------------------------------------------
Questo e' il mio codice per l'estrazione :
Dim request As WebRequest = WebRequest.Create("https://www.youtube.com/results?search_query=test")
        Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
        Dim datastream As Stream = response.GetResponseStream
        Dim reader As New StreamReader(datastream)
        Dim strData As String = reader.ReadToEnd


        TextBox1.Text = strData
----------------------------------------------------------------------------------

Questa e' la parte html che vorrei prendere :
<a id="video-title" class="yt-simple-endpoint style-scope ytd-video-renderer" aria-label="QUANTO SEI INTELLIGENTE? Test di Intelligenza Completo (con Soluzioni) di Marco Ripà 6 mesi fa 6 minuti, 6 secondi 
1.211.901 visualizzazioni" href="/watch?v=VMHWljdOCrQ" title="QUANTO SEI INTELLIGENTE? Test di Intelligenza Completo (con Soluzioni)">
                QUANTO SEI INTELLIGENTE? Test di Intelligenza Completo (con Soluzioni)
              </a>
-----------------------------------------------------------------------------------

Se qualcuno può darmi consigli su come fare ciò oppure cosa studiare ne sarei davvero grato!

1 Risposte

  • Re: HTML - Prendere una parte specifica

    Salve Alfio96, anch'io ho avuto un problema simile anche se a me i href non servivano
    Eccoti le soluzioni:
    1) Sei vincolato dall'usare i WebRequest e magari in un'applicazione Console, allora puoi trovare sub stringhe da strData. Le varie funzioni della stringa ti saranno utili, come IndexOf() e Substring(). Ora sta a te continuare.
    Volendo puoi usare le Regular Expressions grazie alla classe System.Text.RegularExpressions.Regex però la soluzione è sempre sub stringhe di strData.

    2) Puoi stravolgere tutto e usare una variabile HtmlDocument dove i dati sono strutturati. La proprietà Links è la collezione dei tag <A> e ad ognuno basta usare la funzione GetAttribute() ed hai già tutto pronto. Ci sono dei però:
    Primo però: La variabile HtmlDocument (così come una HtmlElement) non ha costruttori e l’unica maniera è utilizzare un WebBrowser nell’interfaccia grafica la cui proprietà Document è proprio di tipo HtmlDocument. Quindi il codice si dividerebbe in 2:
    
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            WebBrowser1.Navigate("http://...")
    End Sub
    
    Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
            Dim doc As HtmlDocument = WebBrowser1.Document
            'analisi della pagina
    End Sub
    
    perché solo se la pagina è caricata, puoi estrarne i dati e l’unico modo per saperlo è con l’evento DocumentCompleted. (Anche qui continua te)
    Secondo però: Il codice così com’è può lanciare eccezioni perché qualsiasi pagina verrà analizzata. Sta a te decidere che fare quando sei offline o ottieni pagine errate come nei normali browser o la pagina non ha l’url che vuoi te.

    3) Via di mezzo tra la soluzione 1 e 2, consideri strData come xml invece di html ed usi una variabile XmlDocument:
    
    Dim strData As String = reader.ReadToEnd()
    Dim xmlDoc As New System.Xml.XmlDocument()
    xmlDoc.InnerXml = strData
    '...
    
    Con la funzione GetElementsByTagName("a") trovi i link. Purtroppo non c’è GetAttribute(), ma con un ciclo sulla proprietà Attributes di ogni <a> puoi trovare gli attributi giusti. Anche questo ha un però: il testo di strData deve essere xhtml ad esempio contenere: sì <img …/> e no <img …>
Devi accedere o registrarti per scrivere nel forum
1 risposte