如何从网站链接获取List <string>图像?</string>

时间:2012-09-14 05:38:53

标签: c#

我想从网站链接建立一个图像列表,然后再将图像保存/下载到硬盘。

这是我从网站/网址获取链接的方式:

private List<string> getLinks(HtmlAgilityPack.HtmlDocument document)
        {

            List<string> mainLinks = new List<string>();
            var linkNodes = document.DocumentNode.SelectNodes("//a[@href]");
            if (linkNodes != null)
            {
                foreach (HtmlNode link in linkNodes)
                {
                    var href = link.Attributes["href"].Value;
                    if (href.StartsWith("http://") ==true || href.StartsWith("https://") ==true || href.StartsWith("www.") ==true) // filter for http 
                    {
                        mainLinks.Add(href);
                    }
                }
            }
            return mainLinks;

        }

然后我在这个测试函数中使用来构建一个来自url的所有链接的列表:

private List<string> test(string url, int levels, DoWorkEventArgs eve)
        {

            HtmlWeb hw = new HtmlWeb();
            List<string> webSites;

                        try
            {
                doc = hw.Load(url);
                webSites = getLinks(doc);
                //retriveImages();

所以webSites是一个List会有来自主网站url的所有链接例如,如果它的google.com然后在webSites我将有19个项目,每个是来自google.com的链接

而retrieveImages()是:

private void retrieveImages()
        {
            var nodes = doc.DocumentNode.SelectNodes("//img");
            foreach (var node in nodes)
            {
                List<string> images = new List<string>();
                images.Add(node.Name);
            } 

        }

并且retrieveImages()肯定不是好代码,也不起作用。如果我使用它移动//并调用retrieveImages(),则没有任何事情发生webSites List为空。

我想做的是在函数retrieveImages()中立即从当前站点/链接构建图像列表,然后还将图像下载到硬盘中我建立的列表中的图像。 / p>

1 个答案:

答案 0 :(得分:0)

private List<string> retrieveImages()
{
  List<string> imgList = new List<string>();
  HtmlDocument doc = new HtmlDocument();
  doc.Load("file.htm"); //or whatever HTML file you have
  HtmlNodeCollection imgs = doc.DocumentNode.SelectNodes("//img[@src]");
  if (imgs == null) return new List<string>();

  foreach (HtmlNode img in imgs)
  {
   if (img.Attributes["src"] == null)
      continue;
   HtmlAttribute src = img.Attributes["src"];

   imgList.Add(src.Value);
   //Do something with src.Value such as Get the image and save it locally
   // Image img = GetImage(src.Value)
   // img.Save(aLocalFilePath);
  }
return imgList;
}

private Image GetImage(string url)
{
    System.Net.WebRequest request = System.Net.WebRequest.Create(url);

    System.Net.WebResponse response = request.GetResponse();
    System.IO.Stream responseStream = response.GetResponseStream();

    Bitmap bmp = new Bitmap(responseStream);

    responseStream.Dispose();

    return bmp;
}