美文网首页
简单的 nodejs 爬虫

简单的 nodejs 爬虫

作者: bo_song | 来源:发表于2018-06-02 23:32 被阅读0次

简单的 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);
    }

好了,水完了~~~

相关文章

网友评论

      本文标题:简单的 nodejs 爬虫

      本文链接:https://www.haomeiwen.com/subject/qpedsftx.html