解析HTML以使用C#获取内容

我正在编写一个抓取一组网页的应用程序。 而不是采取页面的整个源代码,我想采取所有内容并存储,并能够将页面作为纯文本存储在数据库中。 内容将在其他应用程序中使用,而不是由用户阅读,因此不需要它完全是人类可读的。

起初,我正在考虑使用正则表达式,但我无法控制网页的有效性,并且很有可能没有正则表达式会给我内容。

如果我在字符串中有源代码,我怎样才能将该源代码串转换为C#中的内容?

它不是100%清楚你想要什么,但我假设你想要文本减去标记; 所以:

string html; // obtain some arbitrary html.... using (var client = new WebClient()) { html = client.DownloadString("http://stackoverflow.com/questions/2038104"); } // use the html agility pack: http://www.codeplex.com/htmlagilitypack HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(html); StringBuilder sb = new StringBuilder(); foreach (HtmlTextNode node in doc.DocumentNode.SelectNodes("//text()")) { sb.AppendLine(node.Text); } string final = sb.ToString(); 

请不要自己解析HTML! 您不能仅使用标准正则表达式来解析HTML – 这是不可能的。

那里有大量的免费图书馆。 HTML Agility Pack是.NET世界上最好的免费软件之一 。

HTML Agility Pack也支持格式错误的文档,这是正则表达式或其他基本解析(如XML)几乎不会做的事情。

下面的函数将帮助从html字符串中删除所有HTML标记,脚本,CSS,样式并将其转换为纯文本。 查看源

 private string GetPlainTextFromHtml(string htmlString) { string htmlTagPattern = "<.*?>"; var regexCss = new Regex("(\\)|(\\)", RegexOptions.Singleline | RegexOptions.IgnoreCase); htmlString = regexCss.Replace(htmlString, string.Empty); htmlString = Regex.Replace(htmlString, htmlTagPattern, string.Empty); htmlString = Regex.Replace(htmlString, @"^\s+$[\r\n]*", "", RegexOptions.Multiline); htmlString = htmlString.Replace(" ", string.Empty); return htmlString; } 

我编写了代码来从标记中删除原始文本并将其呈现在我的文章中将HTML转换为文本 。 提供的代码非常简单和轻量级。

我还编写了一个轻量级HTML解析器,并将其作为HTML Monkey发布在Github上。 这将是一个更完整的解决方案,将解析后的标记转换为仅获取文本将是一项简单的任务。 我还在研究这个项目,正在寻找有关它如何工作的反馈。