zoukankan      html  css  js  c++  java
  • 抓取网页上的图片信息

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

  • 相关阅读:
    秒杀应用的MySQL数据库优化
    mongodb三种存储引擎高并发更新性能专题测试
    一次项目实践中DBCP数据库连接池性能优化
    初识中间件之消息队列
    Android性能测试--内存
    JVM源码分析之栈溢出完全解读
    case when then end
    工厂模式
    单例模式
    隐藏响应的server,X-Powered-By
  • 原文地址:https://www.cnblogs.com/ouzining/p/5038232.html
Copyright © 2011-2022 走看看