25

HTMLAgilityPack をダウンロードしたばかりですが、ドキュメントに例がありません。

Web サイトからすべての画像をダウンロードする方法を探しています。物理イメージではなく、アドレス文字列。

<img src="blabalbalbal.jpeg" />

各 img タグのソースを取得する必要があります。図書館とそれが提供できるものを感じたいだけです。誰もが、これが仕事に最適なツールだと言いました。

編集

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

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

                         //I can't use the Descendants method. It doesn't appear.
        var ImageURLS = document.desc
                   .Select(e => e.GetAttributeValue("src", null))
                   .Where(s => !String.IsNullOrEmpty(s));        
    }
4

2 に答える 2

45

次のように、LINQ を使用してこれを行うことができます。

var document = new HtmlWeb().Load(url);
var urls = document.DocumentNode.Descendants("img")
                                .Select(e => e.GetAttributeValue("src", null))
                                .Where(s => !String.IsNullOrEmpty(s));

編集: このコードは実際に機能するようになりました。書き忘れていましたdocument.DocumentNode

于 2010-01-21T23:56:47.297 に答える
10

彼らの1つの例に基づいていますが、XPathを変更しています:

 HtmlDocument doc = new HtmlDocument();
 List<string> image_links = new List<string>();
 doc.Load("file.htm");
 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//img"))
 {
    image_links.Add( link.GetAttributeValue("src", "") );
 }

私はこの拡張機能を知らないので、配列を別の場所に書き出す方法はわかりませんが、少なくともデータは取得できます。(また、配列を正しく定義していません。申し訳ありません)。

編集

あなたの例を使用して:

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

        HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
        List<string> image_links = new List<string>();
        document.Load(source);

        foreach(HtmlNode link in document.DocumentElement.SelectNodes("//img"))
        {
          image_links.Add( link.GetAttributeValue("src", "") );
       }


    }
于 2010-01-22T00:04:44.547 に答える