Parsing de HTML em C# (.NET): bibliotecas HtmlAgilityPack e AngleSharp

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Parsing de HTML em C# (.NET): Visão geral das bibliotecas HtmlAgilityPack e AngleSharp



O parsing de HTML é uma das tarefas principais no desenvolvimento de web scrapers, analisadores de conteúdo ou testes automatizados. No ecossistema .NET, existem várias bibliotecas poderosas que permitem extrair dados de documentos HTML, manipular a árvore DOM e realizar consultas complexas. Neste artigo, vamos abordar as duas bibliotecas mais populares: HtmlAgilityPack e AngleSharp. Você conhecerá suas características, vantagens e obterá exemplos prontos de código em C#.



HtmlAgilityPack: abordagem clássica



HtmlAgilityPack (HAP) é a biblioteca mais antiga e amplamente utilizada para parsing de HTML no .NET. Ela oferece uma API intuitiva para navegação pela árvore DOM, suporta XPath e consultas LINQ. Principais funcionalidades:



  • Carregamento de HTML a partir de string, arquivo ou URL.
  • Suporte a XPath 1.0 para busca precisa de elementos.
  • Trabalho com atributos, texto e nós aninhados.
  • Correção automática de HTML inválido (por exemplo, tags não fechadas).


Instalação

Instale a biblioteca via NuGet:

Install-Package HtmlAgilityPack

Ou via .NET CLI:

dotnet add package HtmlAgilityPack


Exemplo: extração de títulos de notícias

Suponha que precisamos extrair os títulos de um site de notícias. Veja como fazer isso com HAP e XPath:



using HtmlAgilityPack;using System;using System.Linq;

class Program{ static void Main() { // Carrega o documento HTML var web = new HtmlWeb(); var doc = web.Load("https://example-news.com"); // Seleciona todos os títulos h2 com a classe "news-title" var titles = doc.DocumentNode .SelectNodes("//h2[@class='news-title']"); if (titles != null) { foreach (var title in titles) { Console.WriteLine(title.InnerText.Trim()); } } }}


Neste exemplo, usamos a expressão XPath //h2[@class='news-title'] para encontrar todos os elementos <h2> com a classe especificada. O método SelectNodes retorna uma coleção de nós, e InnerText extrai o texto sem tags HTML.



Trabalhando com atributos

Frequentemente é necessário obter o valor de um atributo, por exemplo, links de tags <a>:



var links = doc.DocumentNode.SelectNodes("//a[@href]");if (links != null){    foreach (var link in links)    {        string href = link.GetAttributeValue("href", "");        Console.WriteLine(href);    }}


AngleSharp: parser moderno com seletores CSS



AngleSharp é uma biblioteca mais moderna que suporta não apenas XPath, mas também seletores CSS, tornando-a conveniente para desenvolvedores familiarizados com tecnologias web. Ela também é totalmente compatível com os padrões W3C e pode trabalhar com conteúdo dinâmico.



  • Suporte a seletores CSS (como no jQuery).
  • Trabalho com HTML, XML, SVG e MathML.
  • Possibilidade de execução de JavaScript (através de extensões).
  • Carregamento assíncrono de documentos.


Instalação

dotnet add package AngleSharp


Exemplo: extração de dados com seletores CSS

Vamos repetir o exemplo anterior, mas agora com AngleSharp e seletores CSS:



using AngleSharp;using AngleSharp.Html.Parser;using System;using System.Linq;using System.Threading.Tasks;

class Program{ static async Task Main() { // Cria o parser var parser = new HtmlParser(); // Carrega o HTML (pode ser de string ou URL) var document = await parser.ParseDocumentAsync( a

Recommendations