일부 사이트에서 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

수락 된 답변

거기에는 여러 가지 이유가있을 수 있습니다. 지연된 자바 스크립트 실행이 염두에 두거나 고풍스러운 브라우저 전환이 발생합니다. 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 개발자 도구, 방화범 소리)에 대한 단서를 제공한다고 가정합니다. 두 설정을 비교하는 빠른 방법은 http://www.mybrowserinfo.com/ 에서 가져 와서 수행 할 수 있습니다. 자신 만의 웹 서버를 가지고 있다면 로그를보십시오. 이것이 트래픽을 덤핑하는 데 도움이되지 않는다면 무차별 대항 옵션이 될 것입니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.