Obter o objeto de documento
1. Criar o objeto de documento
HtmlDocument document = new HtmlDocument();Code language: JavaScript (javascript)
2. Duas formas de carregamento
1)Carregar string HTML
document.LoadHtml(htmlString);Code language: JavaScript (javascript)
2)Carregar arquivo HTML local (especifique a codificação para evitar caracteres ilegíveis)
document.Load(@"c:/news.html", Encoding.UTF8);Code language: JavaScript (javascript)
Para caminhos no Windows, recomenda‑se usar o caractere
@para desativar o escape. O trechoc://news.htmlno material é apenas um exemplo de sintaxe.
3. Obter nó raiz
HtmlNode rootNode = document.DocumentNode;Code language: JavaScript (javascript)
Todas as consultas XPath são executadas com base em rootNode.
Operações com nós
1. Criar novo nó a partir do HTML de um nó
HtmlNode newNode = HtmlNode.CreateNode(newsNode.OuterHtml);
OuterHtml: Inclui sua própria tag mais todo o conteúdo HTML interno- Usado com frequência para copiar nós ou analisar fragmentos HTML separadamente
2. Consultar nós
SelectSingleNode("XPath"): Retorna o primeiro nó correspondente, tipo de retornoHtmlNode
HtmlNode childNode = itemNode.SelectSingleNode("//div[1]");Code language: JavaScript (javascript)
SelectNodes("XPath"): Retorna todos os nós correspondentes, tipo de retornoHtmlNodeCollection
3. Ler texto e atributos
- Extrair texto puro de dentro do nó
string text = itemNode.InnerText;
- Ler atributo da tag (forma básica de escrita)
string href = itemNode.Attributes["href"].Value;Code language: JavaScript (javascript)
Risco: Quando a tag não possui o atributo
href, acessar diretamenteAttributes["href"]retorna null e causa falha no código.
Forma segura recomendada:
string href = itemNode.GetAttributeValue("href", "");Code language: JavaScript (javascript)
4. Código completo: iterar lista de notícias
foreach (HtmlNode item in newsList)
{
string title = item.InnerText;
string href = item.Attributes["href"].Value;
}Code language: PHP (php)
Observações complementares
- Tratamento de valores nulos
SelectNodes()retornanullse não encontrar nós compatíveis. É obrigatório fazer validação antes da execução do foreach:
if(newsList != null)
{
foreach(var item in newsList){ ... }
}Code language: PHP (php)
- Diferença entre InnerText / InnerHtml / OuterHtml
InnerText: Extrai apenas texto, remove todas as tagsInnerHtml: Conteúdo HTML interno do nó, sem a própria tagOuterHtml: A própria tag mais todo o HTML interno
- Dica rápida sobre XPath
//divfaz busca global por todos os elementos div; sem o//só corresponde aos nós filhos diretos.
Exemplo funcional completo
using HtmlAgilityPack;
using System.Text;
//1.Inicializar documento
HtmlDocument document = new HtmlDocument();
document.Load("news.htm", Encoding.UTF8);
HtmlNode rootNode = document.DocumentNode;
//2.Consultar links de notícias em lote
HtmlNodeCollection newsList = rootNode.SelectNodes(@"//div[@class='blk122']/a");
if(newsList != null)
{
foreach (HtmlNode item in newsList)
{
string title = item.InnerText.Trim();
string link = item.GetAttributeValue("href", "");
Console.WriteLine($"Título: {title} Link: {link}");
}
}Code language: JavaScript (javascript)
Obter conteúdo do documento
Previous: Aplicação