Парсинг HTML в .NET приложении

Вопрос разбора данных HTML страниц для вытаскивания из них данных может встать перед любым разработчиком. Для того, чтобы уменьшить количество рутинной работы можно воспользоваться библиотекой Html Agility Pack

Например, на странице с аудио-записями Вконтакте альбомы хранятся в блоках div с атрибутом class= «audio_filter»

Пример:

<div id="album99999" class="audio_filter"
onmouseover="Audio.listOver(this)"
onmouseout="Audio.listOut(this)"
onclick="Audio.loadAlbum(11103462)">Trip-hop</div>

Код поиска таких блоков на C#:

      String page;
      //Получение содержимого html-страницы в строку page
      //...
      byte[] byteArray = Encoding.GetEncoding(1251).GetBytes(page);
      MemoryStream stream = new MemoryStream(byteArray);

      HtmlDocument doc = new HtmlDocument();

      doc.Load(stream);
      HtmlNode root = doc.DocumentNode;

      foreach (HtmlNode div in root.SelectNodes("//div"))
      {
        HtmlAttribute att = div.Attributes["class"];
        if ((att == null) || (att.Value == null) || (!att.Value.Equals("audio_filter")))
          continue;

        int index = div.Id.IndexOf("album");
        if (index != 0)
          continue;

        Album album = new Album() { Name = div.InnerText, ID = div.id };     //Новый альбом, где название содержимое блока

      }