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