简单的 nodejs 爬虫
最近想用 node 写爬虫,然后将爬取的数据存入 mongodb。一开始想用 phantom 去写,但是一看 GitHub 上面有好多的 issue 都没有解决,所以就选了 puppeteer 。为什么呢?因为它的背后有个强大的团队---Chrome!
准备工作
$ npm install puppeteer --save
编码工作
然后新建一个文件 index.js, Lets code~
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless: false,
});
const page = await browser.newPage();
const URL = '<your target url>';
// 可以设置一些常量
// ...
try {
await page.goto(URL);
await page.setDefaultNavigationTimeout(50000); // 设置跳转超时时间
await page.waitFor(2000);
// 开始爬取
const result = await page.evaluate(() => {
let a = document.querySelector('<your selector path>');
return a;
})
} catch (err) {
console.log('ERR:', err);
} finally {
browser.close();
}
})()
OK,以上就是一个非常简单的爬虫,具体爬取什么数据可以根据自己的喜好。
接下来,需要将爬取到的数据存入到 mongodb 中。
$ npm install mongoose --save
首先,创建一个 data.js 文件,进行设置 Schema
const mongoose = require('mongoose');
const Schema = new mongoose.Schema({
// �你需要的数据格式
});
module.exports = mongoose.model('DATA', Schema);
然后,连接 mongodb
const DB_URL = '<your db url>';
if (mongoose.connection.readyState == 0) {
mongoose.connect(DB_URL);
//On connection
mongoose.connection.once('open', () => {
console.log('connected to database: ' + DB_URL);
})
//Error connection
mongoose.connection.on('error', (err) => {
console.log('database error' + err);
})
}
最后,存储数据
try {
let newData = new DATA(obj);
console.log('mongoose:', newData);
newData.save( (err, newData) => {
if (err) throw err;
console.log('Saved successfully');
});
} catch (err) {
console.log(err);
}
彩蛋(读取数据)~
try {
DATA.find({
title: { $regex: arg, $options: 'i'} // 模糊查询,不区分大小写
}, (err, datas) => {
if (err) throw err;
console.log(datas);
res.send(datas);
});
} catch (err) {
console.log(err);
}
好了,水完了~~~