Convertir une page Web en texte brut ..?

c# html-agility-pack regex

Question

J'essaie de convertir la page Web en texte brut. Mais si je rencontre la table, je reçois aussi les balises td et tr. Si je remplace ces balises de tableau, je ne peux pas obtenir une partie du contenu.

Voici mon 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();

S'il vous plaît vérifier et dites-moi comment puis-je obtenir le contenu de la table sans obtenir les balises td et tr.

Réponse acceptée

Si vous utilisez HTML Agility Pack pour analyser le tableau, vous n'avez pas besoin de supprimer les balises HTML avec votre regex. Il existe de bons exemples d'analyse de tables utilisant HTML Agility Pack ici sur SO. ex: HTML Agility Pack - analyse des tables


Réponse populaire

Vous pouvez utiliser InnerText du corps:

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;

Ensuite, vous voudrez peut-être réduire les espaces et les nouvelles lignes:

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

Notez cependant que, même si cela fonctionne dans ce cas, les balises telles que hello<br>world ou hello<i>world</i> seront converties par InnerText en helloworld , ce qui supprimera les balises. Il est difficile de résoudre ce problème, car l'affichage est souvent déterminé par le CSS, pas seulement par le balisage.



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