¿Cómo obtener img / src o a / hrefs usando Html Agility Pack?

.net c# html html-agility-pack html-parsing

Pregunta

Quiero usar el paquete de agilidad HTML para analizar los enlaces de imagen y href de una página HTML, pero no sé mucho sobre XML o XPath. Aunque he buscado documentos de ayuda en muchos sitios web, no puedo resolver el problema. problema.Además, uso C # en VisualStudio 2005. Y simplemente no puedo hablar inglés con fluidez, así que daré mi más sincero agradecimiento a uno que puede escribir algunos códigos útiles.

Respuesta aceptada

El primer ejemplo en la página de inicio hace algo muy similar, pero considere:

 HtmlDocument doc = new HtmlDocument();
 doc.Load("file.htm"); // would need doc.LoadHtml(htmlSource) if it is not a file
 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
 {
    string href = link["href"].Value;
    // store href somewhere
 }

Así que puedes imaginar que para img @ src, simplemente reemplaza cada a con img , y href con src . Incluso podría ser capaz de simplificar a:

 foreach(HtmlNode node in doc.DocumentElement
              .SelectNodes("//a/@href | //img/@src")
 {
    list.Add(node.Value);
 }

Para el manejo de url relativo, mira la clase Uri .


Respuesta popular

El ejemplo y la respuesta aceptada son incorrectos. No compila con la última versión. Intento algo mas

    private List<string> ParseLinks(string html)
    {
        var doc = new HtmlDocument(); 
        doc.LoadHtml(html);
        var nodes = doc.DocumentNode.SelectNodes("//a[@href]");
        return nodes == null ? new List<string>() : nodes.ToList().ConvertAll(
               r => r.Attributes.ToList().ConvertAll(
               i => i.Value)).SelectMany(j => j).ToList();
    }

Esto funciona para mi



Related

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é