使用node.js做爬虫

本文整理自你不知道的 node 爬虫原来这么简单
环境:cheerio,用来解析html 安装命令:npm install cheerio
IDE为sublime,选择build system 为js,将以下代码写入js文件中,build一下,就出结果,下面代码运行时间为3.0s,觉得麻烦却很快👍

const https = require('https');
const cheerio = require('cheerio');
const fs = require('fs');
https.get('https://movie.douban.com/top250', function(res){
    let html = '';
    res.on('data', function(chunk){
        html+=chunk;
    })
    res.on('end', function(){
        console.log(html);
        const $ = cheerio.load(html);
        let allFilms = [];
        $('li .item').each(function(){
            const title = $('.title', this).text();
            const star = $('.rating_num', this).text();
            const pic = $('.pic img', this).attr('src');
            allFilms.push({
                title, star, pic
            })
        })
        fs.writeFile('./films.json', JSON.stringify(allFilms), function(err){
            if(!err){
                console.log('文件写入完毕');
            }
        })
        downloadImage(allFilms);
    })
})

function downloadImage(allFilms){
    for(let i = 0; i < allFilms.length; i++){
        const picUrl = allFilms[i].pic;
        https.get(picUrl, function(res){
            res.setEncoding('binary');
            let str = '';
            res.on('data', function(chunk){
                str+=chunk;
            })
            res.on('end', function(){
                fs.writeFile('./images/'+i+'.png', str, 'binary', function(err){
                    if(!err){
                        console.log('第'+i+'张图片下载成功');
                    }
                })
            })
        })
    }
}

该代码爬取豆瓣250强电影页面,请求的过程中,获取到数据就做包的拼接,结束就分析拼接的文件,利用选择器得到想要的内容,将电影的相关信息存储在json文件中,文件内容如[{"title":"肖申克的救赎 / The Shawshank Redemption","star":"9.7","pic":"https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.jpg"},{"title":"霸王别姬","star":"9.6","pic":"https://img3.···所示。
下载图片如下图所示

posted @ 2020-07-17 17:22  园糯  阅读(305)  评论(0编辑  收藏  举报