VB.net extrae enlaces de búsqueda de google usando HtmlAgilityPack

google-search html-agility-pack vb.net

Pregunta

Ahora he actualizado mi código como una prueba. Quiero enumerar todas las URL que tienen la palabra index.php pero también muestra otras cosas.

Aquí está mi código de trabajo:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim webClient As New System.Net.WebClient
    Dim WebSource As String = webClient.DownloadString("http://www.google.com/search?lr=&cr=countryCA&newwindow=1&hl=fil&as_qdr=all&biw=1366&bih=667&tbs=ctr%3AcountryCA&q=index.php&oq=index.php&gs_l=serp.12..0l10.520034.522335.0.525032.9.9.0.0.0.0.497.3073.1j1j2j0j5.9.0....0...1c.1.25.serp..5.4.884.J4smY262XgY")
    RichTextBox1.Text = WebSource

    ListBox1.Items.Clear()


    Dim htmlDoc As New HtmlAgilityPack.HtmlDocument()
    htmlDoc.LoadHtml(WebSource)

    For Each link As HtmlNode In htmlDoc.DocumentNode.SelectNodes("//cite")

        If link.InnerText.Contains("index.php") Then
            ListBox1.Items.Add(link.InnerText)
        End If

    Next

End Sub

la salida esperada solo debe ser sitios web que tengan index.php, como esto:

http://www.site1.com/index.php
http://www.site2.com/index.php
http://www.site3.com/index.php
http://www.site4.com/index.php
http://www.site5.com/index.php

Pero el problema es que solo se detiene hasta que no se incluyan otras partes del enlace index.php.

por ejemplo, la url completa es

http://www.site5.com/index.php?test_test=test&test

el programa solo muestra

http://www.site5.com/index.php

o habría roto puntos como

http://www.site5.com/index.php...test....test

Respuesta aceptada

Yo usaría Html Agility Pack para extraer los enlaces de la siguiente manera

Dim links As New List(Of String)()
Dim htmlDoc As New HtmlAgilityPack.HtmlDocument()
htmlDoc.LoadHtml(WebSource)
For Each link As HtmlNode In htmlDoc.DocumentNode.SelectNodes("//a[@href]")
    Dim att As HtmlAttribute = link.Attributes("href")
    If att.Value.Contains("/forums/") Then
        links.Add(att.Value)
    End If
Next

Si es el resultado de búsqueda de Google, intente algo como abajo

For Each link As HtmlNode In htmlDoc.DocumentNode.SelectNodes("//cite")
    If link.InnerText.Contains("index.php") Then
        links.Add(link.InnerText)
    End If
Next


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué