如何使用HTML Agility Pack检索网站上的所有图像?

时间:2010-01-21 23:53:01

标签: c# parsing html-agility-pack

我刚下载了HTMLAgilityPack,文档中没有任何示例。

我正在寻找一种从网站下载所有图片的方法。地址字符串,而不是物理图像。

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

2 个答案:

答案 0 :(得分:34)

您可以使用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

答案 1 :(得分:9)

基于他们的一个例子,但是修改了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", "") );
       }


    }