KeyNotFoundException mit der HtmlEntity.DeEntitise () -Methode

c# html-agility-pack keynotfoundexception

Frage

Ich arbeite gerade an einem in C # 4.0 geschriebenen Scraper. Ich verwende eine Vielzahl von Tools, einschließlich der integrierten WebClient- und RegEx-Funktionen von .NET. Für einen Teil meines Scraper analysiere ich ein HTML-Dokument mit HtmlAgilityPack. Ich habe alles wie gewünscht arbeiten lassen und habe den Code überarbeitet.

Ich verwende die HtmlEntity.DeEntitize() -Methode, um den HTML- HtmlEntity.DeEntitize() zu bereinigen. Ich machte ein paar Tests und die Methode schien großartig zu funktionieren. Aber als ich die Methode in meinen Code implementierte, bekam ich KeyNotFoundException . Es gibt keine weiteren Details, also bin ich ziemlich verloren. Mein Code sieht so aus:

WebClient client = new WebClient();
string html = HtmlEntity.DeEntitize(client.DownloadString(path));
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);

Der heruntergeladene HTML-Code ist UTF-8-codiert. Wie kann ich die KeyNotFound Ausnahme KeyNotFound ?

Beliebte Antwort

Vier Jahre später und ich habe das gleiche Problem mit einigen codierten Zeichen (Version 1.4.9.5). In meinem Fall gibt es eine begrenzte Anzahl von Zeichen, die das Problem verursachen könnten. Daher habe ich gerade eine Funktion zum Ausführen der Ersetzungen erstellt:

// to be called before HtmlEntity.DeEntitize
public static string ReplaceProblematicHtmlEntities(string str)
{
    var sb = new StringBuilder(str);
    //TODO: add other replacements, as needed
    return sb.Replace(".", ".")
        .Replace("ă", "ă")
        .Replace("â", "â")
        .ToString();
}

In meinem Fall enthält die Zeichenfolge sowohl HTML-codierte Zeichen als auch UTF-8-Zeichen, aber das Problem bezieht sich nur auf einige codierte Zeichen.

Dies ist keine elegante Lösung, sondern eine schnelle Lösung für all diese Texte mit einer begrenzten (und bekannten) Menge problematischer codierter Zeichen.



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