Extraer imágenes de URL de html en c # usando html agility pack y escribirlas en un archivo xml

c# html-agility-pack xml

Pregunta

Soy nuevo en c # y realmente necesito ayuda con el siguiente problema. Deseo extraer las urls de fotos de una página web que tienen un patrón específico. Por ejemplo, deseo extraer todas las imágenes que tienen el siguiente patrón name_412s.jpg. Utilizo el siguiente código para extraer imágenes de html, pero no sé cómo adaptarlo.

public void Images()
    {
        WebClient x = new WebClient();
        string source = x.DownloadString(@"http://www.google.com");

        HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
        document.Load(source);

        foreach(HtmlNode link in document.DocumentElement.SelectNodes("//img")
        {
          images[] = link["src"];
       }
}

También necesito escribir los resultados en un archivo xml. ¿Puedes ayudarme también con eso?

Gracias !

Respuesta aceptada

Para limitar los resultados de la consulta, debe agregar una condición a su XPath. Por ejemplo, //img[contains(@src, 'name_412s.jpg')] limitará los resultados solo a los elementos img que tienen un atributo src que contiene ese nombre de archivo.

En cuanto a escribir los resultados en XML, deberá crear un nuevo documento XML y luego copiar los elementos correspondientes en él. Como no podrá importar directamente un nodo HtmlAgilityPack en un XmlDocument, tendrá que copiar manualmente todos los atributos. Por ejemplo:

using System.Net;
using System.Xml;

// ...

public void Images()
{
    WebClient x = new WebClient();
    string source = x.DownloadString(@"http://www.google.com");
    HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
    document.Load(source);
    XmlDocument output = new XmlDocument();
    XmlElement imgElements = output.CreateElement("ImgElements");
    output.AppendChild(imgElements);
    foreach(HtmlNode link in document.DocumentElement.SelectNodes("//img[contains(@src, '_412s.jpg')]")
    {
        XmlElement img = output.CreateElement(link.Name);
        foreach(HtmlAttribute a in link.Attributes)
        {
            img.SetAttribute(a.Name, a.Value)
        }
        imgElements.AppendChild(img);
    }
    output.Save(@"C:\test.xml");
}


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é