0

我知道如何让 vb 程序进入 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)) 
4

1 回答 1

0

如果您研究 XPATH 并且不反对使用开源第三方工具,那么 HTML Agility Pack(Cose 示例)应该是解析 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)

一旦您知道搜索结果部分的开始位置,您就可以先开始搜索"<li class=""g"""标记,然后再搜索其中的标记"<h3 class=""r"""。在里面h3是结果文本的位置。你会想消费到第一个</h3></li>分别获得令牌。

一旦你有了这个文本,你需要通过搜索它并删除 html 标签来清理它。您可以通过循环遍历关键字符的索引来轻松编写一个算法来仅使用链接文本。

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

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

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

于 2012-12-18T16:06:17.490 回答