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を使用しましたが、パフォーマンスの問題が発生しました。別のスレッドで、Webサイトのソースをダウンロードする方法を見たところです。かなり早く。ダウンロードしたソースからURLを取得する方法がわかりません。ここに文字列操作が得意な人はいますか?

これまでのコード:

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

1 に答える 1

0

XPATH を調べて、オープン ソースのサード パーティ ツールの使用に反対しない場合は、HTML Agility Pack ( Cose Examples ) が html を解析するための優れたツールであるはずです。

面倒な別のオプションは、ソース html 文字列を有効な xml ドキュメントに変換し、VB の xml 名前空間を使用して解析することです。YouTube プレイリストの解析に使用するアプリケーションでこれを行いました。このアプローチの問題点は、HTML 文字列を xml ドキュメントに変換する前に、手動で少しクリーニングする必要があることです。

最後に、文字列メソッドのみを使用して 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 を解析できます。以前にこれを行ったことがありますが、これは Web をスクレイピングする最も効率的な方法ではありませんが、非常に簡単です。このコントロールがオブジェクトを返すことに関係するメソッドについては、HTMLDocumentクラスを調べてください。

于 2012-12-18T16:06:17.490 に答える