转载

抓取网页上的图片信息

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

正文到此结束
Loading...