Почему Html.AgilityPack пропускает некоторые теги изображений? - PullRequest
1 голос
/ 16 марта 2012

Я использую html пакет agility и сделал что-то вроде этого

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

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

Я получаю 38 назад.

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

Поэтому я могу пропустить некоторые?

1 Ответ

2 голосов
/ 16 марта 2012

"img" просто ищет корневые?

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

Когда я иду на эту страницу и делаю $ ('img'). Size (); Я получаю 43 обратно.

Мое предположение - некоторые изображения создаются динамически с помощью 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.

...