VB.net извлекает ссылки из поиска Google с помощью HtmlAgilityPack

Теперь я обновил свой код в качестве теста. Я хочу перечислить все URL-адреса, в которых есть слово index.php, но он также отображает другие вещи.

Вот мой рабочий код:

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

ожидаемый результат должен быть только веб-сайтами, на которых есть index.php, например:

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

Но проблема в том, что он останавливается только до тех пор, пока index.php не включает другие части ссылки.

например, полный URL-адрес

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

программа показывает только

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

или у него были бы сломанные точки, как

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

person Marc Intes    schedule 15.08.2013    source источник


Ответы (1)


Я бы использовал Html Agility Pack для извлечения ссылок, как показано ниже.

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

если это результат поиска Google, попробуйте что-то вроде ниже

For Each link As HtmlNode In htmlDoc.DocumentNode.SelectNodes("//cite")
    If link.InnerText.Contains("index.php") Then
        links.Add(link.InnerText)
    End If
Next
person Damith    schedule 15.08.2013
comment
Это работает большое спасибо. Но я хочу получить ссылки из результатов поиска Google. с чего начать? - person Marc Intes; 15.08.2013
comment
проверьте это nullskull.com/a/10402928/ - person Damith; 15.08.2013
comment
теперь у меня есть небольшое представление о HtmlAgilityPack. Пожалуйста, проверьте мой обновленный код выше. В настоящее время у меня проблемы с использованием поиска Google. - person Marc Intes; 15.08.2013
comment
теперь он отображает ссылки, но они неполные. у них сломанные точки. например www.website.com...index.php.... - person Marc Intes; 15.08.2013