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 e ferramentas de automação. No ecossistema C# (.NET), existem várias bibliotecas maduras que permitem extrair dados de documentos HTML, manipular a árvore DOM e fazer consultas a elementos. Neste artigo, vamos examinar detalhadamente as duas bibliotecas mais populares: HtmlAgilityPack e AngleSharp, seus recursos, sintaxe e exemplos de uso.



1. HtmlAgilityPack — uma ferramenta testada pelo tempo



HtmlAgilityPack (HAP) é uma das bibliotecas mais antigas e amplamente utilizadas para parsing de HTML em .NET. Ela suporta tanto .NET Framework quanto .NET Core / .NET 5+. A principal vantagem é a simplicidade e a tolerância a falhas ao trabalhar com HTML "sujo" (marcação inválida, tags não fechadas).



Instalação

// Através do NuGet Package ManagerInstall-Package HtmlAgilityPack

// Ou via .NET CLIdotnet add package HtmlAgilityPack


Exemplo básico: extração de títulos H1

using HtmlAgilityPack;

string html = @"<html><body> <h1>Título 1</h1> <h1>Título 2</h1> <p>Texto do parágrafo</p></body></html>";

var doc = new HtmlDocument();doc.LoadHtml(html);

var h1Nodes = doc.DocumentNode.SelectNodes("//h1");if (h1Nodes != null){ foreach (var node in h1Nodes) { Console.WriteLine(node.InnerText.Trim()); }}// Saída:// Título 1// Título 2


Uso de XPath e seletores CSS

HtmlAgilityPack usa XPath por padrão para navegação. No entanto, com o pacote HtmlAgilityPack.CssSelectors, é possível usar seletores CSS:

// Instalação: dotnet add package HtmlAgilityPack.CssSelectorsusing HtmlAgilityPack.CssSelectors;

// ... após carregar o documentovar links = doc.DocumentNode.QuerySelectorAll("a.external-link");foreach (var link in links){ Console.WriteLine(link.GetAttributeValue("href", ""));}


Parsing de um site real

using System.Net.Http;using HtmlAgilityPack;

var url = "https://example.com/articles";var httpClient = new HttpClient();var html = await httpClient.GetStringAsync(url);

var doc = new HtmlDocument();doc.LoadHtml(html);

// Extrai todos os títulos de artigosvar articles = doc.DocumentNode.SelectNodes("//article/h2/a");if (articles != null){ foreach (var article in articles) { var title = article.InnerText.Trim(); var link = article.GetAttributeValue("href", ""); Console.WriteLine($"{title} -> {link}"); }}


2. AngleSharp — uma alternativa moderna



AngleSharp é uma biblioteca mais recente que oferece suporte completo a HTML5, CSS3, JavaScript (limitado) e especificações DOM. Ela é ideal para tarefas que exigem conformidade precisa com a renderização do navegador. Suporta .NET Standard 2.0+, o que significa compatibilidade com .NET Framework 4.6.1+ e .NET Core.



Instalação

dotnet add package AngleSharp


Exemplo básico: extração de todos os links

using AngleSharp;using AngleSharp.Dom;using AngleSharp.Html.Parser;

var html = @"<html><body> <a href='https://example.com'>Example</a> <a href='https://test.com'>Test</a></body></html>";

var parser = new HtmlParser();IDocument document = parser.ParseDocument(html);

var links = document.QuerySelectorAll("a");foreach (var link in links){ Console.WriteLine($"{link.TextContent} -> {link.GetAttribute("href")}");}// Saída:// Example -> https://example.com// Test -> https://test.com


Trabalhando com atributos

Recommendations