В данной статье будет рассмотрен html парсер Agility pack, очень удобен для использования. Намного надёжней, чем регулярные выражения, если честно. Долгое время провозился одно время, так как знаком с ними очень немного =)
Если кто то не в курсе для чего нужен парсер страниц, то объясню вкратце:
Есть какая либо html страница (не важно в виде файла на локальном диске или в интернете), есть необходимость извлечь из неё определённые данные, которые возможно необходимы для дальнейшей работы.
То есть если в двух словах, то у вас перед глазами сайт google.com и вам нужно загнать в строковую переменную слово Google, извлекая его из исходного кода страницы, из определённого html тега или атрибутов тега.
Но используется для более сложных вычислений =)
Библиотека Agility pack не является стандартной и её надо дополнительно скачивать и внедрять в проект.
Скачать её можно тут. Нас будет интересовать Html Agility Pack 1.4.0 Binaries. Как делать импорт библиотек, можно прочесть тут.
Как работать с парсером. Рассмотрим на примере исходного кода:
Если мы хотим получить значение атрибута какого либо html-тега, например источник изображения (src), то для нахождения данного значения наш код будет выглядеть следующим образом:
Если кто то не в курсе для чего нужен парсер страниц, то объясню вкратце:
Есть какая либо html страница (не важно в виде файла на локальном диске или в интернете), есть необходимость извлечь из неё определённые данные, которые возможно необходимы для дальнейшей работы.
То есть если в двух словах, то у вас перед глазами сайт google.com и вам нужно загнать в строковую переменную слово Google, извлекая его из исходного кода страницы, из определённого html тега или атрибутов тега.
Но используется для более сложных вычислений =)
Библиотека Agility pack не является стандартной и её надо дополнительно скачивать и внедрять в проект.
Скачать её можно тут. Нас будет интересовать Html Agility Pack 1.4.0 Binaries. Как делать импорт библиотек, можно прочесть тут.
Как работать с парсером. Рассмотрим на примере исходного кода:
{ // Создаём экземпляр класса HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); // Присваиваем текстовой переменной k html-код string k = "<html><head><title>Пример 1</title></head> <body> <div class=\"bla1\">Это простейший пример HTML-документа.</div></body> </html>"; // Загружаем в класс (парсер) наш html doc.LoadHtml(k); // Извлекаем всё текстовое, что есть в теге <div> с классом bla1 HtmlNode bodyNode = doc.DocumentNode.SelectSingleNode("//div[@class='bla1']"); // Выводим на экран результат работы парсера MessageBox.Show(bodyNode.InnerText); }
Если мы хотим получить значение атрибута какого либо html-тега, например источник изображения (src), то для нахождения данного значения наш код будет выглядеть следующим образом:
Таким образом конструкцию нашего кода можно усложнять, добавлять свои функции. Дальше дело творческое =){ // Создаём экземпляр класса HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); // Присваиваем текстовой переменной k html-код string k = "<html><head><title>Пример 1</title></head> <body> <div class=\"bla1\"><img src=\"https://www.google.ru/images/srpr/logo3w.png\"/>типа изображение</div></body> </html>"; // Загружаем в класс (парсер) наш html doc.LoadHtml(k); // Извлекаем значения HtmlNode bodyNode = doc.DocumentNode.SelectSingleNode("//div[@class='bla1']/img"); // Выводим на экран значиение атрибута src // у изображения, которое находилось // в теге <div> в слассом bla MessageBox.Show(bodyNode.Attributes["src"].Value); //pictureBox1.ImageLocation = bodyNode.Attributes["src"].Value; }
