【问题标题】:Search results into listbox?搜索结果进入列表框?
【发布时间】:2013-01-18 21:57:01
【问题描述】:

这是我在这里的第一篇文章。之前用过这个网站,最后决定做个账号。

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

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

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

【问题讨论】:

  • 你真的应该考虑安装HTMLAgilityPack来简化解析HTML的过程。

标签: html vb.net search listbox


【解决方案1】:

使用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

【讨论】:

  • 你摇滚!它完全按照我想要的方式工作。非常感谢!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 2011-10-14
    • 1970-01-01
    相关资源
    最近更新 更多