Парсинг на C# с HtmlAgilityPack

  • Михаил
  • 8 мин. на прочтение
  • 96
  • 23 Feb 2018
  • 23 Feb 2018

Согласно данным с официального сайта: HtmlAgilityPack- это анализатор HTML, написанный на C # для чтения/записи DOM (поддерживает обычный XPATH или XSLT)

Рассмотрим очень быстро практическое применение:

Можно указать путь (скачать с сайта https://html-agility-pack.net/ или прямо из студии через NuGet).

Прописываем в юзингах: using HtmlAgilityPack;

И начинаем знакомство.

Создаем экземпляр:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); - это то, что будет хранить наш Html документ

Заливаем в экземпляр информацию:

doc.Load(); — в скобках необходимо указать либо поток, либо локальный путь, либо адрес из интернета.

Теперь в памяти компьютера лежит страница сайта, можем собирать с нее информацию.

Полученные теги будем закидывать в:

HtmlNode и HtmlNodeCollection

Первое – используем для одного тега, второй – для другого.

Далее объявляем переменную и сразу закидываем тэги:

HtmlNodeCollection collection = doc.GetElementbyId(“id”)

Теперь можем взять, например, ParentNode-родительский узел или ChildNodes-дочерние элементы.

doc.GetElementbyId(“id”). ChildNodes

Затем можно указать, что берем InnerText-текст тэга Inner или InnerHtml-текст с разметкой:

collection[1]. InnerText
doc.GetElementbyId(«id»). ChildNodes[0].InnerHtml

Используя HtmlAgilityPack можно осуществлять поиск в том числе и по классам, используя хpath.

HtmlNodeCollection span = doc.DocumentNode.SelectNodes("//span[contains(@class, 'styles__Ellipsis-sc-1fw79ul-0 cDcbYl styles__Child-qpwb36-0 styles__Primary-qpwb36-1 eTiXVY')]");

Подробнее:

  • //-откуда начинаем путь (сейчас с начала документа, Span-любой тэг, который ищет «a”, «div», “h1» и т.д.
  • [contains(@clas, -ищет по содержимому класса (contains(параметр, искомое)),
  • ‘styles__Ellipsis-sc-1fw79ul-0 cDcbYl styles__Child-qpwb36-0 styles__Primary-qpwb36-1 eTiXVY’-то что должен содержать класс.

Более подробно: