0

HTMLAgilityPackを使用してHTMLページを解析しています。しかし、ある時点で私は間違ったデータ(この特定の場合はイメージ)を解析しようとしますが、ofcは明白な理由で失敗します。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オブジェクト 参照で発生しました。私が解析しようとする内容に

Iޥ+:80X

コンテンツ」であるかどうかを確認する方法エラーを防ぐために解析する前に解析することができますか?

今のところ、エラーポップアップを表示する画像ですが、(x)htmlではないものと思われます。偉大なコミュニティOW事前に

感謝:)

答えて

2

あなたは、返されたデータを解析しようとする前に戻っcontent-typeヘッダをチェックする必要があります。

HTMLページの場合、これはtext/htmlである必要があります.XHTMLはapplication/xhtml+xmlであるためです。

+0

ワウ。これは素晴らしいことです。私はまだそれをテストしていないが、私はあなたがちょうどこの質問に答えると思うと私は尋ねていない別の質問!私は自分のWebRequestの応答タイプとコンテンツタイプをチェックする方法が不思議に思っていました。あなたがその方向性で私を指摘したと思います。今すぐテストしよう! – PeeHaa

0

OdedのようなオリジナルのHTTPヘッダーにアクセスできない場合は、最初に10文字以内に "<"文字を含めるとよいでしょう文字列の文字。

もちろん、保証はなく、極端なケースを処理する必要がありますが、ほとんどのガベージや予期しないコンテンツタイプを破棄して、特定のエンコードバイトをうまく通過させるようにします(UTF-等...)。

関連する問題