这是我在这里发表的第一篇文章。我之前使用过这个网站,最后决定开户。
我正在尝试制作一个程序,列出Google搜索出现的前50个网站中的url's
。我是VB.net的初学者,我知道我应该尝试一些更容易的东西,但我真的想做这个程序。
我的想法如何实现这一点是为了获取HTML然后从那里获取到网站的链接,但是当我查看Google搜索结果页面的HTML时,大多数链接都不在那里。因此,我右键单击其中一个结果,发现可以在url's
标记之间找到<cite>
。
我的问题是:
如何将每个元素的HTML转换为字符串?
答案 0 :(得分:0)
假设您只关注提取<cite>
和</cite>
之间的内容,您可以通过拆分<cite>
然后从每个项目中移除</cite>
来解析字符串。您还可以从每个项目中删除<b>
和</b>
。从索引1到数组上限的项应该有你的链接。
答案 1 :(得分:0)
使用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,直到您得到您正在寻找的内容(无需不断调试应用程序来测试您的更改)。< / p>
如果您愿意,可以下载实现此代码的功能样本:SearchToListView