【问题标题】:How do I grab particular google results with vb.net? to listbox如何使用 vb.net 获取特定的谷歌搜索结果?到列表框
【发布时间】:2012-12-18 14:17:52
【问题描述】:

我知道如何将 vb 程序放到 Google 上。我什至知道如何导航,但我不知道如何操纵结果。

基本上,我希望程序从 Google 获取搜索结果并将它们输出到列表框。因此,如果用户搜索汉堡,则搜索结果将输出到列表框。有谁知道如何做到这一点?

这是我目前的代码:

Public Class Form1

Dim look, retrieve As String

Private Sub Search_Click(sender As Object, e As EventArgs) Handles Search.Click
look = InputBox("What are you looking for?")
look = look.Replace(" ", "+")
Dim G1 As String = "http://www.google.co.uk/#hl=en&tbo=d&output=search&sclient=psy-ab&q="
WebBrowser1.Navigate(G1 + look)

retrieve = InputBox("What links do you want to retrieve?")

End Sub

End Class 

我知道使用 google api 更容易,但也慢很多。我过去曾使用过该 API,并且遇到过性能问题。我刚刚在另一个线程中看到了如何下载网站的源代码;很快。我只是不知道如何从下载的源中获取网址。这里有人对字符串操作有好处吗?

到目前为止的代码:

sourcecode = ((New Net.WebClient).DownloadString(G1 + look)) 

【问题讨论】:

标签: vb.net string search


【解决方案1】:

如果您研究 XPATH 并且不反对使用开源第三方工具,那么 HTML Agility Pack (Cose Examples) 应该是解析 html 的好工具。

另一种可能很痛苦的选择是将源 html 字符串转换为有效的 xml 文档,然后使用 VB 的 xml 名称空间对其进行解析。我在用于解析 youtube 播放列表的应用程序中完成了此操作。这种方法的问题是,在将其转换为 xml 文档之前,需要对 html 字符串进行一些手动清理。

最后,您可以尝试仅使用字符串方法来消化 html 字符串,但这很容易出错,并且在很大程度上取决于文档的结构。

无论如何,一旦您有了解析 html 的方法,当前在 Google 搜索结果中就有一个 ID 为“搜索”的 div。从纯字符串的角度来看,您可以在源字符串中搜索它:

dim searchTerm as string = "<div id=""search"""
dim searchLoc as integer = 0
searchLoc = sourceCode.indexOf(searchTerm)

一旦您知道搜索结果部分从哪里开始,您就可以首先开始搜索 "&lt;li class=""g""" 令牌,然后在其中搜索 "&lt;h3 class=""r""" 令牌。 h3 内部是结果文本所在的位置。您可能希望分别消费到第一个 &lt;/h3&gt;&lt;/li&gt; 以获取令牌。

获得此文本后,您需要通过搜索并删除 html 标记对其进行清理。您可以轻松地编写一个算法,通过循环访问关键字符的索引来仅使用链接文本。

重点是将其逐步分解成更小的部分,然后消化更小的部分。无论您如何处理它,您都将这样做。然而,使用某种解析器并利用 XPATH 选择器表达式的强大功能将比手动生成标记更容易。

纯字符串方式将是尝试完成此任务的最困难也是最慢的方式。我强烈建议您尝试使用某种形式的 HTML 解析器来解决此问题,否则您可能会在获得可行的解决方案之前发疯。

最后一点,您似乎在表单上使用了网络浏览器控件。您可以使用此控件及其相关类来解析它检索到的页面的 html。我以前做过这个,它不是最有效的网页抓取方式,但它可以很容易。查看 HTMLDocument 类中涉及此控件返回对象的方法。

【讨论】:

    猜你喜欢
    • 2015-12-29
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多