我正在編寫一個應用程序來抓取我的一組網頁。我不想採用整個頁面的源代碼,而是想把所有的內容都存儲起來並存儲起來,並且能夠將頁面作爲純文本存儲在數據庫中。該內容將用於其他應用程序,而不是由用戶閱讀,因此不需要它是完全人性化的。解析HTML以獲取使用C#的內容
起初,我正在考慮使用正則表達式,但我無法控制網頁的有效性,並且很有可能沒有正則表達式會給我內容。
如果我有一個字符串內的源代碼,我該如何將該源代碼字符串轉換爲C#中的內容?
我正在編寫一個應用程序來抓取我的一組網頁。我不想採用整個頁面的源代碼,而是想把所有的內容都存儲起來並存儲起來,並且能夠將頁面作爲純文本存儲在數據庫中。該內容將用於其他應用程序,而不是由用戶閱讀,因此不需要它是完全人性化的。解析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();
這看起來很完美,非常感謝! – 2010-01-10 19:01:21
當我使用此代碼解析搜索文本的谷歌主頁時,我所得到的就是噸的JavaScript。無論如何要避免這一點? – 2013-08-21 09:39:28
@WinCoder:這是如何從頁面內容中刪除JavaScrip和CSS:http://stackoverflow.com/questions/13441470/htmlagilitypack-remove-script-and-style – user1892410 2015-06-04 20:22:46
請你做不是你自己解析HTML!你不能使用標準的正則表達式來解析HTML - 這是不可能的。
有大量的免費圖書館。 .NET世界中最好的免費軟件之一是HTML Agility Pack。
HTML Agility Pack也支持格式不正確的文檔,這是正則表達式或其他基本解析(如XML幾乎不會執行的操作)。
以下功能將有助於從HTML字符串中移除所有的HTML標籤,腳本,CSS樣式,並將其轉換爲純文本。 view source
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(" ", string.Empty);
return htmlString;
}
我寫代碼來剔除從標記的原始文本,並在我的文章Convert HTML to Text出示。所提供的代碼非常簡單和輕量級。
我還寫了一個輕量級的HTML解析器,並將它發佈到Github上作爲HTML Monkey。這將是一個更完整的解決方案,將解析標記轉換爲僅獲取文本將是一項簡單的任務。我仍在研究這個項目,並且正在尋找關於它如何工作的反饋。
定義「只是內容」...所有的html都是內容,所以你可以只存儲html。你的意思是「只是文字,沒有標記」?或者是什麼? – 2010-01-10 18:51:53
爲什麼不用「XML」解析它們? ,這樣你可以讀取節點並決定只取內容......但是我不確定XML解析是否可以讀取自閉標籤。 – 2010-01-10 18:53:29
XML支持自閉標籤,但不幸的是許多所謂的HTML文檔不幸的是包含許多格式不正確的標籤 – Eilon 2010-01-10 18:53:59