Konvertiere Webseiten in Klartext ..?

c# html-agility-pack regex

Frage

Ich versuche, die Webseite in einen reinen Text umzuwandeln. Aber wenn ich auf den Tisch stoße, bekomme ich auch td- und tr-Tags. Wenn ich diese Tabellentags ersetze, kann ich einige Inhalte nicht erhalten.

Hier ist mein Code

string s = Regex.Replace(htmldoc, "<script.*?</script>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
s = Regex.Replace(s, "<!--.*?-->", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
s = Regex.Replace(s, "<style.*?style>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
s = Regex.Replace(s, "<a.*?a>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
s = Regex.Replace(s, "<img.*?img>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
s = Regex.Replace(s, "<table.*?table>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(s);
s = doc.DocumentNode.SelectSingleNode("//body").InnerText.Trim();

Bitte überprüfen Sie es und sagen Sie mir, wie ich den Inhalt aus der Tabelle bekommen kann, ohne td und tr-Tags zu bekommen.

Akzeptierte Antwort

Wenn Sie das HTML-Agility-Paket zum Analysieren der Tabelle verwenden, müssen Sie die HTML-Tags nicht mit Ihrer Regex entfernen. Es gibt einige gute Beispiele für das Parsen von Tabellen mit dem HTML-Agility-Paket hier auf SO. Beispiel: HTML Agility Pack - Analysetabellen


Beliebte Antwort

Sie können den InnerText des Körpers InnerText :

string html = @"
<html>
    <title>title</title>
    <body>
           <h1> The wheel.</h1>
           Stop reinventing the wheel ! Use powerful APIs 
           for manipulating html docs !
           <h3> I am fine </h3>
           <img src=""da_wheel_in_my_mind.png""/>
    </body>
</html>";

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
string text = doc.DocumentNode.SelectSingleNode("//body").InnerText;

Als nächstes möchten Sie möglicherweise Leerzeichen und neue Zeilen reduzieren:

text = Regex.Replace(text, @"\s+", " ").Trim();

Beachten Sie jedoch, dass Markups wie hello<br>world oder hello<i>world</i> in diesem Fall durch InnerText in helloworld konvertiert werden und die Tags entfernen. Es ist schwierig, dieses Problem zu lösen, da die Anzeige oft vom CSS und nicht nur vom Markup bestimmt wird.




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