Разбор HTML для получения контента с использованием C # - PullRequest
9 голосов
/ 10 января 2010

Я пишу приложение, которое сканирует группу моих веб-страниц. Вместо того, чтобы брать весь исходный код страницы, я хотел бы взять весь контент и сохранить его и иметь возможность сохранять страницу в виде простого текста в базе данных. Контент будет использоваться в других приложениях и не будет читаться пользователями, поэтому нет необходимости, чтобы он был полностью читаемым человеком.

Сначала я думал об использовании регулярных выражений, но я не могу контролировать достоверность веб-страниц, и есть большой шанс, что никакое регулярное выражение не даст мне контент.

Если у меня есть исходный код в строке, как я могу превратить эту строку исходного кода в просто содержимое в C #?

Ответы [ 4 ]

19 голосов
/ 10 января 2010

Не на 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();
7 голосов
/ 10 января 2010

Пожалуйста, пожалуйста не разбирайте HTML самостоятельно! Вы не можете использовать только стандартное регулярное выражение для разбора HTML - это невозможно.

Существует множество бесплатных библиотек. Одним из лучших бесплатных приложений в мире .NET является HTML Agility Pack .

HTML Agility Pack также поддерживает искаженные документы, чего почти никогда не сможет выполнить регулярное выражение или другой базовый анализ, такой как XML.

2 голосов
/ 07 октября 2014

Функция ниже поможет удалить все теги HTML, скрипты, CSS, стили из строки HTML и преобразовать ее в обычный текст. просмотр источника

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;
}
0 голосов
/ 27 ноября 2017

Я написал код, чтобы убрать необработанный текст из разметки и представить его в моей статье Конвертировать HTML в текст . Представленный код довольно прост и легок.

Я также написал легкий анализатор HTML и разместил его на Github как HTML Monkey . Это было бы более полное решение, и было бы простой задачей преобразовать разобранную разметку, чтобы получить только текст. Я все еще работаю над этим проектом и ищу отзывы о том, как он работает.

...