Paquete de agilidad HTML - Obtener resumen de la página

html html-agility-pack parsing

Pregunta

¿Cómo usaría el paquete de agilidad HTML para obtener el primer párrafo del texto del cuerpo de un archivo HTML? Estoy creando una herramienta de envío de enlaces de estilo DIGG y quiero obtener el título y el primer párrafo del texto. El título es fácil, ¿alguna sugerencia sobre cómo puedo obtener el primer párrafo del texto del cuerpo? Supongo que podría estar dentro de P o DIV dependiendo de la página.

Respuesta aceptada

¿Es este html que controlas? Si es así, podría dar a la p un id o una clase y encontrarla a través de

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

EDITAR: Ya que no controla el html, tal vez lo siguiente funcione. Toma todos los HtmlTextNodes e intenta encontrar una agrupación de texto mayor que el umbral especificado. Está lejos de ser perfecto, pero podría ponerte en la dirección correcta.

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;
}

Respuesta popular

El paquete de agilidad usa xpath para consultar la carga html que acaba de usar una simple declaración xpath. Algo como...

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

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



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué