NodeJS爬虫

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值