I. Preparação do ambiente
1. Formas de referenciar
Existem duas abordagens mais comuns:
- Método antigo: importar manualmente o arquivo
HtmlAgilityPack.dll - Método recomendado: instalar via pacote NuGet
Install-Package HtmlAgilityPack
2. Classes centrais mais utilizadas
| Nome da classe | Finalidade |
|---|---|
HtmlDocument | Container do documento HTML, responsável por carregar o código‑fonte HTML |
HtmlWeb | Classe de requisição de rede, busca o HTML da página diretamente por URL |
HtmlNode | Nó DOM HTML individual (tags como div/a/p entre outras) |
HtmlNodeCollection | Coleção de HtmlNode, armazena múltiplos resultados de consulta |
II. Duas maneiras de carregar HTML
Ambos os métodos retornam um objeto HtmlDocument
1: Carregar arquivo local / string HTML
- Carregar arquivo HTML local
using HtmlAgilityPack;
using System.Text;
HtmlDocument document = new HtmlDocument();
// Carrega arquivo local informando a codificação
document.Load("news.htm", Encoding.UTF8);Code language: JavaScript (javascript)
- Carregar string de texto HTML
string htmlStr = "<html>...</html>";
document.LoadHtml(htmlStr);Code language: HTML, XML (xml)
2: Carregar página da web online
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("https://example.com");Code language: JavaScript (javascript)
III. Consulta de nós
// 1. Instanciar objeto de documento
HtmlDocument document = new HtmlDocument();
// 2. Ler arquivo html local
document.Load("news.htm", Encoding.UTF8);
// 3. Obter nó raiz do documento
HtmlNode rootNode = document.DocumentNode;
// 4. Consultar vários nós com XPath, retorna coleção de nós
HtmlNodeCollection newsList = rootNode.SelectNodes(
@"//html/body/div[@class='content']/div/div[@class='left']/div[1]/div[@class='blk12']/div[@class='blk122']/a"
);Code language: JavaScript (javascript)
Explicação dos métodos principais
SelectSingleNode("XPath"):retorna o primeiro nó que atende ao critério, retorno do tipoHtmlNodeSelectNodes("XPath"):retorna todos os nós correspondentes, retorno do tipoHtmlNodeCollection- Os materiais de aula usam caminhos absolutos completos. Em projetos reais é recomendado usar a busca relativa global para simplificar o XPath e evitar falhas quando a página sofrer alterações:
//div[@class='blk122']/aCode language: JSON / JSON with Comments (json)
IV. Exemplo: percorrer e extrair conteúdos
if(newsList != null)
{
foreach(HtmlNode aNode in newsList)
{
string title = aNode.InnerText; // Pegar texto dentro da tag
string link = aNode.GetAttributeValue("href",""); // Ler atributo href
}
}Code language: PHP (php)
V. Referência rápida de propriedades importantes
.InnerText:texto puro dentro da tag.InnerHtml:código HTML interno incluindo tags filhas.OuterHtml:a própria tag somada a todo o HTML internoGetAttributeValue("NomeDoAtributo","ValorPadrão"):leitura segura dos atributos da tag
Aplicação
Previous: XPath