HTMLAgilityPack .load連接在某些網站上已關閉

.net html-agility-pack vb.net

我有以下代碼,它可以在我嘗試抓取信息的某些網站上運行,但它不適用於我嘗試過的特定網站,我收到錯誤“底層連接已關閉:連接意外關閉。 “為什麼這會在某些網站而不是其他網站上運行?例如,如果在siteA上使用,我將獲得div“wrapper”中的最後一個超鏈接。但在另一個網站上,我只是關閉連接。請幫忙。

Private Function getText() As String
    Dim web = New HtmlWeb()
    Dim html As HtmlDocument

    html = web.load("http://some-website.com")
    Dim lastLink = html.DocumentNode.SelectSingleNode("//div[@id='wrapper']//a[last()]")

    If lastLink IsNot Nothing Then
        Return lastLink.InnerHtml
    Else
        Return "nothing found"
    End If

End Function

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load        
    label4.Text = getText()
End Sub

一般承認的答案

有很多可能的原因。考慮延遲的javascript執行或古老的瀏覽器切換。檢查瀏覽器請求標頭與HtmlAgilityPack中使用的標頭可能很有用。

我要做的第一件事是使用相同的用戶代理字符串:

Private Function getText() As String
    Dim web = New HtmlWeb()
    web.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36"
    Dim html As HtmlDocument

    html = web.load("http://some-website.com")
    Dim lastLink = html.DocumentNode.SelectSingleNode("//div[@id='wrapper']//a[last()]")

    If lastLink IsNot Nothing Then
        Return lastLink.InnerHtml
    Else
        Return "nothing found"
    End If

End Function

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load        
    label4.Text = getText()
End Sub

我想您的瀏覽器可以為您提供有關實際請求標題的線索(例如Chrome開發者工具,Firebug)。可以通過從http://www.mybrowserinfo.com/獲取來快速比較兩種設置。如果您有自己的網絡服務器,只需查看日誌即可。如果這無助於轉儲流量將是蠻力選項。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因