码迷,mamicode.com
首页 > 其他好文 > 详细

基于node的简单爬虫

时间:2017-04-13 11:43:39      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:logs   console   end   erro   com   需要   efi   编码   创建   

直接上代码了,就是这么直接…………

还得一定要150字才能发布到首页……

‘use strict‘;

//引入模块
var https=require(‘https‘);
var fs=require(‘fs‘);
var path=require(‘path‘);
var cheerio=require(‘cheerio‘);

//爬虫的url信息
var getUrl=[‘/top250‘,‘/top250?start=25&filter=‘,‘/top250?start=50&filter=‘,‘/top250?start=75&filter=‘,‘/top250?start=100&filter=‘,‘/top250?start=125&filter=‘,‘/top250?start=150&filter=‘,‘/top250?start=175&filter=‘,‘/top250?start=200&filter=‘];

for(var i=0;i<getUrl.length;i++){
    var opt={
        hostname:‘movie.douban.com‘,
        path:getUrl[i],
        port:443
    };
    //创建http get请求
    https.get(opt,function(res){
        var html=‘‘;  //保存抓取到的html源码
        var movies=[]; //保存解析html后的数据,即我们需要的电影信息
        res.setEncoding(‘utf-8‘); //设置编码

        //抓取页面内容
        res.on(‘data‘,function(chunk){
            html+=chunk;
        });

        res.on(‘end‘,function(){
            var $=cheerio.load(html);
            $(".item").each(function(){
                var movie={
                    title:$(‘.title‘,this).text(), //获取电影名称
                    star:$(‘.star .rating_num‘,this).text(), //获取电影评分
                    link:$(‘a‘,this).attr(‘href‘), //获取电影详情页链接
                    picUrl:$(‘.pic img‘,this).attr(‘src‘)
                };

                movies.push(movie);

                //下载图片
                downloadImg(‘img/‘,movie.picUrl);

            });

            //保存数据
            saveData(‘data/data.json‘,movies);

            console.log(movies);

        });


    }).on(‘error‘,function(err){
        console.log(err);
    });
}

//保存数据到本地
function saveData(path,movies){
    fs.writeFile(path,JSON.stringify(movies,null,4),function(err){
        if(err){
            return console.log(err);
        }
        console.log(‘data saved‘);
    })
}

//下载图片
function downloadImg(imgDir,url){
    https.get(url,function(res){
        var data=‘‘;
        res.setEncoding(‘binary‘);
        res.on(‘data‘,function(chunk){
            data+=chunk;
        });

        res.on(‘end‘,function(){
            fs.writeFile(imgDir+path.basename(url),data,‘binary‘,function(err){
                if(err){
                    return console.log(err);
                }
                console.log(‘image downloaded:‘,path.basename(url));
            })

        })

    }).on(‘error‘,function(err){

        console.log(err);

    })

}

 

基于node的简单爬虫

标签:logs   console   end   erro   com   需要   efi   编码   创建   

原文地址:http://www.cnblogs.com/samsimi/p/6703152.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!