nodejs的爬虫框架superagent


本文摘自PHP中文网,作者php中世界最好的语言,侵删。

这次给大家带来nodejs的爬虫框架superagent,nodejs爬虫框架superagent的注意事项有哪些,下面就是实战案例,一起来看一下。

前言

  早就听过爬虫,这几天开始学习nodejs,写了个爬虫https://github.com/leichangchun/node-crawlers/tree/master/superagent_cheerio_demo,爬取 博客园首页的文章标题、用户名、阅读数、推荐数和用户头像,现做个小总结。

  使用到这几个点:

  1、node的核心模块-- 文件系统

  2、用于http请求的第三方模块 -- superagent

  3、用于解析DOM的第三方模块 -- cheerio

  几个模块详细的讲解及API请到各个链接查阅,demo中只有简单的用法。

准备工作

  使用npm管理依赖,依赖信息会存放在package.json中

1

2

//安装用到的第三方模块

cnpm install --save superagent cheerio

  引入所需要用到的功能模块

1

2

3

4

//引入第三方模块,superagent用于http请求,cheerio用于解析DOM

const request = require('superagent');

const cheerio = require('cheerio');

const fs = require('fs');

请求 + 解析页面

  想要爬到博客园首页的内容,首先要请求首页地址,拿到返回的html,这里使用superagent进行http请求,基本的使用方法如下:

1

2

3

4

request.get(url)

      .end(error,res){

      //do something    

}

  向指定的url发起get请求,请求错误时,会有error返回(没有错误时,error为null或undefined),res为返回的数据。

  拿到html内容后,要拿到我们想要的数据,这个时候就需要用cheerio解析DOM了,cheerio要先load目标html,然后再进行解析,API和jquery的API非常类似,熟悉jquery上手非常快。直接看代码实例

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

//目标链接 博客园首页

let targetUrl = 'https://www.cnblogs.com/';

//用来暂时保存解析到的内容和图片地址数据

let content = '';

let imgs = [];

//发起请求

request.get(targetUrl)

    .end( (error,res) => {

      if(error){ //请求出错,打印错误,返回

        console.log(error)

        return;

      }

      // cheerio需要先load html

      let $ = cheerio.load(res.text);

      //抓取需要的数据,each为cheerio提供的方法用来遍历

      $('#post_list .post_item').each( (index,element) => {

        //分析所需要的数据的DOM结构

        //通过选择器定位到目标元素,再获取到数据

        let temp = {

          '标题' : $(element).find('h3 a').text(),

          '作者' : $(element).find('.post_item_foot > a').text(),

          '阅读数' : +$(element).find('.article_view a').text().slice(3,-2),

          '推荐数' : +$(element).find('.diggnum').text()

        }

        //拼接数据

        content += JSON.stringify(temp) + '\n';

        //同样的方式获取图片地址

        if($(element).find('img.pfs').length > 0){

          imgs.push($(element).find('img.pfs').attr('src'));

        }

      });

      //存放数据

      mkdir('./content',saveContent);

      mkdir('./imgs',downloadImg);

    })

存储数据

  上面解析DOM之后,已经拼接了所需要的信息内容,也拿到了图片的URL,现在就进行存储,把内容存放到指定目录的txt文件中,而且下载图片到指定目录

  先创建目录,使用nodejs核心的文件系统

1

2

3

4

5

6

7

8

9

10

11

12

13

14

//创建目录

function mkdir(_path,callback){

  if(fs.existsSync(_path)){

    console.log(`${_path}目录已存在`)

  }else{

    fs.mkdir(_path,(error)=>{

      if(error){

        return console.log(`创建${_path}目录失败`);

      }

      console.log(`创建${_path}目录成功`)

    })

  }

  callback(); //没有生成指定目录不会执行

}

阅读剩余部分

相关阅读 >>

使用源码如何编译安装nodejs?

javascript怎么修改浏览器title

javascript alert函数显示中文乱码怎么办

javascript中var、let和const之间有什么区别?

html5中一些可以优化的细节介绍

javascript特权方法有什么用

js全称是什么?

javascript数组有哪些方法

javascript有什么优点

node.js安装和配置环境以及部署项目的方法介绍(windows系统下)

更多相关阅读请进入《superagent》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...