Node.js实现简单爬虫小案例

171 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情

之前学习了Node.js的基本知识, 但是由于近期在做一个微信小程序,有差不多一个月没有持续学习了,今天来简单实现一个爬虫小案例,复习巩固一下相关知识点。

1. 创建顶级目录,初始化项目

npm init

2. 安装所需的依赖(模块)

npm install express request cheerio --save

express 用于搭建node服务
request 封装了 http 模块,让请求更加简洁
cheerio 主要用于服务器端对 DOM 进行操作(简单的理解为用来解析 html 代码)

request的参数说明:

  • url: 请求的地址
  • method: 请求的方式
  • function: 回调函数,该函数三个参数:
    err 错误对象
    response 响应对象
    body 响应数据

3. 创建入口文件app.js

基本框架

var express = require('express');
var app = express();
app.get('/', function (req, res) {
    // your code here
});
app.listen(3000, function (req, res) {
    console.log('app is running at port 3000');
});

爬虫的思路可以总结为:请求url - > html(信息) -> 解析html

爬取流程:

a. 找寻目标, 选取网页url
此案例实现爬取一些图书信息,这里选用了豆瓣读书TOP250的链接地址,通过request拿到网页的所有数据。

image.png

b. 爬虫需要抓取页面上特定的信息,依据一些标识符(如:id,class)去拿到想要的信息。打开选取网页的控制台,查看相关信息存放和元素的标识符(id,class,element)。

c. 使用cheerio工具解析需要的内容,爬取标题、介绍、图片等信息进行存放。

d. 把爬取到的数据写入到创建的books.json文件中。

const express = require("express");
const app = express();
const request = require("request");
const cheerio = require("cheerio");
const fs = require("fs");

app.get("/", function (req, res) {
  //插入响应代码,包括启动爬虫,结果信息输出等
  request("https://book.douban.com/top250", function (error, response, body) {
    if (!error && response.statusCode == 200) {
      const $ = cheerio.load(body);
      let allBooks = [];
      $("table .item").each(function () {
        // 循环时this指向当前这本书,相当于this.querySelector
        const title = $(".pl2 a", this).attr("title");
        const quote = $(".quote .inq", this).text();
        const pic = $(".nbg img", this).attr("src");

        allBooks.push({
          title,
          quote,
          pic,
        });
      });
      res.send(allBooks);
      // 存数据库,没有数据库把数组写入json文件中 fs
      fs.writeFile("./books.json", JSON.stringify(allBooks), function (err) {
        if (!err) {
          console.log("文件写入完毕");
        }
      });
    }
  });
});

app.listen(3000, function () {
  console.log(`服务器运行在 http://localhost:3000/`);
});

4. 在终端执行node app命令,运行app.js文件,

点击服务器运行的网址,就可以得到爬取成功的图书数据。(ps: 可以在网页中查看数据,也可以在books.json文件中查看数据)

image.png image.png