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