2012-03-15 4 views
1

Я использую HTML ловкость пакет и сделал что-то вроде этогоПочему Html.AgilityPack пропускает некоторые теги изображений?

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

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

я 38 обратно.

Когда я иду на эту страницу и делаю $('img').size(); Я получаю 43 назад. Почему существует разница? Есть "//img" просто ищет корневые?

Вот почему я, возможно, пропустил некоторые из них?

ответ

2

Is «// img» просто ищет корень?

Нет, он ищет узлы-потомки (дети, внуки и т. Д. Текущего узла). Ваше выражение xpath выбирает все изображения из документа.

Когда я иду на эту страницу и делаю $ ('img'). Size(); Я возвращаюсь обратно.

Мое предположение - некоторые изображения создаются динамически с помощью javascript. HtmlAgilityPack не может справиться с этим.

Кстати, для http://test.com я получил 87 узлов изображения с AgilityPack (doc.DocumentNode.SelectNodes("//img").Count()), и 87 изображений узлов из консоли Chome ($('img').size()).

EDIT: HtmlWeb.Load() метод внутренне использует WebRequest класс для получения данных. Роль AgilityPack - для правильного анализа данных.. Вполне возможно, что некоторые веб-ресурсы возвращают разные контенты для одного и того же URI в зависимости от некоторых заголовков запросов, таких как User-Agent и других. Например. User-Agent заголовок может быть установлен через HtmlWeb.UserAgent.

+0

ya test.come - это не страница, которую я использую (просто что-то заполнять). Хм, конечно, не обязательно, если это так, они делают это динамически. – chobo2

+0

На самом деле, глядя в исходный код через Google chrome, я получаю 48 изображений, но кажется, что как минимум 10 закомментированы. Поэтому, возможно, они игнорируются htmlAgilityPack (что бы мне подсчитало 38). Все еще не уверен, почему существует разница между jquery, поскольку он находит 43, и что это такое, игнорируя некоторые прокомментированные, а не другие? – chobo2

+0

@ chobo2, попробуйте отключить javascript. Я думаю, что количество изображений должно быть одинаковым. Также отредактировал мой ответ с еще одним возможным объяснением этого. – Alex

Смежные вопросы