mlg*_*g74 3 .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
Run Code Online (Sandbox Code Playgroud)
这有很多可能的原因.延迟的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
Run Code Online (Sandbox Code Playgroud)
我想您的浏览器可以为您提供有关实际请求标题的线索(例如Chrome开发者工具,Firebug).可以通过从http://www.mybrowserinfo.com/获取来快速比较两种设置.如果您有自己的网络服务器,只需查看日志即可.如果这不能帮助转储流量将是暴力选项.