如何使用nodejs做爬虫程序

 我来答
BUG集散地
2016-05-25 · TA获得超过1317个赞
知道小有建树答主
回答量:625
采纳率:80%
帮助的人:300万
展开全部
  1. 目标

    抓取网站上的妹子照片。

  2. 第三方模块

    1. superagent : 第三方Nodejs 模块,用于处理服务器和客户端的Http请求。

    2. cheerio : 为服务器端定制的Jquery实现。

  3. 思路

    1. 通过superagent 获取目标网站的dom

    2. 通过cheerio对dom进行解析,获得通用布局。

    3. 如果只是爬取一个页面,则可以直接将目标页面的目标元素获取

    4. 如果是分页或者多个页面,可以通过循环获得目标链接,进行多次抓取。

  4. 实现

    1. 这里我们实现一个抓取网站妹子的照片。

    2. 目标网址:http://jandan.net/ooxx/ (对于该网站,并没有恶意攻击的意思.)

    3. 代码如下:

    //引入第三方和通用模块
    var fs = require('fs');//为了将抓取的图片存到本地,使用fs
    var superagent = require('superagent');//引入superagent
    var cheerio = require('cheerio');//引入jquery实现

    var filePath = '/node/学习/sis/img/';//定义抓取妹子文件存放路径
    var count = 0;//记录抓取数量
    var test = [];
    //抓取一个页面的实现。
    var getOnePage = function(url){
        //因为煎蛋对请求做了限制,所以将cookie加上了。如果你要访问该网站的话,可以通过浏览器查找cookie 并进行替换
        superagent.get(url)
        .set({
                'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36'
        })
        .set('cookie','500322148=53; Hm_lvt_fd93b7fb546adcfbcf80c4fc2b54da2c=1454117846; Hm_lpvt_fd93b7fb546adcfbcf80c4fc2b54da2c=1454119909')
        .set({
            'accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
            'connection' : 'keep-alive',
            'host' : 'jandan.net'
        })
        .end(function(err,sres){//这里是对获取的dom进行处理
            if(err)throw err;
            var $ = cheerio.load(sres.text);
            var nextUrl = $('.previous-comment-page').attr('href');//获得下一页的链接,为了开始下一次请求
            $('img').each(function(index,ele){//循环该页面的所有图片并得到对应的链接,放进数组。
                var u = '';
                if($(ele).attr('org_src')){
                    u = $(ele).attr('org_src');
                }else{
                    u = $(ele).attr('src');    
                }
                test.push(u);
                //通过superagent 获取图片数据,并保存到本地。
                superagent.get(u).end(function(err,sres){
                    if(err)throw err;
                    //根据访问路径获得文件名称
                    var ttt = u.split('/');
                    var name = ttt[ttt.length-1];
                    var path = filePath+name
                    fs.writeFile(path,sres.body,function(){
                        count++;
                        console.log(u);
                        console.log('已成功抓取..'+count+'张');
                    });
                });
            });
            if(null != nextUrl && '' != nextUrl){ //何时开始下一次请求
                getOnePage(nextUrl);
            }
        }); 

    };

    getOnePage('http://jandan.net/ooxx/');//触发第一次请求开始

    5. 结果


明天小跟班_
2016-04-18 · 知道合伙人软件行家
明天小跟班_
知道合伙人软件行家
采纳数:269 获赞数:1251
大学毕业从事文员工作对offic办公软件有长期的工作操作实践经验,处理文档表格PPT效率一流得心应手。

向TA提问 私信TA
展开全部
后端渲染的页面用cheerio这个模块爬就可以,具体如何爬可以去谷歌。如果是js渲染的,比如百度图片,就用phantomjs去爬,用phantomjs爬的话需要在phantomjs这个看不见的浏览器里进行浏览器操作,获得相应数据后,再通过node的接口传给node
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式