1. 程式人生 > 實用技巧 >使用node.js做爬蟲

使用node.js做爬蟲

本文整理自你不知道的 node 爬蟲原來這麼簡單
環境:cheerio,用來解析html 安裝命令:npm install cheerio

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.···

所示。
下載圖片如下圖所示