0

私のプログラムはウェブクローラーです。ウェブサイトから画像をダウンロードしようとしています。私のwebcrawlerサイトでは、次のことを行いました:

try
{
    HtmlAgilityPack.HtmlDocument doc = TimeOut.getHtmlDocumentWebClient(mainUrl, false, "", 0, "", "");
    if (doc == null)
    {
        if (wccfg.downloadcontent == true)
        {
            retwebcontent.retrieveImages(mainUrl);
        }
        failed = true;
        wccfg.failedUrls++;
        failed = false;
    }

たとえば、doc が null の場合、mainUrl には以下が含まれます。

http://members.tripod.com/~VanessaWest/bundybowman2.jpg

次に、他のクラスの retrieveImages メソッドにジャンプします。

namespace GatherLinks
{
    class RetrieveWebContent
    {
        HtmlAgilityPack.HtmlDocument doc;
        string imgg;
        int images;

        public RetrieveWebContent()
        {
            images = 0;
        }

        public List<string> retrieveImages(string address)
        {
            try
            {
                doc = new HtmlAgilityPack.HtmlDocument();
                System.Net.WebClient wc = new System.Net.WebClient();
                List<string> imgList = new List<string>();
                doc.Load(wc.OpenRead(address));
                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);
                    if (src.Value.StartsWith("http") || src.Value.StartsWith("https") || src.Value.StartsWith("www"))
                    {
                        images++;
                        string[] arr = src.Value.Split('/');
                        imgg = arr[arr.Length - 1];
                        //imgg = Path.GetFileName(new Uri(src.Value).LocalPath);
                        //wc.DownloadFile(src.Value, @"d:\MyImages\" + imgg);
                        wc.DownloadFile(src.Value, "d:\\MyImages\\" + Guid.NewGuid() + ".jpg");
                    }
                }

                return imgList;
            }
            catch
            {
                Logger.Write("There Was Problem Downloading The Image: " + imgg);
                return null;

            }
        }
    }
}

今、ブレークポイントを使用して行ごとにステップを実行し、この行を実行した後:

HtmlNodeCollection imgs = doc.DocumentNode.SelectNodes("//img[@src]");

変数 imgs がヌルです。次に、null かどうかを確認する次の行で、最後までジャンプして何もしません。

http://members.tripod.com/~VanessaWest/bundybowman2.jpgから画像をダウンロードできるようにするにはどうすればよいですか?

編集**

public List<string> retrieveImages(string address)
        {
            try
            {
                doc = new HtmlAgilityPack.HtmlDocument();
                System.Net.WebClient wc = new System.Net.WebClient();
                List<string> imgList = new List<string>();
                doc.Load(wc.OpenRead(address));
                string t = doc.DocumentNode.InnerText;
                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"];
                    wc.DownloadFile(src.Value, "d:\\MyImages\\" + Guid.NewGuid() + ".jpg");
                    imgList.Add(src.Value);
                    if (src.Value.StartsWith("http") || src.Value.StartsWith("https") || src.Value.StartsWith("www"))
                    {
                        images++;
                        string[] arr = src.Value.Split('/');
                        imgg = arr[arr.Length - 1];
                        //imgg = Path.GetFileName(new Uri(src.Value).LocalPath);
                        //wc.DownloadFile(src.Value, @"d:\MyImages\" + imgg);
                        wc.DownloadFile(src.Value, "d:\\MyImages\\" + Guid.NewGuid() + ".jpg");
                    }
                }

                return imgList;
            }
            catch
            {
                Logger.Write("There Was Problem Downloading The Image: " + imgg);
                return null;

            }
        }
4

1 に答える 1

1

WebClient が返すデータの内部を見ると、Html ページではなく、画像のビットデータがあることがわかります。

doc.Load(wc.OpenRead(address));
Console.WriteLine(doc.DocumentNode.InnerText);
于 2013-08-28T08:20:22.080 に答える