• 基于node的简单爬虫


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

    还得一定要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);
    
        })
    
    }
  • 相关阅读:
    「LuoguP1627 / T36198」 [CQOI2009]中位数
    「LuoguT36048」 Storm in Lover
    「LuoguP3252」 [JLOI2012]树
    「LuoguP2170」 选学霸(01背包
    「LuoguP3191」 [HNOI2007]紧急疏散EVACUATE(最大流
    「网络流24题」「LuoguP2774」方格取数问题(最大流 最小割
    「LuoguP3381」【模板】最小费用最大流
    ACTIVEMQ主题、队列设置用户名密码
    activemq消息生产者与消息消费者简单例子
    ActiveMQ使用线程池实现消息的生产与消费
  • 原文地址:https://www.cnblogs.com/samsimi/p/6703152.html
Copyright © 2020-2023  润新知