美文网首页前端那些事情程序员全栈工程师
nodejs 30行代码 爬豆瓣电影数据

nodejs 30行代码 爬豆瓣电影数据

作者: 幺加幺 | 来源:发表于2016-12-24 15:44 被阅读318次
    Paste_Image.png

    用nodejs 写爬虫

    关键模块:cheerio、http,request。
    consonl.log() 出来的数据

    Paste_Image.png

    首先安装相关的模块:

    //我用了某宝的镜像安装     原来是  npm,-g 可以根据自己情况是全局按装还是局域安装
    cnpm install -g jquery
    
    cnpm install -g cheerio
    
    cnpm install request
    
    cnpm install http
    ......
    
    

    根据你需要用的的模块安装
    代码如下:

    
    // 新建一个对象
    var MyUtil = function () {
    };
    // var $ = require('../node_modules/jQuery');
    var request = require('request');
    // 用于 保存body的html数据
    var bodtTemp;
    MyUtil.prototype.get=function(url,callback){
        // console.log("MyUtil.prototype") // 打印
        request(url, function (error, response, body) {
          if (!error && response.statusCode == 200) {
            // console.log(body) // 打印目标页面
            console.log("request ");
            // 用临时变量保存起来请求回来的body数据
            bodtTemp=body;
    
            var movie={}  
            // movie.name = $(body).find('span[property="v:itemreviewed"]').text();
            // movie.director = $(body).find('#info span:nth-child(1) a').text();
          }
        })
    }
    // console.log(movie);
    //获取目标网页的数据
    var temp = new MyUtil();
    var httpUrl='https://movie.douban.com/subject/25921812/?tag=%E7%83%AD%E9%97%A8&from=gaia_video';
    // var httpUrl='http://movie.douban.com/subject/1152952';
    temp.get(httpUrl);
    console.log('bodtTemp is '+bodtTemp);
    // 开启自己的http服务器
    var http = require('http')
    http.createServer(function(req,res){
        res.writeHead(200,{'Content-Type':'text/html'});
        // res.write(bodtTemp);
        let cheerio = require('cheerio')
        let $ = cheerio.load(bodtTemp)
        // $('h2.title').text('Hello there!')
        // $('h2').addClass('welcome')
        // $('#db-nav-movie .nav-logo a').text("哈哈")
        // $("#dale_movie_subject_bottom_super_banner_frame").remove();
        // 移除  id 里面的内容
        // $("#footer").remove();
        console.log($('#info').text());
        // $.html()
        // console.log($.html());
        res.write($.html());
        // res.end('<p>结束</p>');
        res.end();
    }).listen(5858);
    
    

    保存为index.js 文件,切换到 你的文件路径,用node 命令打开:
    如:

    node index.js
    

    浏览器打开

    http://127.0.0.1:5858/
    

    **记得要打开浏览器访问地址才能看到控制台的数据。

    本文为了更好阅读以及新手可以直接执行,提高新手兴趣,故把所有可执行代码直接放一个文件,详细以及一些测试也有备注。尝试去修改一下要爬的链接以及代码吧,一切都是实践中的出效果。

    相关文章

      网友评论

      • 目标_ff90:let cheerio = require('cheerio')
        let $ = cheerio.load(bodtTemp)
        这俩句是加载什么
        幺加幺:引入cheerio模块,Cheerio 封装了兼容的htmlparser。Cheerio 几乎能够解析任何的 HTML 和 XML document。我把数据存到我的服务器,通过cheerio重新展示到我的ip地址上,请看第一张截图。那个就是效果。

      本文标题:nodejs 30行代码 爬豆瓣电影数据

      本文链接:https://www.haomeiwen.com/subject/tcolvttx.html