В данной статье будет рассмотрен html парсер Agility pack, очень удобен для использования. Намного надёжней, чем регулярные выражения, если честно. Долгое время провозился одно время, так как знаком с ними очень немного =)
Если кто то не в курсе для чего нужен парсер страниц, то объясню вкратце:
Есть какая либо html страница (не важно в виде файла на локальном диске или в интернете), есть необходимость извлечь из неё определённые данные, которые возможно необходимы для дальнейшей работы.
То есть если в двух словах, то у вас перед глазами сайт google.com и вам нужно загнать в строковую переменную слово Google, извлекая его из исходного кода страницы, из определённого html тега или атрибутов тега.
Но используется для более сложных вычислений =)
Библиотека Agility pack не является стандартной и её надо дополнительно скачивать и внедрять в проект.
Как работать с парсером. Рассмотрим на примере исходного кода:
private void button1_Click(object sender, EventArgs e)
{
// Создаём экземпляр класса
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), то для нахождения данного значения наш код будет выглядеть следующим образом:
private void button2_Click(object sender, EventArgs e)
{
// Создаём экземпляр класса
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;
}
Таким образом конструкцию нашего кода можно усложнять, добавлять свои функции. Дальше дело творческое =)