咱們須要建立一個文件夾,本身命名就好,而後在文件夾裏建立兩個文件夾分別命名爲data和img,進入到這個總文件夾的目錄終端下。html
終端輸入npm init,建立package.json配置文件,根據本身的實際狀況填寫,或者一路回車。web
再次輸入npm install cheerio request --save,會下載好cheerio(用法幾乎和Jquery同樣),request依賴包。npm
在總文件夾裏再建立index.js,用來編寫咱們的主體邏輯代碼。json
var http = require('http'); var fs = require('fs'); var cheerio = require('cheerio'); var request = require('request'); var i = 0; var url = "http://songshuhui.net/archives/96881";//初始化的地址 function fetchPage(x){ startFetch(x); }//封裝函數 function startFetch(x){ //採用http模塊向服務器發起一次get請求 http.get(x,function(res){ var html = ""; //用來儲存整個頁面的html內容 res.setEncoding("utf-8");//防止中文亂碼 res.on('data',function(chunk){ html += chunk; });//監聽data事件,每次取一塊數據 res.on('end',function(){ var $ = cheerio.load(html);//用cheerio模塊解析html var author = $(".metax_single a:first-child").text().trim();//獲取文章的做者 var title = $(".atrctitle .contenttitle a").text().trim();//獲取文章的標題 var link = $(".atrctitle .contenttitle a").attr("href");//獲取文章的網頁地址 var new_item = { Title: title, Author: author, Link: link, i: i =i + 1//用來判斷獲取了多少文章 }; console.log(new_item); savedContent($,title);//儲存文章的文字內容 savedImg($,title);//儲存文章的圖片內容 var nextLink = $(".navilinks .prevlink a").attr("href"); var str = encodeURI(nextLink); if(i <= 500){ fetchPage(str); }//經過控制i控制抓取的文章的數目 });//監聽end事件,若是整個網頁內容都獲取完畢,執行回調函數 }).on('error',function (err) { console.log(err); }); } function savedContent($,title){ $(".entry p").each(function(index,item) { var x = $(this).text(); x = x + "\n"; fs.appendFile("./data/" + title + ".txt", x, "utf-8", function (err) { if (err) { console.log(err); } }); }); } //本地儲存爬取的文字資源 function savedImg($,title){ $(".entry .wp-caption img").each(function(index,item) { var img_title = $(this).attr("alt"); var img_filename = img_title + ".jpg"; var img_src = $(this).attr("src"); request.head(img_src,function(err,res,body){ if(err){ console.log(err); } }); request(img_src).pipe(fs.createWriteStream("./img/" + title + "--" + img_filename)); //採起request模塊向服務器發起一次請求,獲取圖片資源 }); } //本地儲存爬取的圖片資源 fetchPage(url);
代碼部分完成,在webstorm上運行index.js文件,直接選中index.js,點擊右上角的綠色三角按鈕。服務器
選取的這個網址,分析網站源代碼,每一個文章都有上一頁或者下一頁的內容,這樣咱們能夠串聯式的獲取dom節點的不一樣url,所以得到每一個url的內容。app