hap

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

5 ноября, 2012
1 минута чтения

Если контент не отображается, включите VPN.

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

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

Simple+HTML+Parser
C# пример

Для примера её использования создадим новый проект, в моем случае это будет 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

Пример приложения с исходниками можно скачать здесь.

Денис Сергеевич Басковский

Философ, изобретатель и поэт.

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
rufact
Предыдущая статья

RuFact

google
Следующая статья

Организуем пользовательский поиск Google