2012-03-15 10 views
1

私は、HTML敏捷性パックを使用していると私は38を取り戻すこのなぜHtml.AgilityPackはいくつかのイメージタグを欠場するでしょうか?

HtmlWeb web = new HtmlWeb(); 
HtmlDocument doc = web.Load("http://test.com"); 

int count = doc.DocumentNode.SelectNodes("//img").Count(); 

のような何かをしました。

私はそのページに行って$('img').size();をしたら、43が返ってきます。なぜ違いがありますか? "//img"はrootのものを探していますか?

なぜ私はいくつかを逃している可能性がありますか?

答えて

2

"// img"は のルートを探していますか?

いいえ、子孫ノード(現在のノードの子、孫など)はありません。 xpath式はドキュメントからすべてのイメージを選択します。

私はそのページに行き、$( 'img')を実行します。私は43を取り戻す。

私の前提 - 画像の一部は、javascriptを使用して動的に作成されます。 HtmlAgilityPackはこれを処理できません。ところで

は、http://test.comため私は丁目コンソール($('img').size())からAgilityPack 87個の画像ノード(doc.DocumentNode.SelectNodes("//img").Count())、及び87個のイメージノードを得ました。

EDITHtmlWeb.Load()方法は、内部でデータを取得するためにWebRequestクラスを使用しています。 AgilityPackの役割は、データを正しく構文解析するためにです。。一部のWebリソースは、User-Agentなどのリクエストヘッダーの一部に応じて、同じURIに対して異なるコンテンツを返す可能性があります。例えば。 プロパティでUser-Agentヘッダーを設定できます。

+0

ya test.comeは私が使っているページではありません。もしそうであれば、彼らはそれを動的にやっているのですか? – chobo2

+0

実際にGoogleクロームを使ってソースコードを調べると、48個の画像が得られますが、少なくとも10個はコメントアウトされているようです。だから、htmlAgilityPackによって無視されるかもしれません(私に38を与えるもの)。それでも、なぜjqueryとの間に違いがあるのか​​は分かりません。 – chobo2

+0

@ chobo2、javascriptをオフにしてみてください。画像の数は同じでなければならないと思います。また、私の答えを編集してこれについてのもう一つの可能​​な説明を加えました。 – Alex

関連する問題