Comment désinfecter le HTML avec HtmlAgilityPack?

c# html-agility-pack

Question

Je suis confronté à un problème dans mon webscraper. Il me faut essentiellement obtenir le nombre décimal à l'intérieur de la cellule. team_a_col home :

<th>Med. goal subiti p/p</th>
<td class='team_a_col total'>0.76</td>
<td class='team_a_col home'>0.89
<td class='team_a_col away'>0.62</td></td>

le résultat devrait donc être: 0.89

mais comme vous pouvez voir que le code html a une mauvaise structure, au lieu d’obtenir 0.89 je récupère également le contenu de team_a_col away avec ce code:

<th>Med. goal subiti p/p</th>
<td class='team_a_col total'>0.76</td>
<td class='team_a_col home'>0.89
<td class='team_a_col away'>0.62</td></td>

Comment puis-je obtenir seulement 0,89? Le </td> devrait être avant <team_a_col away ..

Réponse acceptée

Vous devez définir HtmlDocument.FixNestedTags sur true :

string html = "<th>Med. goal subiti p/p</th><td class='team_a_col total'>0.76</td><td class='team_a_col home'>0.89<td class='team_a_col away'>0.62</td></td>";

var doc = new HtmlAgilityPack.HtmlDocument
{
    OptionFixNestedTags = true,
    OptionCheckSyntax = true,
    OptionAutoCloseOnEnd = true
};
doc.LoadHtml(html);

string tdText = doc.DocumentNode.SelectSingleNode(".//td[@class='team_a_col home']")?.InnerText.Trim();

Avec FixNestedTags le résultat est: 0.89


Réponse populaire

Pourriez-vous prendre une ligne entière puis une sous-chaîne et récupérer les données?

var node = doc.DocumentNode.SelectNodes("//htmlelment/htmlelment");

string[] nodeArray = node[0].OuterHtml.Split(' ');



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi