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

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

如果我有一个字符串中的源代码,如何将该字符串源代码转换为 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 - 这是不可能的。

有吨自由库那里。一个在.NET的世界上最好的免费换新的是 HTML敏捷性包

HTML敏捷包支持格式不正确的文件以及,这恐怕是一个正则表达式或其他基本的解析,如XML几乎从来不会做的。

下面的功能将有助于从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;
}

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top