Wie helfe ich HTML mit HtmlAgilityPack?

c# html-agility-pack

Frage

Ich habe ein Problem in meinem WebScraper, im Wesentlichen muss ich die Dezimalzahl innerhalb der Zelle 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>

Also sollte das Ergebnis 0,89 sein

aber wie Sie das sehen können html haben eine schlechte Struktur, so statt bekommen 0.89 Ich habe auch den Inhalt von team_a_col away mit diesem Code:

node.SelectSingleNode(".//td[@class='team_a_col home']").InnerText.Trim();

Wie kann ich nur 0,89 bekommen? Das </td> sollte vorher von <team_a_col away ..

Akzeptierte Antwort

Sie sollten HtmlDocument.FixNestedTags auf 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();

Mit FixNestedTags das Ergebnis: 0.89


Beliebte Antwort

Könnten Sie einfach ganze Zeile und dann Teilzeichenfolge und holen Sie die Daten?

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

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


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum