熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

采集網頁圖片代碼

2013-11-13 09:46:15  來源: .NET編程 
    采集網頁上圖片的主要關鍵是在怎麼解析出頁面代碼裡那些img標簽的src屬性在網上找了下大多都是通過字符串操作找出img標簽這種方式操作起來比較麻煩而且代碼看起來比較累這裡我用的方法是通過WebBrowser來加載一個頁面然後HTMLDocument類來操作省去了字符串操作的步驟直接調用GetElementsByTagName把所有圖片地址返回到一個HtmlElementCollection對象裡
   
    代碼如下
   
    using System;
   
    using SystemCollectionsGeneric;
   
    using SystemLinq;
   
    using SystemText;
   
    using SystemTextRegularExpressions;
   
    using SystemNet;
   
    using SystemIO;
   
    using SystemWindowsForms;
   
    namespace WindowsFormsApplication
   
    {
   
    public class GatherPic
   
    {
   
    private string savePath;
   
    private string getUrl;
   
    private WebBrowser wb;
   
    private int iImgCount;
   
    //初始化參數
   
    public GatherPic(string sWebUrl string sSavePath)
   
    {
   
    thisgetUrl = sWebUrl;
   
    thissavePath = sSavePath;
   
    }
   
    //開始采集
   
    public bool start()
   
    {
   
    if (getUrlTrim()Equals())
   
    {
   
    MessageBoxShow(哪來的蝦米連網址都沒輸!
   
    return false;
   
    }
   
    thiswb = new WebBrowser()
   
    thiswbNavigate(getUrl)
   
    //委托事件
   
    thiswbDocumentCompleted += new SystemWindowsFormsWebBrowserDocumentCompletedEventHandler(DocumentCompleted)
   
    return true;
   
    }
   
    //WebBrowserDocumentCompleted委托事件
   
    private void DocumentCompleted(object sender WebBrowserDocumentCompletedEventArgs e)


   
    {
   
    //頁面裡框架iframe加載完成不掉用SearchImgList()
   
    if (eUrl != wbDocumentUrl) return;
   
    SearchImgList()
   
    }
   
    //檢查出所有圖片並采集到本地
   
    public void SearchImgList()
   
    {
   
    string sImgUrl;
   
    //取得所有圖片地址
   
    HtmlElementCollection elemColl = thiswbDocumentGetElementsByTagName(img
   
    thisiImgCount = elemCollCount;
   
    foreach (HtmlElement elem in elemColl)
   
    {
   
    sImgUrl = elemGetAttribute(src
   
    //調用保存遠程圖片函數
   
    SaveImageFromWeb(sImgUrl thissavePath)
   
    }
   
    }
   
    //保存遠程圖片函數
   
    public int SaveImageFromWeb(string imgUrl string path)
   
    {
   
    string imgName = imgUrlToString()Substring(imgUrlToString()LastIndexOf(/) +
   
    path = path + \\ + imgName;
   
    string defaultType = jpg;
   
    string[] imgTypes = new string[] { jpg jpeg png gif bmp };
   
    string imgType = imgUrlToString()Substring(imgUrlToString()LastIndexOf())
   
    foreach (string it in imgTypes)
   
    {
   
    if (imgTypeToLower()Equals(it))
   
    break;
   
    if (itEquals(bmp))
   
    imgType = defaultType;
   
    }
   
    try
   
    {
   
    HttpWebRequest request = (HttpWebRequest)WebRequestCreate(imgUrl)
   
    requestUserAgent = Mozilla/ (MSIE ; Windows NT ; NatasRobot);
   
    requestTimeout = ;
   
    WebResponse response = requestGetResponse()
   
    Stream stream = responseGetResponseStream()
   
    if (responseContentTypeToLower()StartsWith(image/))
   
    {
   
    byte[] arrayByte = new byte[];
   
    int imgLong = (int)responseContentLength;
   
    int l = ;
   
    // CreateDirectory(path)
   
    FileStream fso = new FileStream(path FileModeCreate)
   
    while (l < imgLong)
   
    {
   
    int i = streamRead(arrayByte
   
    fsoWrite(arrayByte i)
   
    l += i;
   
    }


    
    fsoClose()
   
    streamClose()
   
    responseClose()
   
    return ;
   
    }
   
    else
   
    {
   
    return ;
   
    }
   
    }
   
    catch (WebException)
   
    {
   
    return ;
   
    }
   
    catch (UriFormatException)
   
    {
   
    return ;
   
    }
   
    }
   
    }
   
    }
   
    //調用代碼
   
    GatherPic gatherpic = new GatherPic(C:\test
   
    //請確保c:\下存在test路徑
   
    gatherpicstart()


From:http://tw.wingwit.com/Article/program/net/201311/11544.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.