1. 程式人生 > >基於nodejs的網路圖片爬蟲

基於nodejs的網路圖片爬蟲

這是我研究nodejs爬蟲後寫的一個圖片爬蟲小例子。不過功能還是挺強大的可以將你喜歡的圖片下載下來。
主要的爬蟲程式碼:

//var http = require('https');
var http = require('http');
var fs = require('fs');
var cheerio = require('cheerio');
var request = require('request');
//設定迴圈
var i = 0;
//初始url 
var url = "http://m.juyouqu.com/qu/3187982"; 
function startSpider(x) {
console.log('向目標站點發送請求'); //採用http模組向伺服器發起一次get請求 http.get(x, function (res) { var html = ''; //用來儲存請求網頁的整個html內容 var titles = []; res.setEncoding('utf-8'); //防止中文亂碼 //監聽data事件,每次取一塊資料 res.on('data', function (chunk) { html += chunk; //console.log(chunk)
}); //監聽end事件,如果整個網頁內容的html都獲取完畢,就執行回撥函式 res.on('end', function () { var $ = cheerio.load(html); //採用cheerio模組解析html //console.log('html',html) var news_item = { //獲取文章的標題 title: $('.item-title').text().trim(), imgSrc: $('.post-container img'
).attr('src'), link: $(".button").attr('href'),// //i是用來判斷獲取了多少篇文章 i: i = i + 1, }; console.log(news_item); var news_title = $('.item-title').text().trim(); savedImg($,news_title); //儲存每篇文章的圖片及圖片標題 //下一篇文章的url var nextLink="http://m.juyouqu.com" + $(".button").attr('href'); //這是亮點之一,通過控制I,可以控制爬取多少篇文章. if (i <= 10) { setTimeout(function(){ startSpider(nextLink); },300) } }); }).on('error', function (err) { console.log(err); }); } //該函式的作用:在本地儲存所爬取到的圖片資源 function savedImg($,news_title) { $('.post-container img').each(function (index, item) { var img_title = news_title+index; var img_filename = img_title + '.jpg'; var img_src = $(this).attr('src'); //獲取圖片的url //採用request模組,向伺服器發起一次請求,獲取圖片資源 request.head(img_src,function(err,res,body){ if(err){ console.log(err); } }); request(img_src).pipe(fs.createWriteStream('./image/'+news_title + '---' + img_filename)); //通過流的方式,把圖片寫到本地/image目錄下,並用新聞的標題和圖片的標題作為圖片的名稱。 }) } startSpider(url); //主程式開始執行

執行的截圖:
這裡寫圖片描述
獲得的圖片:
這裡寫圖片描述
如果看不懂,或者配置不了的話,可以下載我的資源包,整個專案的完整程式碼我都放上去了。
這是資源地址
(解壓後,如果node_modules裡面你檔案路徑與你電腦的路徑不符,你可以刪除了node_modules這個檔案然後在執行一下npm install就可以了)