VB.NET HTML循环

CodeMonger

您好,我正在尝试为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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章