0

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

我正在尝试制作一个程序,其中列出url's了谷歌搜索出现的前 50 个站点。我是 VB.net 的初学者,我知道我应该尝试一些更简单的方法,但我真的很想制作这个程序。

我的想法是获取 HTML,然后从那里获取网站的链接,但是当我查看 Google 搜索结果页面的 HTML 时,大部分链接都不存在。所以,我右键单击其中一个结果,发现url's可以在<cite>标签之间找到。

在此处输入图像描述

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

4

2 回答 2

0

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

于 2013-01-18T23:02:12.353 回答
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,直到您获得所需的内容(无需不断调试您的应用程序来测试您的更改)。


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

于 2013-01-19T00:11:18.880 回答