抓取网页上的图片信息

  最近在学习的时候总结了下,发现既然js能通过元素的id去找到这个元素,那么我用c#是不是可以这样去搞呢,但是我们事先不知道他们的id,还好的是,我并非想全部去抓取某个元素里的内容,我只是想抓取某一类元素的内容,那图片来说吧,我要抓取某个网站里面的图片。

  先说下原理:利用WebBrowser类中的GetElementsByTagName(元素类型)方法我们就可以将网页中的某种类型的元素获取到,结果一集合的方式得出,例如GetElementsByTagName("img"),我们就得到图片类型的集合了。得到图片的集合后,我们再对集合里的元素进行解析,像这个<img src="http://img1.qq.com/www/xxx.gif"  />,看到了吧,有这个src我们就可以搞到东西了。

  下面面填下主要代码:

  首先我们获取网页上的所需元素集合如img:

        /// <summary>
        /// 检查出所有图片并采集到本地
        /// </summary>
        public void SearchImgList()
        {
            //取得所有图片地址
            string sImgUrl;
            WebBrowser wb = new WebBrowser();
            HtmlElementCollection elemColl = this.wb.Document.GetElementsByTagName("img");
            this.iImgCount = elemColl.Count;
            List<string> listsrcurl = new List<string>();
            foreach (HtmlElement elem in elemColl)
            {
                sImgUrl = elem.GetAttribute("src");
                listsrcurl.Add(sImgUrl);
            }
        }

我们将“img”元素的集合通过解析后放入listsrcurl中,集合中存放了这些img的url,通过url我们就可以去下载这些图片了

try
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(imgUrl);
                    request.UserAgent = "Mozilla/6.0 (MSIE 6.0; Windows NT 5.1; Natas.Robot)";
                    request.Timeout = 100000;
                    
                    WebResponse response = request.GetResponse();
                    if (response.ContentType.ToLower().StartsWith("image/"))
                    {
                        Stream stream = response.GetResponseStream();
                        byte[] arrayByte = new byte[1024];
                        int imgLong = (int)response.ContentLength;
                        int l = 0;
                        FileStream fso = new FileStream(path, FileMode.Create);//path是保存地址
                        while (l < imgLong)
                        {
                            int i = stream.Read(arrayByte, 0, 1024);
                            fso.Write(arrayByte, 0, i);
                            l += i;
                        }
                        fso.Close();
                        stream.Close();
                        response.Close();
                        
                    }
                    else
                    {
                        return ;
                    }
                }
                catch (WebException)
                {
                    return ;
                }


差不多这些吧,这样可以下到一些使用img标签的图片了。

原文地址:https://www.cnblogs.com/ouzining/p/5038232.html