Parsing de HTML em C# (.NET): visão geral das bibliotecas e exemplos de código

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): do simples ao complexo



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 de forma eficiente, mesmo que a marcação seja inválida. Neste artigo, veremos as três ferramentas mais populares: HtmlAgilityPack, AngleSharp e CsQuery, além de analisarmos exemplos práticos de seu uso.



1. HtmlAgilityPack — a escolha clássica



HtmlAgilityPack (HAP) é a biblioteca mais comum para parsing de HTML em C#. Ela suporta XPath e LINQ, tornando-a ideal para trabalhar com estruturas hierárquicas. O HAP corrige automaticamente marcações HTML incorretas, o que é especialmente útil ao fazer parsing de páginas "cruas".



Instalação via NuGet:

Install-Package HtmlAgilityPack


Exemplo: extraindo todos os links de uma página

using HtmlAgilityPack;

string url = "https://example.com";var web = new HtmlWeb();var doc = web.Load(url);

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


Exemplo: extraindo dados de uma tabela

var tableRows = doc.DocumentNode.SelectNodes("//table[@id='data-table']//tr");foreach (var row in tableRows){    var cells = row.SelectNodes("td");    if (cells != null)    {        var rowData = cells.Select(c => c.InnerText.Trim()).ToList();        Console.WriteLine(string.Join(" | ", rowData));    }}


2. AngleSharp — a alternativa moderna



AngleSharp é uma biblioteca mais moderna, totalmente escrita em C# e em conformidade com as especificações do W3C. Ela suporta seletores CSS, tornando-a conveniente para quem está acostumado com a sintaxe semelhante ao jQuery. O AngleSharp também pode trabalhar com DOM, SVG e MathML.



Instalação via NuGet:

Install-Package AngleSharp


Exemplo: parsing usando seletores CSS

using AngleSharp;using AngleSharp.Dom;

var config = Configuration.Default.WithDefaultLoader();var context = BrowsingContext.New(config);var document = await context.OpenAsync("https://example.com");

// Obtém todos os elementos com a classe "product"var products = document.QuerySelectorAll(".product");foreach (var product in products){ var name = product.QuerySelector(".product-name")?.TextContent.Trim(); var price = product.QuerySelector(".product-price")?.TextContent.Trim(); Console.WriteLine($"{name}: {price}");}


Exemplo: extraindo JSON de um script

var scripts = document.QuerySelectorAll("script[type='application/ld+json']");foreach (var script in scripts){    var json = script.TextContent;    // Em seguida, pode-se desserializar o JSON usando System.Text.Json    Console.WriteLine(json);}


3. CsQuery — sintaxe semelhante ao jQuery



CsQuery é um port do jQuery para C#, que fornece uma API familiar para trabalhar com DOM. É especialmente útil para quem está migrando de JavaScript para C#. No entanto, vale notar que o projeto é atualizado com menos frequência que o AngleSharp e pode não suportar as versões mais recentes do .NET.



Instalação via NuGet:

Install-Package CsQuery


Exemplo: extraindo texto de elementos

using CsQuery;

string html = "<div class='content'><p>Olá, mundo!</p></div>";var dom = CQ.Create(html);

var text = dom[".content

Recommendations