• 抓取网页上的图片信息


      最近在学习的时候总结了下,发现既然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标签的图片了。

  • 相关阅读:
    购物菜单
    数据库
    增删改查
    页面交互
    计算器
    2020.9.21
    团队-团队编程项目中国象棋-项目总结
    团队-团队编程项目作业名称-最终程序
    课后作业-阅读任务-阅读提问-4
    《20171130-构建之法:现代软件工程-阅读笔记》
  • 原文地址:https://www.cnblogs.com/ouzining/p/5038232.html
Copyright © 2020-2023  润新知