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


自己開發的公眾號,可以領取淘寶內部優惠券

來到新公司后第一個任務就是讓我給編輯部的人抓文章,文章抓取工具公司已經開發了一個,我也就直接拿來用了,結果用的很不習慣,操作太繁瑣里面的代碼邏輯也是比較混亂。所以我就大刀闊斧對它進行了一番修改。我主要還是希望能使這個工具盡量的通用一些,雖說各個網站都不一樣,但抓了幾天后還是發現有些共同的東西的。通過設置各個元素的xpath表達式,基本可以解決大部分的網站抓取。

1.抽取出文章列表的標題鏈接 ,一般的標題鏈接都是放在ul或者是div里面的a標簽,而這些ul和div往往都會設置一個class屬性,於是文章的xpath一般可以設置://div[@class='title']

2.列表頁都是會有分頁的,通過設置起始頁和末頁的大小,進行一個循環即可

3.根據上面的文章鏈接獲取內容的鏈接后,就可以發出一個http請求獲取正文部分,正文部分如果是文本還是比較好解決,最多的要求就是去掉每個網站的廣告。運氣好些你會碰到一些仁慈點的網站,廣告所在的元素會有一些明顯的特征,如加了id或是class屬性,這樣就可以設置要過濾的節點來進行過濾

4.暫時還在想...............

 最后要講講文章正文部分不單單是文本呢,有圖片的,甚至還有下載資料(如rar,zip壓縮包)的 怎么辦。起初工具里是可以支持下載圖片的,而且我發現它使用的是WebClient 實現文件下載的。如果下載地址是絕對定位的形式可以下載。如果圖片是根據參數動態生成的就麻煩了,會報Uri格式錯誤。

最后下載的實現大概這樣:

 1             Stream stream = _response.GetResponseStream();
 2             FileStream fs =  new FileStream(filePath + fileName, FileMode.Create);
 3 
 4              // 1kb下載
 5               // byte[] _buffer=new byte[1024];
 6               // int count = stream.Read(_buffer, 0, _buffer.Length);
 7               // while (count > 0)
 8               // {
 9               //     fs.Write(_buffer, 0, _buffer.Length);
10               //     count = stream.Read(_buffer, 0, _buffer.Length);
11               // }
12 
13               // fs.Flush();
14               // fs.Close();
15               // stream.Close();
16              
17               // 逐字節下載
18              int size;
19              while ((size = stream.ReadByte()) != - 1)
20             {
21                 fs.WriteByte(Convert.ToByte(size));
22             }
23             stream.Close();
24             fs.Flush();

25             fs.Close(); 

 

 

 

 現在下載是一個字節一個字節來從Stream中讀取,感覺比較慢些。自己也試了1kb來讀取可是發現讀取的文章圖片是這樣的:

 

 

不僅圖片有問題,下載的rar這些文件也是打不開的。如果一個字節一個字節則一切都OK:

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM