Конвертировать веб-страницу в обычный текст ..?

c# html-agility-pack regex

Вопрос

Я пытаюсь преобразовать веб-страницу в простой текст. Но если я столкнулся с таблицей, то получаю td и tr теги. Если я заменю теги таблицы, я не могу получить часть содержимого.

Вот мой код

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

Пожалуйста, проверьте его и скажите, как я могу получить содержимое из таблицы, не получая td и tr теги.

Принятый ответ

Если вы используете HTML Agility pack для анализа таблицы, вам не нужно удалять HTML-теги с вашим регулярным выражением. Есть несколько хороших примеров синтаксического анализа таблиц, использующих HTML Agility pack здесь, на SO. ex: пакет гибкости HTML - таблицы разбора


Популярные ответы

Вы можете использовать InnerText :

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;

Затем вы можете захотеть свернуть места и новые строки:

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

Обратите внимание, однако, что пока он работает в этом случае, разметка, такая как hello<br>world или hello<i>world</i> будет преобразована InnerText в helloworld - удаление тегов. Трудно решить эту проблему, поскольку отображение часто определяется CSS, а не только разметкой.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow