首页 > Web开发 > 详细

Nodejs 爬虫简单编写

时间:2017-06-03 09:22:59      阅读:335      评论:0      收藏:0      [点我收藏+]

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

 

Nodejs 爬虫简单编写

原文:http://www.cnblogs.com/zion0707/p/6936103.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!