Extrahieren von Bildern URLs aus HTML in c # mit HTML-Agility-Pack und Schreiben sie in eine XML-Datei

c# html-agility-pack xml

Frage

Ich bin neu in c # und ich brauche wirklich Hilfe mit dem folgenden Problem. Ich möchte die Fotos URLs von einer Webseite extrahieren, die ein bestimmtes Muster haben. Zum Beispiel möchte ich alle Bilder extrahieren, die das folgende Muster haben: name_412s.jpg. Ich verwende den folgenden Code, um Bilder aus HTML zu extrahieren, aber ich weiß nicht, wie ich sie anpassen soll.

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

Ich muss auch die Ergebnisse in eine XML-Datei schreiben. Kannst du mir auch dabei helfen?

Vielen Dank !

Akzeptierte Antwort

Um die Abfrageergebnisse einzuschränken, müssen Sie Ihrem XPath eine Bedingung hinzufügen. Zum Beispiel wird //img[contains(@src, 'name_412s.jpg')] die Ergebnisse auf nur img Elemente beschränken, die ein src Attribut haben, das diesen Dateinamen enthält.

Was das Schreiben der Ergebnisse in XML betrifft, müssen Sie ein neues XML-Dokument erstellen und dann die übereinstimmenden Elemente darin kopieren. Da Sie einen HtmlAgilityPack-Knoten nicht direkt in ein XmlDocument importieren können, müssen Sie alle Attribute manuell kopieren. Zum Beispiel:

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


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum