Convertir la página web en texto plano ...?

c# html-agility-pack regex

Pregunta

Estoy tratando de convertir la página web en un texto plano. Pero si me topé con la tabla, también obtengo las etiquetas td y tr. Si sustituyo esas etiquetas de tabla, no puedo obtener parte del contenido.

Aqui esta mi codigo

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

Verifíquelo y dígame cómo puedo obtener el contenido de la tabla sin obtener las etiquetas td y tr.

Respuesta aceptada

Si está utilizando el paquete de agilidad HTML para analizar la tabla, no necesita eliminar las etiquetas HTML con su expresión regular. Hay algunos buenos ejemplos de tablas de análisis usando el paquete de agilidad de HTML aquí en SO. Ej: paquete de agilidad HTML - tablas de análisis


Respuesta popular

Puedes usar el texto InnerText del cuerpo:

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;

A continuación, es posible que desee contraer espacios y nuevas líneas:

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

Sin embargo, tenga en cuenta que, si bien está funcionando en este caso, InnerText convertirá marcas como hello<br>world o hello<i>world</i> a helloworld , eliminando las etiquetas. Es difícil resolver ese problema, ya que la visualización a menudo está determinada por el CSS, no solo por el marcado.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué