1

C#、Windows フォーム、および HTML Agility Pack を使用して開発された Web スクレイパーがあります。

サイトがコードを変更して壊れたとき、私はそれをすべてうまく機能させました。Webスクレーパーでよく発生することは知っていますが、現在、問題を修正する方法を理解するのに苦労しています.

この時点で、私のスクレーパーは複数の URL をループし、各ページからデータをスクレイピングします。

私が直面している問題は、ループするサイトのテンプレートが、プログラムで定義したのと同じ HTML クラスと ID を持たない新しいテンプレートをランダムに表示することです。私がやろうとしているのは、単純な if を実行して、単一のノードが null であるかどうかをチェックし、それが新しいテンプレートの別のコード セットを実行するかどうかを確認することです。

私が抱えている問題は、私のプログラムが if ステートメントで NullReferenceException をスローすることです。

nullかどうかを確認するために使用しているステートメントは次のとおりです。

var varitem = doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']").InnerText;

 if (varitem == null) MessageBox.Show("no titles");

variitem を定義する最初の行で例外をスローし、if ステートメントにも到達しません。

どんなアドバイスでも大歓迎です!

4

2 に答える 2

1

以下で試してください

var varitem = doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']");

SelectSingleNodenull を返すことができます。InnerTextまた、null でないか空でないかを確認することをお勧めします

if (varitem == null || string.IsNullOrEmpty(varitem.InnerText))
              MessageBox.Show("no titles");
于 2013-06-08T17:22:13.730 に答える
1

まず、次のことを確認する必要があります。

 doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']")

null を返します。

null の場合は、NullReferenceException fromを取得しますnull.InnerText

于 2013-06-08T17:34:11.453 に答える