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 HtmlAgilityPackOu via .NET CLI:
dotnet add package HtmlAgilityPackExemplo: 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 AngleSharpExemplo: 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 Também na biblioteca
Flow para Kotlin: guia completo com exemplos
Processamento de imagens em Kotlin: resize e crop com a biblioteca Kamel
Trabalhando com YAML em Node.js: bibliotecas js-yaml e yaml
Trabalho com XML em PHP: guia completo para análise e criação de documentos XML