nodejs 爬蟲原理,先用request請求頁面內容,把內容獲取到並iconv-lite設置編碼格式,再用cheerio進行相似dom操做合併內容,轉換寫入文件中html
1)獲取單頁面數據:node
var fs = require('fs') var request = require('request') var iconvLite = require('iconv-lite') var cheerio = require('cheerio') //請求 request({ url:'https://github.com/Zion0707', //要抓取的頁面 encoding:null },function(err,res,body){ //設置編碼格式 var html = iconvLite.decode(body,'utf8') //轉換成dom操做 var $ = cheerio.load(html) //相似jq操做 var title = $('title').text(); var json = { title : title } //轉成json字符串對象寫入到文件中 var r = JSON.stringify(json) fs.open('./data.json','w',function(err,el){ fs.write(el , r ,function(err,suc){ console.log(suc,'success') }) }) })
2)批量獲取多頁面數據:git
var fs = require('fs') var async = require('async') var request = require('request') var iconvLite = require('iconv-lite') var cheerio = require('cheerio') //獲取更多url組成數組 function getMore(num){ var arr = [] for(var i = 0 ; i < num ; i++ ){ arr.push( 'http://www.techweb.com.cn/tele/2017-02-23/2491253_'+(i+1)+'.shtml' ) } return arr; } //異步每一次獲取3條,防止ip被封 async.mapLimit( getMore(7) , 3 ,function(url,callback){ request({ url:url, //讀取數組裏的每一條url encoding:null },function(err,res,body){ var html = iconvLite.decode(body,'utf8') var $ = cheerio.load(html) //獲取每一頁的一張圖片 var result = $('img').eq(1).attr('src') //成功以後callback 才能進行下一次獲取 callback( null , url+result ) }) },function(err,result){ //返回結果 console.log(result) })