NodeJS爬虫

原文链接: http://www.cnblogs.com/fuGuy/p/7912894.html
cheerio
解析dom ,避免进行大量的正则解析操作,cheerIo的api跟jquery dom操作类似
 
ajaxAPI SuperAgent
npm install superagent --save
 
superagent
.get('/api')
.set('Referer','https://www.google.com')
.set('Accept','image/webp,image/*,*/*;q=0.8') //设置表头
.end(function(req,res)
{
//do something
})
 
eventproxy(先监听后抛出)
进行异步排序 计数器的作用,管理到底这些异步操作是否完成
var ep = new eventproxy(); ep.all('data1_event', 'data2_event', function (data1, data2) { var ans = gao(data1, data2,); console.log(ans); });
 
// 得到一个 eventproxy 的实例 var ep = new eventproxy(); //监听 // 命令 ep 重复监听 urls.length 次(在这里也就是 10 次) `topic_html` 事件再行动 ep.after('topic_html', urls.length, function (topics) { // topics 是个数组,包含了 10 次 ep.emit('topic_html', page) 中的那 10 个 page // 开始行动 topics = topics.map(function(page) { // 接下来都是 jquery 的用法了 var $ = cheerio.load(page); var userId = $('.runUserName a font').eq(0).text(); return userId; }); console.log(topics); });
//抛出 urls.forEach(function(item) { superagent.get(item) .end(function (err, res) { ep.emit('topic_html', res.text); }); });
例如当我们去轮询多的page,则需要我们去superagent get api 获取多个页面的url,然后通过抛出,然后通过 EventProxy行监听对获取的数据进行操作 ,相当于对异步请求进行编号,判断数据是否获取成功进行数据操作
 
控制并发量
当我去多个并发去Async去获取数据,避免单Ip多次请求服务,使用async控制异步抓取   
// 使用async控制异步抓取   
// mapLimit(arr, limit, iterator, [callback])
// 异步回调
async.mapLimit(articleUrls, 5 ,function (url, callback) {
      reptileMove(url, callback);
    }, function (err,result) {
        // 4000 个 URL 访问完成的回调函数
        // ...
    });
});
 

转载于:https://www.cnblogs.com/fuGuy/p/7912894.html

你可能感兴趣的:(NodeJS爬虫)