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.
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
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.