-1

ウェブサイトのリンクから画像のリストを作成し、後で画像をハードディスクに保存/ダウンロードしたいと考えています。

これは、ウェブサイト/URLからリンクを取得する方法です:

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には、メインのWebサイトの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 リストは空です。

私がやりたいことは、retrieveImages() 関数で現在のサイト/リンクから画像のリストを作成し、作成したリストの画像をハードディスクにダウンロードすることです。

4

1 に答える 1

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;
}
于 2012-09-14T05:44:12.143 に答える