Довольно часто возникает ситуация, когда в автоматическом режиме необходимо получить какие-либо данные со страницы в формате HTML или XHTML. Выполнить синтаксический анализ можно разными способами, как используя встроенные в Framework средства, так и сторонние библиотеки. В данной инструкции будет рассмотрен процесс синтаксического анализа с использованием языка XPath (XML Path Language), реализующим доступ к частям документа XML, в файлах трансформации XSLT и являющимся стандартом консорциума W3C. В качестве источника данных для синтаксического анализа будет использоваться раздел характеристик устройства, выбранного в Yandex.Маркет.
Предположим, что необходимо получить характеристики товара со страницы http://market.yandex.ru/model-spec.xml?modelid=10436573&hid=6427100.
Первая часть работы — получение html-текста страницы. Как вы его получите, — это уже второй вопрос или через WebClient, компонент браузера или загрузите файл с жесткого диска.
Вторая часть работы сводится собственно к синтаксическому анализу нужного текста. Для начала нам необходимо получить XPath к заданном элементу в структуре HTML или XHTML. Чтобы не писать все руками, открываем браузер Chrome или Firefox с плагином Firebug. В браузере F12 и попадаем в исходный код страницы. Выбираем искомый элемент и нажимаем правую кнопку мыши. В выпадающем меню выбираем Copy XPath. В Firefox по аналогии.
В результате в буфере обмена будет текст (для Chrome):
Достаточно строки:
Все остальные данные по товару получаем по схожей схеме. Ниже представлен пример работы тестового проекта по получению технических характеристик устройства с Yandex.Маркет.
Предположим, что необходимо получить характеристики товара со страницы http://market.yandex.ru/model-spec.xml?modelid=10436573&hid=6427100.
Первая часть работы — получение html-текста страницы. Как вы его получите, — это уже второй вопрос или через WebClient, компонент браузера или загрузите файл с жесткого диска.
Вторая часть работы сводится собственно к синтаксическому анализу нужного текста. Для начала нам необходимо получить XPath к заданном элементу в структуре HTML или XHTML. Чтобы не писать все руками, открываем браузер Chrome или Firefox с плагином Firebug. В браузере F12 и попадаем в исходный код страницы. Выбираем искомый элемент и нажимаем правую кнопку мыши. В выпадающем меню выбираем Copy XPath. В Firefox по аналогии.
В результате в буфере обмена будет текст (для Chrome):
/html/body/div[2]/div[2]/h1В этом тексте описан полный путь к элементу. Но, здесь есть нужно кое-что изменить. Во первых всегда нужно убирать tbody, во вторых нет необходимости писать html или *[@id="js"], в случае с Chrome.
Достаточно строки:
body/div[2]/div[2]/h1Теперь берем библиотеку HtmlAgilityPack и скармливаем ей наш путь и исходный текст страницы следующим образом:
public string GetDescription(string html) { HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.OptionFixNestedTags = true; doc.Load(new StringReader(html)); HtmlNode node = doc.DocumentNode.SelectSingleNode("//body/div[2]/div[2]/h1"); return node.OuterHtml; }В данном случае мы передаем тело html-страницы и через SelectSingleNode получаем исходный код таблицы. Обратите внимание, чтобы получить html-код найденной таблицы, необходимо использовать свойство OuterHtml. Свойство InnerHtml вернет чистый текст без тегов. Таким образом, мы на выходе метода получим таблицу, которую можно разобрать и обработать.
Все остальные данные по товару получаем по схожей схеме. Ниже представлен пример работы тестового проекта по получению технических характеристик устройства с Yandex.Маркет.
Ссылка для скачивания примера: Rusfolder.net
код не работает!
ОтветитьУдалитьСсылка на объект не указывает на экземпляр объекта.
Здравствуйте, пожалуйста,
ОтветитьУдалитьотправьте ваш проект через форму обратной связи или прикрепив его в новом
комментарии, что бы наши специалисты могли его протестировать.
Здравствуйте. Ваш код не работает. Не обработанное исключение. Почему ?
ОтветитьУдалить