Nodejs 爬虫简单编写

nodejs 爬虫原理,先用request请求页面内容,把内容获取到并iconv-lite设置编码格式,再用cheerio进行类似dom操作合并内容,转换写入文件中

1)获取单页面数据:

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)批量获取多页面数据:

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)
})

 

posted @ 2017-06-03 07:09  Zion0707  阅读(164)  评论(0编辑  收藏  举报