5

私はc#が初めてで、次の問題について本当に助けが必要です。特定のパターンを持つ Web ページから写真の URL を抽出したいと考えています。たとえば、次のパターン name_412s.jpg を持つすべての画像を抽出したいと考えています。次のコードを使用して html から画像を抽出しますが、それを適応させる方法がわかりません。

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

また、結果を xml ファイルに書き込む必要があります。それも手伝ってもらえますか?

ありがとうございました !

4

1 に答える 1

3

クエリ結果を制限するには、XPath に条件を追加する必要があります。たとえば、そのファイル名を含む属性を持つ要素//img[contains(@src, 'name_412s.jpg')]のみに結果を制限します。imgsrc

結果を XML に書き出す限り、新しい XML ドキュメントを作成し、一致する要素をそこにコピーする必要があります。HtmlAgilityPack ノードを XmlDocument に直接インポートすることはできないため、すべての属性を手動でコピーする必要があります。例えば:

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");
}
于 2012-11-17T23:42:20.183 に答える