HTML Agility Pack - получить резюме страницы
-
21-09-2019 - |
Вопрос
Как бы я использовал пакет гибкости HTML, чтобы получить первый абзац текста из тела файла HTML. Я строю инструмент подачи ссылок в стиле Digg и хочу получить заголовок и первый абзац текста. Название легко, какие -либо предложения о том, как я могу получить первый абзац текста от тела? Я думаю, что это может быть в пределах p или div в зависимости от страницы.
Решение
Этот HTML, который вы контролируете? Если это так, вы можете дать P идентификатор или класс и найти его через
//p[@id=\"YOUR ID\"] or //p[@class=\"YOUR CLASS\"]
РЕДАКТИРОВАТЬ: Поскольку вы не контролируете HTML, может быть, ниже будет работать. Это требует всех HTMLTextNodes и пытается найти группировку текста, превышающую указанный порог. Это далеко не идеально, но может заставить вас двигаться в правильном направлении.
String summary = FindSummary(page.DocumentNode);
private const int THRESHOLD = 50;
private String FindSummary(HtmlAgilityPack.HtmlNode node) {
foreach (HtmlAgilityPack.HtmlNode childNode in node.ChildNodes) {
if (childNode.GetType() == typeof(HtmlAgilityPack.HtmlTextNode)) {
if (childNode.InnerText.Length >= THRESHOLD) {
return childNode.InnerText;
}
}
String summary = FindSummary(childNode);
if (summary.Length >= THRESHOLD) {
return summary;
}
}
return String.Empty;
}
Другие советы
Пакет гибкости использует XPath для запроса HTML -загрузки, который вы просто используете простой оператор XPATH. Что-то типа...
HtmlDocument htmldoc = new HtmlDocument();
htmldoc.LoadHtml(content);
HtmlNodeCollection firstParagraph = htmldoc.DocumentNode.SelectNodes("//p[1]");