Справочник по C#

    Исходники по языку программирования CSharp

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

    /
    /
    /
    93 Views


          Довольно часто возникает ситуация, когда в автоматическом режиме необходимо получить какие-либо данные со страницы в формате 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

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

    0.00 (0%) 0 votes

    moyadcode13
    • Facebook
    • Twitter
    • Google+
    • Linkedin
    • Pinterest
    moyadcode10
    moyadcode11
    moyadcode9