您好,我正在尝试为Craiglist建立一个webscraper。下面的代码根据我要执行的操作效果很好。问题是我正在使用Webrowser控件。我想传递更多的URL来解析数据。意思是我将列出100个URL,但是基于网络浏览器,我不确定我可以做我想做的事情。
我调查了WebRequest,但是如果我执行webrequest,则似乎必须解析数据,就好像它是文本文件而不是html一样,在这里我无法以下面的方式获取HTML的属性。任何帮助将是巨大的。
Private Sub btnGetData_Click(sender As Object, e As EventArgs) Handles btnGetData.Click
clsScrape.ScrapeHTML(WebBrowser1, dgvData, "http://newyork.craigslist.org")
End Sub
Public Shared Sub ScrapeHTML(ByVal webBrows As WebBrowser, ByRef DataGridView1 As DataGridView, ByVal strCityLink As String)
'Change list box to datagridview to add rows. Will be passing multiple cities
For Each element As HtmlElement In webBrows.Document.All
Dim WebDate As String = ""
If element.GetAttribute("className") = "result-info" Then
'loop though the children element
For Each child As HtmlElement In element.Children
'if the dat is today capture loop else exit
If child.GetAttribute("className") = "result-date" Then
If child.InnerHtml = "Dec 30" Then
WebDate = child.InnerHtml
Else
Exit For
End If
End If
If child.GetAttribute("className") = "result-title hdrlnk" Then
Dim input As String = child.OuterHtml
Dim result As String() = input.Split("""")
Dim link As String = strCityLink & result(3)
Dim Title As String = child.InnerHtml
DataGridView1.Rows.Add(New String() {WebDate, Title, link})
End If
Next
End If
Next
End Sub
一定要使用HTTPWebRequest,因为您可以摆脱网络客户端的困扰,然后将该信息加载到HTMLAgilityPack中,然后可以提取所需的信息。
Dim oWebClient As New WebClient()
oWebClient.Headers.Set("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36")
Dim html = new HtmlAgilityPack.HtmlDocument()
html.LoadHtml(oWebClient.DownloadString(URL))
For Each node As HtmlAgilityPack.HtmlNode In _HTMLDocument.DocumentNode.SelectNodes("//*[@class=""result-date""]")
Next
您将找到数千个有关如何使用HTMLAgilityPack的示例。这只是为了让您入门,花一些时间来处理它。您可以轻松地完成您想要完成的工作。
另外请记住,WebRequest和WebClient是单个请求。Web浏览器会退出并构建整个网页(其中可能包含许多请求)。Webclient或webrequest不会像浏览器那样呈现页面,因为浏览器会将所有负载应用到该网页可能链接到的所有外部内容中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句