J'écris une application qui rampe un groupe de mes pages Web. Plutôt que de prendre tout le code source de la page, je voudrais prendre tout le contenu et stocker cela et pouvoir stocker la page en tant que texte brut dans une base de données. Le contenu sera utilisé dans d'autres applications et non lus par les utilisateurs, il n'ya donc aucun besoin que celui-ci soit parfaitement lisible par l'homme. P>
Au début, je pensais utiliser des expressions régulières, mais je n'ai aucun contrôle sur la validité des pages Web et il y a de grandes chances que aucune expression régulière ne me donne le contenu. p>
Si j'ai le code source dans une chaîne, comment puis-je transformer cette chaîne de code source dans seulement le contenu de C #? p>
4 Réponses :
S'il vous plaît, s'il vous plaît, faites pas em> analyser html vous-même! Vous ne pouvez pas utiliser simplement une regex standard pour analyser HTML - ce n'est pas possible. P>
Il y a des tonnes de bibliothèques libres. L'un des meilleurs libres du monde de .net est le HTML Agility Pack . P>
HTML Agility Pack prend également en charge les documents mal formés, ce qui est quelque chose qu'une regex ou une autre analyse de base telle que XML ne fera presque jamais. P>
Ce n'est pas 100% clair ce que vous voulez, mais je suppose que vous voulez que le texte moins Markup; Donc:
string html; // obtain some arbitrary html.... using (var client = new WebClient()) { html = client.DownloadString("http://stackoverflow.com/questions/2038104"); } // use the html agility pack: http://www.codeplex.com/htmlagilitypack HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(html); StringBuilder sb = new StringBuilder(); foreach (HtmlTextNode node in doc.DocumentNode.SelectNodes("//text()")) { sb.AppendLine(node.Text); } string final = sb.ToString();
Lorsque j'utilise ce code pour analyser Google Homepage à la recherche de texte Tout ce que je reçois est des tonnes de javascript. Quoi qu'il en soit pour éviter cela?
@Wincoder: Voici comment vous supprimez JavasCrrip et CSS du contenu de la page: Stackoverflow.com/questions/13441470/...
La fonction ci-dessous vous aidera à supprimer toutes les balises, scripts, CSS, styles de la chaîne HTML et le convertir en texte brut. Vue Source
private string GetPlainTextFromHtml(string htmlString) { string htmlTagPattern = "<.*?>"; var regexCss = new Regex("(\\<script(.+?)\\</script\\>)|(\\<style(.+?)\\</style\\>)", RegexOptions.Singleline | RegexOptions.IgnoreCase); htmlString = regexCss.Replace(htmlString, string.Empty); htmlString = Regex.Replace(htmlString, htmlTagPattern, string.Empty); htmlString = Regex.Replace(htmlString, @"^\s+$[\r\n]*", "", RegexOptions.Multiline); htmlString = htmlString.Replace(" ", string.Empty); return htmlString; }
J'ai écrit du code pour dépasser le texte brut du balisage et le présenter dans mon article Convertir HTML en texte . Le code présenté est assez simple et léger. P>
J'ai aussi écrit un analyseur HTML léger et je l'ai posté sur GitHub comme HTML singe . Ce serait une solution plus complète et ce serait une tâche simple de convertir le balisage analysé pour obtenir uniquement le texte. Je travaille toujours sur ce projet et je cherche des commentaires sur la façon dont cela fonctionne. P>
Définissez "juste le contenu" ... Tout le HTML est content, vous permettant ainsi de stocker le code HTML. Voulez-vous dire "juste le texte, pas de balisage"? ou quoi?
Pourquoi ne pas vous "xml" l'analyser? De cette façon, vous pouvez lire les nœuds et décider de prendre uniquement le contenu ... Cependant, je ne sais pas si XML analyse peut lire des étiquettes de fermeture automatique.
XML prend en charge les étiquettes de fermeture automatique, mais malheureusement, de nombreux documents HTML contiennent malheureusement de nombreuses balises malformées.
Juste "juste le texte", bien que je ne suis pas d'accord sur le fait que le HTML est content de cela que pour moi, cela ne sert que de structure et qu'il ne serait pas de sens de le stocker.
@Endermb - Dans ce cas, j'ai ajouté un exemple en utilisant HTML Agility Pack