我有以下代码可以在我尝试抓取信息的某些网站上运行,但它不适用于我尝试过的特定网站,我收到错误"底层连接已关闭:连接意外关闭。"为什么这会在某些网站而不是其他网站上运行?例如,如果在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
答案 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/获取来快速比较两种设置。如果您有自己的网络服务器,只需查看日志即可。如果这无助于转储流量将是强力选项。