搜索结果到列表框?

时间:2013-01-18 21:57:02

标签: html vb.net search listbox

这是我在这里发表的第一篇文章。我之前使用过这个网站,最后决定开户。

我正在尝试制作一个程序,列出Google搜索出现的前50个网站中的url's。我是VB.net的初学者,我知道我应该尝试一些更容易的东西,但我真的想做这个程序。

我的想法如何实现这一点是为了获取HTML然后从那里获取到网站的链接,但是当我查看Google搜索结果页面的HTML时,大多数链接都不在那里。因此,我右键单击其中一个结果,发现可以在url's标记之间找到<cite>

enter image description here

我的问题是:
如何将每个元素的HTML转换为字符串?

2 个答案:

答案 0 :(得分:0)

假设您只关注提取<cite></cite>之间的内容,您可以通过拆分<cite>然后从每个项目中移除</cite>来解析字符串。您还可以从每个项目中删除<b></b>。从索引1到数组上限的项应该有你的链接。

答案 1 :(得分:0)

使用HTML Agility Pack可以大大简化解析HTML的过程。

这是一个非常基本的实现,可以满足您的需求:

Private Sub DoSearch(query As String)
    Dim wc = New WebClient()
    wc.DownloadStringAsync(New Uri("http://google.com/search?q=" + query))
    AddHandler wc.DownloadStringCompleted, AddressOf ParseResults
End Sub

Private Sub ParseResults(sender As Object, e As DownloadStringCompletedEventArgs)
    LvResults.Items.Clear()

    If e.Error IsNot Nothing Then
        MsgBox(e.Error.Message, MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly)
        Exit Sub
    End If

    Dim htmlDoc As New HtmlAgilityPack.HtmlDocument()
    htmlDoc.LoadHtml(e.Result)

    For Each node In htmlDoc.DocumentNode.SelectNodes("//h3[@class='r']/a")
        Dim item As New ListViewItem(node.InnerText)
        item.SubItems.Add(CleanURL(node.Attributes("href").Value))
        LvResults.Items.Add(item)
    Next

    LvResults.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent)
End Sub

Private Function CleanURL(url As String) As String
    url = url.Replace("/url?q=", "")
    If url.Contains("&") Then url = url.Split("&"c)(0)
    Return url
End Function

成功使用HTML Agility Pack的诀窍是知道正确的XPath将产生正确的结果,但这对于初次使用的用户来说可能很棘手。

因此,我强烈建议您下载HAP Testbed以帮助您测试和试验多个XPath,直到您得到您正在寻找的内容(无需不断调试应用程序来测试您的更改)。< / p>


如果您愿意,可以下载实现此代码的功能样本:SearchToListView