HTML Agility Pack - Получить сводную страницу

html html-agility-pack parsing

Вопрос

Как я могу использовать HTML Agility Pack, чтобы получить первый абзац текста из тела HTML-файла. Я создаю инструмент представления ссылок в стиле DIGG и хочу получить заголовок и первый абзац текста. Название легко, любые предложения о том, как я могу получить первый абзац текста из тела? Я думаю, это может быть в пределах P или DIV в зависимости от страницы.

Принятый ответ

Этот html, который вы контролируете? Если это так, вы можете дать p идентификатору или классу и найти его через

//p[@id=\"YOUR ID\"] or //p[@class=\"YOUR CLASS\"]

EDIT: Поскольку вы не контролируете 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;
}

Популярные ответы

Пакет agility использует xpath для запроса загрузки html. Вы просто используете простой оператор xpath. Что-то вроде...

HtmlDocument htmldoc = new HtmlDocument();
htmldoc.LoadHtml(content);

HtmlNodeCollection firstParagraph = htmldoc.DocumentNode.SelectNodes("//p[1]");


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему