记一次简单的Nodejs爬虫

作为初学nodejs的小学森, 不玩一把爬虫真的都不好意思说自己学过nodejs

所以, 本次教程本着严谨的教学角度, 向大家传授一下严谨的老司机绝技

学完之后, 自己写点儿小程序, 爬一爬某些不可描述的小图片啊, 小电影啊什么的, 也是可以的

所以我要在这里再次重申一下啊, 这真的是一篇严谨的教学博客

一入*门深似海, 从此节操是路人

准备工作

看到这篇博客时, 默认您已经掌握了nodejs的基本知识以及模块化的相关理念, 以及npm包管理的简单使用方法(也就一个cmd命令, npm i),所以基本上是看一遍之后就可以非常简单的上手的.

本次的数据库是直接使用的mongoDB, 简单上手,值得拥有.

mongoDB的配置

这个下载就不用说了吧, 老司机都知道上度娘.

关键是配置这块, 安装好之后,我们在项目的文件夹下创建一个db文件夹, 当然,项目文件夹是要存储你待会儿写的代码用的,新建一个就好

下好之后, 可以启动cmd(win + r, 然后回车) 输入mongo

输完了吗? 是不是没有看到结果?

没有结果就对了,因为我没教你配置环境变量啊

配置环境变量

首先,进入安装目录的bin文件夹,比如我是直接在安装的时候全部点的下一步,所以我的安装目录在C:\Program Files\MongoDB\Server\3.2\bin, 找到这个地方之后,在地址栏, 将这个文件路径复制下来,粘贴到环境变量的对应地方

环境变量的位置在: 我的电脑右键> 属性 > 高级系统设置 > 环境变量 > 管理员的用户变量

注意不要动系统变量,不然一旦操作不慎是会造成系统宕机的.

我们在用户变量的PATH中,鼠标光标点到最后,在它后面插上一个小分号

哎, 怎么有了一种邪恶的感觉

咳咳~ 插进去之后, 将我们之前bin目录的文件路径复制上去,然后确定

现在我们要做一下简单的配置让mongoDB启动起来:

mongod --storageEngine mmapv1 --dbpath "d:\mongodb\db" --logpath "d:\mongodb\log\MongoDB.log

下面详细讲一下配置的参数:

mongod mongoDB的命令,这个不用说

--storageEngine mmapv1 这是一个比较老的mongoDB的存储引擎, 32位系统的童鞋需要有这条命令, 64位系统的可以不用,

--dbpath "d:\mongodb\db" 数据库路径,找到项目文件夹, 把自己的项目文件夹的db路径替换掉上面的路径

--logpath "d:\mongodb\log\MongoDB.log 日志路径,一般我们会放在和db一起, 也是一样的, 把自己的log文件夹的路径替换掉上面的路径,因为刚开始是没有MongoDB.log这个文件的,所以需要新建一个.

执行成功之后,如果没有看到ERROR的提示, 那么恭喜你,mongo的服务已经成功启动了, 报错的可以再往上翻一下是不是有步骤遗漏, 因为我也是纯手工码字, 难免可能自己也有遗漏的地方, 确实不懂的地方也可以度娘或google

以上,mongo的配置就搞定了,mongo服务默认跑在27017端口, 如果不需要长期使用, 保持cmd挂起服务就正常运行的, 记住不能关掉哦

如果需要长期使用mongo服务的, 可以将mongo服务设置为系统服务,开机即启动, 可以在cmd中执行以下代码, 用于创建mongo服务进程

mongod --storageEngine mmapv1 --dbpath "d:\mongodb\db" --logpath "d:\mongodb\log\MongoDB.log" --install --serviceName "MongoDB"

这个是mongo的指令,所以要在cmd状态下,不要在mongo的交互状态下执行这个命令,否则会报错的

完成以上指令, 就已经成功创建了系统服务了, 我们现在来启动它, 在cmd中输入:

NET START MongoDB

提示服务器启动成功, bongo~

安装依赖

进入项目文件夹, 在cmd中输入npm init 创建一个json文件, 然后使用npm i * 一次安装express, cheerio, mongoose, superagent这几个依赖, 所以需要将指令中的*改为以上的依赖名称

万事俱备只欠东风了, 我们新建一个app.js文件, 并引入刚刚安装的依赖

1
2
3
4
var express = require('express')
var cheerio = require('cheerio')
var superagent = require('superagent')
var mongoose = require('mongoose')

下面来大概说明一下这几个模块的作用

express: 一个极简快速灵活的web开发框架, 用来快速搭建web服务器的

cheerio: nodejs中的jQuery

superagent 用来做客户端请求代理的, 直接点儿说就是代我们上网站拉网页代码的

mongoose: 用来连接mongoDB和处理mongo的请求

好了解完之后,我们要正式开始写代码了

首先一步,还是连接mongo数据库, 不然我们趴下来的数据就没地儿存了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 连接到mongoDB数据库,端口是27017, 我们将内容存储在cnodejs这个数据库中
mongoose.connect('mongodb://localhost:27017/cnodejs',function(err) {
if(err) {
throw err
} else {
console.log('服务器连接成功...')
}
})

// 实例化一个骨架,定义我们要传入的内容的键名及键值
var schema = new mongoose.Schema({
title: String,
href: String
})

// 定义一个模型变量, 我们将模型名称定义为List, 将爬取的内容存储在list这个文档中
var model = mongoose.model('List', schema, 'list')

然后,我们再实例一个express, 方便我们进行操作

1
var app = express()

使用代码来进行抓取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
app.get('/', function(req, res, next){
// 使用superagent去抓取https://cnodejs.org的内容
superagent.get('https://cnodejs.org/').end(function(err, sres){
// 常规的错误处理
if(err) return next(err)

// sres.text里面存储着网页的html内容, 将它传给cheerio.load之后
//就可以得到一个实现了jQuery接口的变量,我们习惯性将其命名为 '$'
var $ = cheerio.load(sres.text)

var items = []

// 使用cheerio获取到爬取到的东西的内容
$('#topic_list .topic_title').each((idx, element)=> {

// 预定义一个变量,从而提升整体的程序性能
var $element = $(element);

var listModel = new model()

listModel.title = $element.attr('title')

listModel.href = $element.attr('href')

// 将内容保存到数据库
listModel.save((err) => {
if(err) {
throw err
} else {
console.log('保存成功...')
}
})
})
})
})

最后一步, 指定服务器的监听端口

1
2
3
4
5
6
7
app.listen(8090, function(err) {
if(err) {
throw err
} else {
console.log('服务器启动成功.. ')
}
})

全部搞定,我们使用cmd输入命令 node app 或者使用webstorm的ctrl + f9启动一下

到浏览器中,输入刚刚设置的本地服务器加端口号: localhost:8090

回来一看,我靠,好多的保存成功啊

至此,我们的爬取工作就已经全部完成了, 看下成果呗:

在mongoDB中查看自己的爬取结果

如果不想麻烦的话, 可以直接安装一个ROBO 3T, 傻瓜式操作

也可以自己输入指令查看

在cmd中输入mongo, 进入mongo的交互

输入指令: use cnodejs 转到我们的cnodejs这个数据库中

然后输入指令: ‘db.list.find().pretty()’ 爬取的结果就都出来了

结束

爬取的过程至此圆满结束

当然, 作为一个负责任的老司机, 怎么可能会不告诉你, 爬取出来的小电影小图片怎么看呢.

很简单, 使用ejs或者handlebars这类的模板引擎, 将数据库的内容渲染出来就好了

文章目录
  1. 1. 准备工作
    1. 1.1. mongoDB的配置
      1. 1.1.1. 配置环境变量
  2. 2. 安装依赖
  3. 3. 在mongoDB中查看自己的爬取结果
  4. 4. 结束
|