zoukankan      html  css  js  c++  java
  • 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 访问完成的回调函数
            // ...
        });
    });
     
  • 相关阅读:
    针对C#、VB.NET、VB6的WINDOWS API引用
    VBNET的一些特殊能力
    [模块]可以搜索内存中存在的PE结构
    将Excel和XML导入数据库
    VB.NET中使用List
    VBNET使用EXCEL常见操作
    Linux下的C编程实战之开辟平台搭建
    若何进步Linux桌面零碎的速度4
    Linux把持体系中若何布置Tomcat
    如何进步Linux桌面系统的速率1
  • 原文地址:https://www.cnblogs.com/fuGuy/p/7912894.html
Copyright © 2011-2022 走看看