Extraire les URL des images à partir de HTML en C # en utilisant le pack d'agilité HTML et en les écrivant dans un fichier XML

c# html-agility-pack xml

Question

Je suis nouveau sur c # et j'ai vraiment besoin d'aide avec le problème suivant. Je souhaite extraire les URL de photos d’une page Web présentant un motif spécifique. Par exemple, je souhaite extraire toutes les images ayant le motif suivant nom_412s.jpg. J'utilise le code suivant pour extraire des images à partir de HTML, mais je ne sais pas comment l'adapter.

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

J'ai aussi besoin d'écrire les résultats dans un fichier XML. Pouvez-vous aussi m'aider avec ça?

Je vous remercie !

Réponse acceptée

Pour limiter les résultats de la requête, vous devez ajouter une condition à votre XPath. Par exemple, //img[contains(@src, 'name_412s.jpg')] limitera les résultats aux seuls éléments img dotés d'un attribut src contenant ce nom de fichier.

En ce qui concerne l'écriture des résultats au format XML, vous devez créer un nouveau document XML, puis y copier les éléments correspondants. Étant donné que vous ne pourrez pas importer directement un nœud HtmlAgilityPack dans un document XmlDocument, vous devrez copier manuellement tous les attributs. Par exemple:

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi