Estrazione degli URL delle immagini da html in c # utilizzando il pacchetto agility html e scrivendoli in un file xml

c# html-agility-pack xml

Domanda

Sono nuovo di c # e ho davvero bisogno di aiuto con il seguente problema. Desidero estrarre gli URL delle foto da una pagina web con uno schema specifico. Per esempio desidero estrarre tutte le immagini che hanno il seguente pattern name_412s.jpg. Io uso il seguente codice per estrarre immagini da html, ma non so come adattarlo.

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

Devo anche scrivere i risultati in un file xml. Puoi aiutarmi anche con quello?

Grazie !

Risposta accettata

Per limitare i risultati della query, è necessario aggiungere una condizione al proprio XPath. Ad esempio, //img[contains(@src, 'name_412s.jpg')] limiterà i risultati solo agli elementi img che hanno un attributo src che contiene quel nome di file.

Per quanto riguarda la scrittura dei risultati in XML, è necessario creare un nuovo documento XML e quindi copiare gli elementi corrispondenti in esso. Dal momento che non sarai in grado di importare direttamente un nodo HtmlAgilityPack in un XmlDocument, dovrai copiare manualmente tutti gli attributi. Per esempio:

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



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché