Z-Blog 爬虫 node实现 目前正在连载更新中
一、需求
帮朋友建站,指定用Z-Blog,安装后,我发现采集文章不便,所以准备写一个node爬虫,实现对友站文章的自动采集。
二、实现之前的思考
1、 熟悉Z-Blog数据库
Z-Blog使用mysql
数据库,所以我需要知道Z-Blog数据库结构。
2、node工具库选型
请求库想用superagent
,规则提取用cheerio
,并发控制用async
,mysql数据库操作用sequelize
3、后续
第一版,简单写,满足自己的功能需求就行。若Z-Blog站点看到我文章,觉得也有爬虫需求,我会尝试写一个针对Z-Blog的采集框架。
三、开工 项目地址 z-blog-spider
1、初始化项目
yarn init
2、安装工具库
yarn add superagent cheerio sequelize mysql2
3、创建配置文件config.js
const Sequelize = require('sequelize');
module.exports.db_config = {database: 'qy',username: 'root',password: 'root',config: {host: '127.0.0.1', // 数据库地址dialect: 'mysql', // 指定连接的数据库类型operatorsAliases: Sequelize.Op,pool: {max: 5, // 连接池中最大连接数量min: 0, // 连接池中最小连接数量idle: 10000 // 如果一个线程 10 秒钟内没有被使用过的话,那么就释放线程}}
}
4、创建文件db.js测试数据库连通性(事先创建mode文件夹用于存放数据模型)
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');const { db_config } = require('./config');const sequelize = new Sequelize(db_config.database, db_config.username, db_config.password, db_config.config);sequelize.authenticate().then(() => {console.log('数据库连接成功');}).catch(err => {console.error('连接数据库出错', err);});
const db = {};fs.readdirSync(path.join(__dirname, './model')).forEach(function (file) {const model = sequelize.import(path.join(__dirname, file));db[model.name] = model;});Object.keys(db).forEach(function (modelName) {if ('classMethods' in db[modelName].options) {if ('associate' in db[modelName].options['classMethods']) {db[modelName].options.classMethods.associate(db);}}
});db.sequelize = sequelize;
db.Sequelize = Sequelize;module.exports = db;
5、创建index.js文件,程序入口
const db = require('./db.js')
打开命令行运行node index.js
不出意外会打印数据库连接成功
,说明准备工作完成。