Récupérer l’objet document
1. Créer l’objet document
HtmlDocument document = new HtmlDocument();Langage du code : JavaScript (javascript)
2. Deux modes de chargement
1)Charger une chaîne HTML
document.LoadHtml(htmlString);Langage du code : JavaScript (javascript)
2)Charger un fichier HTML local (préciser l’encodage pour éviter les caractères corrompus)
document.Load(@"c:/news.html", Encoding.UTF8);Langage du code : JavaScript (javascript)
Pour les chemins Windows, préférez le préfixe
@pour désactiver l’échappement ;c://news.htmldans le support de cours n’est qu’un exemple syntaxique.
3. Récupérer le nœud racine
HtmlNode rootNode = document.DocumentNode;Langage du code : JavaScript (javascript)
Toutes les requêtes xpath s’exécutent sur la base de rootNode.
Opérations sur les nœuds
1. Créer un nouveau nœud à partir du HTML d’un nœud
HtmlNode newNode = HtmlNode.CreateNode(newsNode.OuterHtml);
OuterHtml:inclut sa propre balise ainsi que tout le HTML interne- utilisé pour dupliquer des nœuds ou analyser un fragment HTML isolé
2. Interroger des nœuds
SelectSingleNode("XPath"):renvoie le premier nœud correspondant, type retourHtmlNode
HtmlNode childNode = itemNode.SelectSingleNode("//div[1]");Langage du code : JavaScript (javascript)
SelectNodes("XPath"):renvoie l’ensemble des nœuds correspondants, type retourHtmlNodeCollection
3. Lire texte et attributs
- Récupérer le texte brut d’un nœud
string text = itemNode.InnerText;
- Lire un attribut de balise (écriture basique)
string href = itemNode.Attributes["href"].Value;Langage du code : JavaScript (javascript)
Risque : si la balise ne possède pas l’attribut
href, l’accès directAttributes["href"]renvoie null et provoque une erreur d’exécution.
Écriture sécurisée recommandée :
string href = itemNode.GetAttributeValue("href", "");Langage du code : JavaScript (javascript)
4. Exemple complet : parcourir une liste d’actualités
foreach (HtmlNode item in newsList)
{
string title = item.InnerText;
string href = item.Attributes["href"].Value;
}Langage du code : PHP (php)
Compléments
- Gestion des valeurs null
SelectNodes()retournenullquand aucun nœud ne correspond. Vérifiez‑le avant toute boucle foreach :
if(newsList != null)
{
foreach(var item in newsList){ ... }
}Langage du code : PHP (php)
- Différence InnerText / InnerHtml / OuterHtml
InnerText:extrait uniquement le texte, supprime toutes les balisesInnerHtml:HTML interne du nœud, sans sa propre baliseOuterHtml:sa propre balise + tout le HTML interne
- Astuce XPath
//diveffectue une recherche globale sur tous les div ; sans//, on ne cible que les enfants directs.
Exemple fonctionnel complet
using HtmlAgilityPack;
using System.Text;
//1.Initialiser le document
HtmlDocument document = new HtmlDocument();
document.Load("news.htm", Encoding.UTF8);
HtmlNode rootNode = document.DocumentNode;
//2.Récupérer en masse les liens des actualités
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($"Titre:{title} Lien:{link}");
}
}Langage du code : JavaScript (javascript)
Récupérer le contenu du document
Previous: Cas d’usage