天天看點

Nodejs爬蟲--抓取豆瓣電影網頁資料(下)

接着上篇 Nodejs爬蟲--抓取豆瓣電影網頁資料(上)

本篇主要描述将上次抓取的資料存入mongodb資料庫

前提:百度或谷歌mongodb的安裝教程,安裝本地并成功運作

推薦一款mongodb資料庫可視化管理工具:Robomongo。可以加群264591039擷取安裝包或自行尋找資源

首先用npm安裝第三方資料庫操作包:mongoose.

關于mongoose詳情請檢視官方文檔

npm install --save-dev mongoose
           

引入mongoose包開始對mongodb進行管理

目前目錄下建立一個mongo.js檔案友善管理,在該檔案中引入相關包:

let mongoose = require('mongoose'),
    assert = require('assert');
           

<!--more-->

擷取表構造器Schema并映射mongodb相應的collection

let Schema = mongoose.Schema;

let filmSchema = new Schema({       //自定義相應的表資料字段
        title: String,
        type: String,
        directories: String,
        scriptwriter: String,
        actors: String
    });
//映射collection并生成model對象用于管理資料表的增删改查
//預設是映射到名為films的collection
//若自定義表明則:let filmSchema = new Schema({..}, { collection: 'data' });  'data'即為自定義名稱
let Film = mongoose.model('Film', filmSchema);      
           

連接配接mongodb資料庫并exports Film對象

let db = mongoose.connect('mongodb://127.0.0.1:27017/spider');
db.connection.on('error', (err) => {
    console.log(`資料庫連接配接失敗:${err}`);
});
db.connection.on('open', () => {
    console.log('資料庫連接配接成功');
});

module.exports = {Film: Film};
           

在spider.js中引入Film對象并添加入庫操作代碼

let mongo = require('./mongo');
//在請求網頁的end函數中添加入庫操作
xxxx.end((err, res) => {
    var $ = cheerio.load(res.text);     //用cheerio擷取整個頁面DOM對象
    var _data = {title:'', type: '', directories: '', scriptwriter: '', actors: ''};
    _data.title = $('#content h1 span').text();
    _data.directories = $('#info .attrs').eq(0).text();
    _data.scriptwriter = $('#info .attrs').eq(1).text();
    _data.actors = $('#info .attrs').eq(2).text();
    $('span[property="v:genre"]').each(function (index) {
        _data.type += ($(this).text() + (index == $('span[property="v:genre"]').length - 1 ? '' : '、'));
    });
    console.log(_data);
    mongo.Film.create(_data, (err, doc) => {
                        assert.equal(err, null);
                        console.log(doc);
                    });
});
            
           

運作spider.js,并檢視資料庫中的資料

node spider.js
//用上述提到的可視化工具檢視資料庫是否成功有資料入庫
           
Nodejs爬蟲--抓取豆瓣電影網頁資料(下)