Соединение HTMLAgilityPack .load закрыто на некоторых сайтах

.net html-agility-pack vb.net

Вопрос

У меня есть следующий код, который работает на некоторых сайтах, которые я пытался очистить для информации, но он не будет работать на определенном сайте, который я пробовал, и я получаю сообщение об ошибке «Основное соединение было закрыто: соединение было неожиданно закрыто. " Почему это будет работать на некоторых сайтах, а не на других? Например, если используется на сайте A, я получаю последнюю гиперссылку в div-оболочке div. но на другом сайте я просто закрываю соединение. пожалуйста помоги.

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 Developer Tools, Firebug). Быстрый способ сравнить оба параметра можно сделать, извлекая из http://www.mybrowserinfo.com/ . Если у вас есть собственный веб-сервер, просто просмотрите журналы. Если это не поможет сбросить трафик, это будет опция грубой силы.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему