Convertire la pagina Web in testo semplice ...?

c# html-agility-pack regex

Domanda

Sto cercando di convertire la pagina web in un testo semplice. Ma se ho incontrato il tavolo, ho ricevuto anche i tag td e tr. Se sostituisco quei tag tabella, non riesco a ottenere parte del contenuto.

Ecco il mio codice

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

Si prega di controllare e dimmi come posso ottenere il contenuto dalla tabella senza ottenere tag td e tr.

Risposta accettata

Se si utilizza il pacchetto Agility HTML per analizzare la tabella, non è necessario rimuovere i tag HTML con la propria espressione regolare. Esistono alcuni buoni esempi di tabelle di analisi che utilizzano il pacchetto HTML Agility qui su SO. ex: HTML Agility pack: tabelle di analisi


Risposta popolare

Puoi usare il InnerText del corpo:

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;

Successivamente, potresti voler comprimere spazi e nuove linee:

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;

Nota, tuttavia, che mentre funziona in questo caso, markup come hello<br>world o hello<i>world</i> sarà convertito da InnerText a helloworld - rimuovendo i tag. È difficile risolvere questo problema, poiché la visualizzazione è spesso determinata dal CSS, non solo dal markup.




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché