HTMLAgilityPack. La connessione di carico è chiusa su alcuni siti

.net html-agility-pack vb.net

Domanda

Ho il seguente codice che funziona su alcuni siti che ho provato a scansionare per informazioni, ma non funzionerà su un particolare sito che ho provato, e ottengo l'errore "La connessione sottostante è stata chiusa: la connessione è stata chiusa in modo imprevisto. " Perché questo dovrebbe funzionare su alcuni siti e non su altri? Se usato sul sito A, ad esempio, ottengo l'ultimo collegamento ipertestuale in div "wrapper". ma su un altro sito, ho solo una connessione chiusa. per favore aiuto.

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

Risposta accettata

Ci sono molte possibili ragioni per questo. Viene in mente un'esecuzione javascript differita o un tipo di switch browser arcaico. Potrebbe essere utile controllare le intestazioni delle richieste dei browser con quelle utilizzate in HtmlAgilityPack.

La prima cosa che farei è usare la stessa stringa user-agent:

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

Suppongo che il tuo browser possa darti un'idea dell'intestazione effettiva della richiesta (ad es. Chrome Developer Tools, Firebug). Un modo rapido per confrontare entrambe le impostazioni può essere fatto recuperando da http://www.mybrowserinfo.com/ . Se si dispone di un proprio server Web, è sufficiente visualizzare i registri. Se ciò non aiuta il dumping del traffico sarebbe l'opzione forza bruta.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché