0

HTMLAgilityPack을 사용하여 HTML 페이지를 구문 분석하고 있습니다. 그러나 어떤 점에서 나는 틀린 데이터 (이 특별한 경우에는 이미지)를 분석하려고하는데, 그 이유는 분명하지 않습니다.VB.Net에서 HTMLAgilitypack의 오류 방지

Private Sub parseHtml(ByVal content As String, ByVal url As String) 
    Try 
     Dim contentHash As String = hashGenerator.ComputeHash(content, "SHA1") 
     Dim doc As HtmlDocument = New HtmlDocument() 

     doc.Load(New StringReader(content)) 

     Dim root As HtmlNode = doc.DocumentNode 
     Dim anchorTags As New List(Of String) 

     For Each link As HtmlNode In root.SelectNodes("//a") 
      cururl = link.OuterHtml 
      If link.Attributes("href") Is Nothing Then Continue For 
      If Uri.IsWellFormedUriString(link.Attributes("href").Value, UriKind.Absolute) Then 
       urlQueue.Enqueue(link.Attributes("href").Value) 
      Else 
       Dim myUri As New Uri(url) 
       urlQueue.Enqueue(myUri.Scheme & "://" & myUri.Host & link.Attributes("href").Value) 
      End If 
     Next 
    Catch ex As Exception 
     MsgBox(ex.Message, MsgBoxStyle.Critical, "Error (parseHtml(" & url & "))") 
    End Try 
End Sub 

내가 오류는 다음과 같습니다

'System.NullReferenceException' 이 Webcrawler.exe 객체 참조에서 발생 유형의 첫 번째 예외는 아닌 개체의 인스턴스로 설정합니다. 내용에

내가 구문 분석하려고 :

내가 ޥ + : 80 ×

내용이 있는지 여부를 확인하는 방법 ' parse-able '오류를 방지하기 위해 구문 분석하기 전에?

지금은 오류 팝업을 만드는 이미지이지만 (x) html이 아닌 것으로 생각됩니다. 사전 흐름 위대한 사회 :

답변

2

에서

덕분에 당신은 반환 된 데이터를 분석하기 전에 반환 content-type 헤더를 확인해야합니다.

HTML 페이지의 경우 text/html이어야하며 XHTML은 application/xhtml+xml입니다.

+0

와우. 이것은 대단합니다. 나는 아직 그것을 테스트하지 않았지만, 나는이 질문과 내가 묻지 않은 또 다른 질문에 당신이 대답했다고 생각한다! 내 Webrequest의 응답 유형과 내용 유형을 확인하는 방법을 궁금해했고 그 방향으로 나를 지적했다고 생각합니다. 지금 테스트 해보세요! – PeeHaa

0

Oded와 같은 원본 HTTP 헤더에 액세스 할 수없는 경우 콘텐츠가있는 경우 좋은 HTML 문자열에 "<"문자가 적어도 포함되어야한다고 가정 할 수 있습니다 (예 : 10 번째). 문자열의 문자.

물론 극단적 인 경우를 처리해야한다는 보장은 없지만 대부분의 가비지 또는 예상치 못한 콘텐츠 유형을 삭제해야하며 특정 인코딩 바이트를 잘 전달할 것입니다 (UTF-8 바이트 순서 표, 기타...).