Node.js学习——爬虫

1.实验目的

    使用Node.js实现一个简单的爬虫。

2.实验方法

    通过request模块获取HTML页面,然后通过cheerio模块解析HTML页面获取图片的src地址,最后再次通过request模块获取图片并将其保存到文件夹中。

3.实验环境

    windows10操作系统
    node.js v8.9.4版本

4.实验步骤

    4.1. 环境安装

npm install request
npm install cheerio
npm install iconv-lite

    4.2. 获取HTML页面

const request = require("request");
const url = "http://www.netbian.com/desk/21245.htm";

request(url, function(error, response, body) {
    if(!error && response) {
        console.log(body);
    }
});
图一 爬取结果

          可以看到,爬取结果中出现了中文乱码的问题,所以需要对其进行转码。
          这里我们使用iconv-lite模块来解决这个问题。

const request = require("request");
const iconv = require("iconv-lite");
const url = "http://www.netbian.com/desk/21245.htm";

request({url: url, encoding: null}, function(err, res, body) {
    if(!err && res) {
        let newBody = iconv.decode(body, "gb2312");  //转成gb2312编码
        console.log(newBody);
    }
});

图二 爬取结果(重新编码)

    4.3. 分析DOM模型获取图片的src地址
图三 DOM模型

          由图三分析,我们采用 $("div[class= pic] img") 来选定图片。

const request = require("request");
const iconv = require("iconv-lite");
const cheerio = require("cheerio");
const url = "http://www.netbian.com/desk/21245.htm";

request({url: url, encoding: null}, function(err, res, body) {
    if(!err && res) {
        let newBody = iconv.decode(body, "gb2312");
        let $ = cheerio.load(newBody);  //选定分析的DOM模型
        console.log($("div[class= pic] img").attr("src"));  //获取图片的src地址
    }
});
图四 图片的src地址

    4.4. 将图片保存在文件夹中
          最后,我们通过path模块设置路径并通过fs模块将图片保存到文件夹中。

const request = require("request");
const iconv = require("iconv-lite");
const cheerio = require("cheerio");
const path = require("path");
const fs = require("fs");

const url = "http://www.netbian.com/desk/21245.htm";

request({url: url, encoding: null}, function(err, res, body) {
    if(!err && res) {
        let newBody = iconv.decode(body, "gb2312");
        let $ = cheerio.load(newBody);
        let src = $("div[class= pic] img").attr("src");
        let suffix = src.split('.').pop();  //获取图片的后缀名
         //路径为当前文件夹下的girl.后缀文件
        let position = path.join(__dirname, "girl" + "." + suffix); 
        request(src).pipe(fs.createWriteStream(position));  //将图片写入文件夹中
    }
});
图五 爬取图片

5 .参考文献

  • request模块:https://www.npmjs.com/package/request
  • 中文乱码解决方案:https://www.cnblogs.com/ilovewindy/p/6023603.html
  • iconv-lite模块:https://www.npmjs.com/package/iconv-lite
  • cheerio模块:https://www.npmjs.com/package/cheerio

你可能感兴趣的:(Node.js学习——爬虫)