HTMLAgilityPack .load连接在某些网站上已关闭

时间:2014-05-23 19:45:14

标签: .net vb.net html-agility-pack

我有以下代码可以在我尝试抓取信息的某些网站上运行,但它不适用于我尝试过的特定网站,我收到错误"底层连接已关闭:连接意外关闭。"为什么这会在某些网站而不是其他网站上运行?例如,如果在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

1 个答案:

答案 0 :(得分:8)

有很多可能的原因。延迟的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/获取来快速比较两种设置。如果您有自己的网络服务器,只需查看日志即可。如果这无助于转储流量将是强力选项。