2012-12-18 39 views
0

我知道如何使VB程序去谷歌。我甚至知道如何瀏覽,但我不知道如何操縱結果。如何用vb.net抓取特定的谷歌搜索結果?到列表框中

基本上我希望程序抓住從谷歌的搜索結果,並將其輸出到一個列表框。因此,如果用戶搜索漢堡包,則搜索結果將輸出到列表框。有誰知道如何做到這一點?

這裏是我到目前爲止的代碼:

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 

我知道它是更容易使用谷歌的API,但它也慢了很多。我以前使用過API,並且看到了性能問題。我剛剛在另一個主題中看到如何下載網站的源代碼;很快。我只是不知道如何從下載的源代碼抓取網址。有沒有人在這裏使用字符串操作?到目前爲止

代碼:

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

請確保您不要嘗試使用正則表達式:http://stackoverflow.com/a/1732454/264607 – BlackICE

回答

0

如果你看看XPath和並不反對使用開源的第三方工具,在HTML敏捷性包(Cose Examples)被認爲是用來解析HTML一個偉大的工具。

另一種選擇,即可以是一個痛苦,是對HTML源字符串轉換成有效的XML文檔,然後使用VB的XML命名空間解析它。我在一個我用來分析YouTube播放列表的應用程序中完成了這項工作。這種方法的問題是需要手動清理html字符串,然後才能將其轉換爲xml文檔。

最後你可以嘗試只用字符串的方法來消化HTML字符串,但是這將是容易出錯,再次將很大程度上取決於文檔的結構。

無論什麼時候,一旦你有你的解析HTML的方法,目前在谷歌搜索結果有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類。