10

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

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

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

4

4 回答 4

22

不是 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();
于 2010-01-10T18:58:25.047 回答
7

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

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

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

于 2010-01-10T18:52:36.540 回答
2

下面的函数将有助于从 html 字符串中删除所有 HTML 标签、脚本、css、样式并将其转换为纯文本。查看源代码

private string GetPlainTextFromHtml(string htmlString)
{
    string htmlTagPattern = "<.*?>";
    var regexCss = new Regex("(\\<script(.+?)\\</script\\>)|(\\<style(.+?)\\</style\\>)", 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("&nbsp;", string.Empty);

    return htmlString;
}
于 2014-10-07T17:44:44.277 回答
0

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

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

于 2017-11-27T16:42:10.840 回答