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合法吗? 是的,了解原因