先給自己定個小目標,比如寫個爬蟲程式

tracy丶傑發表於2017-12-08

先給自己定個小目標,比如寫個爬蟲程式

今天要寫的是一個最簡單的爬蟲​。

##目標:

理工新聞欄目--下面的所有文章,抓取到,並且儲存起來,今天是用檔案的形式儲存下來的,也可以直接存到資料庫裡。

先給自己定個小目標,比如寫個爬蟲程式
下面介紹開發需要的東西:

1.node.js環境(包括npm)

2.你平時喜歡的編輯器(atom,idea,sublime...)

好了,現在可以幹活了。建好你的檔案目錄吧。

先給自己定個小目標,比如寫個爬蟲程式
--data 儲存文章.txt

--images 儲存文章中的圖片

--node_modules node依賴

--app.js 主檔案

下面上程式碼:

/**
 * 一個簡單的node爬蟲程式。可以獲取http://www.cust.edu.cn
 * 裡面的理工新聞欄目下的文章,標題和文章內容會以txt檔案
 * 儲存到/data目錄下,文章中的圖片會儲存在/images目錄下。
 */
var http = require('http');
var cheerio = require('cheerio');
var fs = require('fs');
var request = require('request');

/**
 * 抓取http://www.cust.edu.cn/的理工新聞
 * @type
 */
var cust = {
/**
* 獲取url裡的資料
* @param  {[type]}   url      [獲取url]
* @param  {Function} callback [回撥函式]
* @return {[type]}            [null]
*/
download : function(url, callback){
http.get(url, function(res){
var data = '';
res.setEncoding('utf-8');
res.on('data', function(chunk){
data += chunk;
});
res.on('end', function(){
callback(data);
});
res.on('error', function(err){
if(err) throw err;
callback(null);
});
});
},
/**
* 開始執行爬蟲
* @param  {[type]} url [獲取url]
* @return {[type]}     [null]
*/
getStart : function(url){
cust.download(url, function(d){
if(d){
var $ = cheerio.load(d);
var title = $('#main3 h3').text().trim();
var publishTime = $('#author').text().trim().split('|')[0].split(':')[1];
var content = $('#work p').text();
var img = $('#work img');
cust.saveImg($, img);
cust.saveContent(publishTime+content, title);
}
});
},
/**
* 儲存獲取到的內容
* @param  {[type]} content [文章內容]
* @param  {[type]} title   [文章標題]
* @return {[type]}         [null]
*/
saveContent : function(content, title){
fs.appendFile('./data/' + title + '.txt', content, 'utf-8', function(err){
if(err) throw err;
});
},
/**
* 儲存文章中的圖片
* @param  {[type]} $   [cheerio物件]
* @param  {[type]} img [圖片物件]
* @return {[type]}     [null]
*/
saveImg : function($, img){
img.each(function(i, e){
var imgUrl = 'http://www.cust.edu.cn' + $(this).attr('src').substr(2);
var imgname = imgUrl.split('/')[6];
request.head(imgUrl, function(err, res, body){
	if(err) throw err;
});
request(imgUrl).pipe(fs.createWriteStream('./images/'+imgname));
});
}
};
var baseUrl = 'http://www.cust.edu.cn/lgxw/';
var numStart = 21821;
var numEnd = 24250;
for(var i=numStart; i<=numEnd;i++){
	cust.getStart(baseUrl+i+'.htm');
}
複製程式碼

最後的結果:

文章全儲存到這裡了。/data

先給自己定個小目標,比如寫個爬蟲程式

​圖片全在這裡。 /images

先給自己定個小目標,比如寫個爬蟲程式

本文中程式碼github地址

本文於2016-09-10 15:32:17釋出在麥曉傑的新浪微博

相關文章