Домой Internet Парсинг HTML-страниц на примере Yandex.Маркет (с HtmlAgilityPack): Справочник по C#

Парсинг HTML-страниц на примере Yandex.Маркет (с HtmlAgilityPack): Справочник по C#

1340
0


      Довольно часто возникает ситуация, когда в автоматическом режиме необходимо получить какие-либо данные со страницы в формате HTML или XHTML. Выполнить синтаксический анализ можно разными способами, как используя встроенные в Framework средства, так и сторонние библиотеки. В данной инструкции будет рассмотрен процесс синтаксического анализа с использованием языка XPath (XML Path Language), реализующим доступ к частям документа XML, в файлах трансформации XSLT и являющимся стандартом консорциума W3C. В качестве источника данных для синтаксического анализа будет использоваться раздел характеристик устройства, выбранного в Yandex.Маркет.
       Предположим, что необходимо получить характеристики товара со страницы http://market.yandex.ru/model-spec.xml?modelid=10436573&hid=647100.
      Первая часть работы Q получение html-текста страницы. Как вы его получите, Q это уже второй вопрос или через WebClient, компонент браузера или загрузите файл с жесткого диска.
      Вторая часть работы сводится собственно к синтаксическому анализу нужного текста. Для начала нам необходимо получить XPath к заданном элементу в структуре HTML или XHTML. Чтобы не писать все руками, открываем браузер Chrome или Firefox с плагином Firebug. В браузере F1 и попадаем в исходный код страницы. Выбираем искомый элемент и нажимаем правую кнопку мыши. В выпадающем меню выбираем Copy XPath. В Firefox по аналогии.

В результате в буфере обмена будет текст (для Chrome):

/html/body/div[]/div[]/h1

      В этом тексте описан полный путь к элементу. Но, здесь есть нужно кое-что изменить. Во первых всегда нужно убирать tbody, во вторых нет необходимости писать html или *[@id=»js»], в случае с Chrome.
Достаточно строки:

body/div[]/div[]/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[]/div[]/h1");
return node.OuterHtml;
}

      В данном случае мы передаем тело html-страницы и через SelectSingleNode получаем исходный код таблицы. Обратите внимание, чтобы получить html-код найденной таблицы, необходимо использовать свойство OuterHtml. Свойство InnerHtml вернет чистый текст без тегов. Таким образом, мы на выходе метода получим таблицу, которую можно разобрать и обработать.
      Все остальные данные по товару получаем по схожей схеме. Ниже представлен пример работы тестового проекта по получению технических характеристик устройства с Yandex.Маркет.

Ссылка для скачивания примера: Rusfolder.net

ЧИТАТЬ ТАКЖЕ:  Список букв латинского алфавита: Справочник по C#

Парсинг HTML-страниц на примере Yandex.Маркет (с HtmlAgilityPack): Справочник по C#

0.00 (0%) 0 votes

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь