Esempio n. 1
0
        /// <summary>
        /// Возвращает основной текст новости
        /// </summary>
        /// <param name="htmlString"></param>
        /// <returns></returns>
        public static string ParseNewsBody(string htmlString)
        {
            List <HtmlNode> paragraphs = new List <HtmlNode>();
            var             newsText   = String.Empty;
            var             html       = new HtmlDocument();

            html.LoadHtml(htmlString);

            // Чаще всего текст новости лежит здесь (div с id "article_body")
            var articleFullText = html.GetElementbyId("article_body");

            if (articleFullText == null)
            {
                // Но иногда он в теге "main"
                var mainNode = html.DocumentNode.Descendants("main").ToList();
                if (mainNode.Count != 0)
                {
                    articleFullText = mainNode[0];
                }
            }

            // Если все таки не удалось найти основной текст
            if (articleFullText == null)
            {
                return("");
            }

            paragraphs = articleFullText.Descendants("p").ToList();


            foreach (var paragraph in paragraphs)
            {
                using (var sw = new StringWriter())
                {
                    // Используется библиотеку, которая извлекает текст из html-тегов
                    HtmlToText.ConvertTo(paragraph, sw);

                    sw.Flush();
                    newsText += sw.ToString();
                }
            }

            // Добавляем дополнительные пустые строки после абзацев для большей читаемости.
            newsText = Regex.Replace(newsText, "\n", "\n\n");

            // Убираем лишние пустые строки.
            newsText = Regex.Replace(newsText, "\n\n\n\n", "\n\n");

            return(newsText.Trim());
        }