2016-12-31 80 views
1

你好,我正在嘗試爲Craiglist構建一個webscrapper。下面的代碼基於我正在嘗試做的很好。問題是我正在使用webrowser控件。我想傳遞更多的URL來解析數據。這意味着我將有一個列表說100個URL,但基於webrowser我不確定 我可以做我想做的。VB.NET HTML循環

我看着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 
+1

你知道這是違反Craiglist,他們皺着眉頭。因此,爲什麼***他們有一個API可以使用***來獲取這些東西。 – Codexer

+0

他們呢?我唯一看到的是RSS提要? – CodeMonger

+0

你會比html更好地檢查RSS feed。 –

回答

0

絕對使用HttpWebRequest在你的事業,你可以逃脫Web客戶端,然後加載信息到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不會像瀏覽器那樣呈現頁面,因爲瀏覽器會將網頁可能鏈接到的所有外部內容中的所有負載應用於該頁面。

+0

@亨利,看起來像一個選項不知道這個雖然:Dim div As HtmlNode = doc.DocumentNode.SelectSingleNode(「// * [@ class = \'result-Date \']」)我得到一個錯誤的其他信息:'// * [@ class = \'result-Date \']'有一個無效的標記。 – CodeMonger

+0

我認爲這是因爲我不習慣vb.net和字符串行爲在C#中的行爲不同,它可能需要爲'Dim div As HtmlNode = doc.DocumentNode.SelectSingleNode(「// * [@ class =」「result-日期「」]「)'在vb.net – Henry

+0

它仍然無法正常工作。你需要一個代理,否則這些請求將不會成功,因爲他們阻止了IP地址等等......當他們懷疑有人在竊取他們的數據時。他們也知道對他們認識的人採取法律行動。 – Codexer