C# htmlagilitypack пример простого проекта

Нередко пользователям интернета необходимо скопировать большое количество картинок, текста или названий с определенного сайта. Тупой и монотонный copy-past совершенно не подходит. Чтобы избавиться от такого нудного страдания, и существует парсинг страниц.



Существует много хороших библиотек на разные ЯП, но для быстрой разработки одним из лучших по-праву остаётся открытая библиотека html agility pack. Это .NET библиотека для работы с DOM без браузера, поддерживает селекторы XPATH и XSLT парсинг.

Для примера её использования создадим новый проект, в моем случае это будет windows forms. Добавим нужную ссылку необходимой версии в reference. В начале проекта вставим следующий код:

using HtmlAgilityPack;
using HtmlDocument = HtmlAgilityPack.HtmlDocument;

Иногда случаются проблемы с ресурсами которые не закодированы в utf-8. Тогда всплывают всякие кракозябры и их приходится конвертировать в читаемый формат. К сожалению, встроенный метод LoadHtml, входящий в коробку, пока не поддерживает перегрузки автоматической кодировки. Поэтому, потратив время на решение парсинга ANSI/Windows страниц, нашёл довольно элегантное решение на StackOverflow:

string html = "http://site.domain";
HtmlDocument HD = new HtmlDocument();
var web = new HtmlWeb
         {
              AutoDetectEncoding = false,
              OverrideEncoding = Encoding.UTF8,
         };
HD = web.Load(html);

// Собственно, здесь и производится выборка интересующих нам нодов
// В данном случае выбираем блочные элементы с классом eTitle
HtmlNodeCollection NoAltElements = HD.DocumentNode.SelectNodes("//div[@class='eTitle']");

// Проверяем наличие узлов
if (NoAltElements != null)
{
    foreach (HtmlNode HN in NoAltElements)
    {
        // Получаем строчки
        string outputText = HN.InnerText;
    }
}

На выходе можно получать целиком html, вместе с тегами и классами, тогда вместо InnerText надо поставить InnerHtml. Не забывайте, что некоторые ресурсы могут банить по IP по причине слишком высокого потока запросов. Этим грешат некоторые CMS, например, uCoz. Пример приложения с исходниками можно скачать здесь.

Рекомендую к ознакомлению: Ищем доки по JavaScript правильно