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

文章抓取之下載圖片和文件

2013-11-13 10:20:21  來源: .NET編程 

  來到新公司後第一個任務就是讓我給編輯部的人抓文章文章抓取工具公司已經開發了一個我也就直接拿來用了結果用的很不習慣操作太繁瑣裡面的代碼邏輯也是比較混亂所以我就大刀闊斧對它進行了一番修改我主要還是希望能使這個工具盡量的通用一些雖說各個網站都不一樣但抓了幾天後還是發現有些共同的東西的通過設置各個元素的xpath表達式基本可以解決大部分的網站抓取
    抽取出文章列表的標題鏈接 一般的標題鏈接都是放在ul或者是div裡面的a標簽而這些ul和div往往都會設置一個class屬性於是文章的xpath一般可以設置//div[@class=title]
    列表頁都是會有分頁的通過設置起始頁和末頁的大小進行一個循環即可
    根據上面的文章鏈接獲取內容的鏈接後就可以發出一個http請求獲取正文部分正文部分如果是文本還是比較好解決最多的要求就是去掉每個網站的廣告運氣好些你會碰到一些仁慈點的網站廣告所在的元素會有一些明顯的特征如加了id或是class屬性這樣就可以設置要過濾的節點來進行過濾
    暫時還在想……
    最後要講講文章正文部分不單單是文本呢有圖片的甚至還有下載資料(如rarzip壓縮包)的 怎麼辦起初工具裡是可以支持下載圖片的而且我發現它使用的是WebClient 實現文件下載的如果下載地址是絕對定位的形式可以下載如果圖片是根據參數動態生成的就麻煩了會報Uri格式錯誤
    最後下載的實現大概這樣
                 Stream stream = _responseGetResponseStream()
                 FileStream fs = new FileStream(filePath + fileName FileModeCreate)
   
                 //kb下載
                 //byte[] _buffer=new byte[];
                 //int count = streamRead(_buffer _bufferLength)
                 //while (count >
                 //{
                 //    fsWrite(_buffer _bufferLength)
                 //    count = streamRead(_buffer _bufferLength)
                 //}
   
                 //fsFlush()
                 //fsClose()
                 //streamClose()
   
                 //逐字節下載
                 int size;
                 while ((size = streamReadByte()) !=
                 {
                     fsWriteByte(ConvertToByte(size))
                 }
                 streamClose()
                 fsFlush()
                 fsClose()
   
 


 現在下載是一個字節一個字節來從Stream中讀取感覺比較慢些自己也試了kb來讀取可是發現讀取的文章圖片是這樣的
  
 
不僅圖片有問題下載的rar這些文件也是打不開的如果一個字節一個字節則一切都OK
  
 
 
 
 


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