Nodejs 爬蟲簡單編寫

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)
})
相關文章
相關標籤/搜索