NodeJS簡單爬蟲

NodeJS簡單爬蟲

  • 最近一直在追火星的一本書,而後每次都要去網站看,感受很麻煩,因而,想起用爬蟲爬取章節,務實派,說幹就幹!

爬取思路

  • 一、該網站的頁面呈現出必定的規律
  • 二、使用NodeJS的request模塊發起請求
  • 三、對獲取到的數據進行處理
  • 四、使用NodeJS的fs模塊將數據寫入文件

源碼說明

//聲明須要的模塊
var request = require('request');
var fs=require("fs");
//小說章節的標題
var title="";
//小說章節的內容
var article="";
//對應的網頁序號
var i=1;
//寫入流
var ws;

var get=()=>{
	//發起請求
	request('http://www.nitianxieshen.com/'+i+'.html', function (error, response, body) {
		try{
			if (!error && response.statusCode == 200) {
				//截取標題與段落
			    title = body.match(/<div class="post_title">([\s\S]*)<\/h1>/i)[0].split("</div>")[0];
			    article = body.match(/<div class="post_entry">([\s\S]*)<\/div>/i)[0].split("</div>")[0];
			    //去除多餘的符號
			    title=title.replace("h1", "").replace("h1", "").replace(/[</a-z_"=>\r\n ]/g, "");
			    article=article.replace(/br/g, "\r\n").replace(/[</a-z1=_".:&;>]/g, "");

			    ws=fs.createWriteStream(title+".txt");
				ws.write(title+"\r\n\r\n","utf8");
				ws.write(article,"utf8");
				ws.end();
				console.log(title+".txt"+" 正在寫入...");
				ws.on("finish", ()=>console.log("寫入完成!"));
				ws.on("error", ()=>console.log("寫入錯誤!"));
			}
		}catch(err){
			//部分章節的序號不連續,不要中止,等待自動爬取完就好,打印出該log後自動無視掉
			//好吧,其實後面有一段挺長的不連續的...有興趣的能夠再加個判斷條件
			console.log("本次爬取失敗");
			//目前更新的最新章節序號未到2900,確保能爬取完
			if(i>2900) clearInterval(timer);
		}
	})
}
var timer=setInterval(function(){
	get();
	i++;
}, 2000);//爬取的間隔時間不建議過短,1~2秒比較保險
複製代碼

效果

聲明

  • 本文章僅供學習,爬取的資源請在爬取後的24小時內刪除,勿將爬取到的東西商用,喜歡火星的能夠支持火星哈。
相關文章
相關標籤/搜索