nodejs简单抓包工具使用详解

 更新时间:2019年08月23日 09:25:45   作者:肖秋雄  
这篇文章主要介绍了nodejs简单抓包工具使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

前言

就是简简单单写程序的我为什么需要抓包?

其实在平时写demo的时候需要用到一些图片和文本的资源的,但是需求量比较大,这个时候就想去网站上面直接复制啊,然后图片另存为啊,什么的一系列繁琐的操作。

但是现在不需要了,你只要看到这篇文章,你就很轻松了。本项目Github地址:

https://github.com/xiaoqiuxiong/reptileDemo

1.在你的电脑桌面新建一个reptileDemo文件夹。

然后进入文件夹,然后在改文件夹目录下打开cmd。输入下图所示回车,连续按回车即可。

初始化完之后,你会在文件夹里面看下package.json文件,里面就是一些基本的包管理基本配置。

2.cmd输入下图所示,然后回车

这步是安装cheerio模块,主要是用来解释html和使用jqueryAPI来操作请求返回的html。

3.cmd输入下图所示,然后回车

这步是安装request模块,主要是用来发请求处理的。

4.文件夹内添加一个data文件夹,用来存放抓包的数据。

5.文件夹内新建app.js文件。添加内容如下:

let fs = require('fs');
let cheerio = require('cheerio');
let request = require('request');
let path = require('path');
let i = 0;
let j = 0;
//初始需要抓取的页面url 
let url = "http://www.silver.org.cn/cjyw/list_p_1.html";
let http = url.includes('https') ? require('https') : require('http');

function startRequest(x) {
  // 采用http模块向服务器发起一次get请求   
  http.get(x, function(res) {
    // 用来存储请求网页的整个html内容
    var html = '';
    var titles = [];
    // 防止中文乱码
    res.setEncoding('utf-8'); 
    // 监听data事件,每次取一块数据
    res.on('data', function(chunk) {
      html += chunk;
    });
    // 监听end事件,如果整个网页内容的html都获取完毕,就执行回调函数
    res.on('end', function() {
      // 采用cheerio模块解析html
      var $ = cheerio.load(html); 
      j = 0;
      savedContent($);
      i++;
      console.log('抓包页码:' + i);
      // 限制请求页数
      if (i <= 10) {
        fetchPage(`http://www.silver.org.cn/cjyw/list_p_${i}.html`);
      } else {
        console.log('抓包完成');
      };
    });
  }).on('error', function(err) {
    console.log(err);
  });
}
//保存内容
function savedContent($) {
  var item = $('.lt_col li')[j]
  // 标题
  var x = $(item).find('h2').text().trim();
  // 内容
  var y = $(item).find('p').text().trim();
  // 图片地址
  var z = $(item).find('img').attr('src');
  // 图片文件名
  var o = path.basename(z);
  // 创建文件夹
  fs.mkdir(`./data/${x}`, err => {
    if (!err) {
      // 保存文本
      fs.appendFile(`./data/${x}/index.txt`, `标题:${x}\n内容:${y}`, 'utf-8', err => {
        if (err) {
          console.log(`****创建txt失败****: ${x}`);
        }
      });
      // 保存图片
      request.head(z, (err, res, body) => {
        if (err) {
          console.log(`****请求图片失败****: ${x}`);
        }
      });
      // 写图片到本地
      request(z).pipe(fs.createWriteStream(`./data/${x}/${o}`));
      j++;
      if (j <= $('.lt_col li').length - 1) {
        savedContent($)
      }

    }
  })
}

startRequest(url); //主程序开始运行

本项目主要是抓取一个新闻网站的新闻列表数据,有标题,内容和图片。

6.package.json修改如下:

"scripts": {
  "test": "echo \"Error: no test specified\" && exit 1",
  "dev": "node app.js"
 },

完结。

做完上面操作之后你就可以使用cmd,然后输入

预览

这样就搞定了,是不是很爽啊。

疯狂的程序员决不是靠狂妄和拼命的程序员,而是能够脚踏实地,持续努力的程序员,一个程序员真正做到这两点,技术上去后,唯一能限制他的只有想象力,到那个时候才算“疯狂的程序员”,这种程序员,才能令对手无比恐惧。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • nvm管理node版本的详细图文教程

    nvm管理node版本的详细图文教程

    nvm全英文也叫node.js version management,是一个nodejs的版本管理工具,下面这篇文章主要给大家介绍了关于nvm管理node版本的详细图文教程,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • NodeJS配置HTTPS服务实例分享

    NodeJS配置HTTPS服务实例分享

    本文给大家分享的是在nodejs中配置https服务的方法和具体的示例,非常的详细,有需要的小伙伴可以来参考下
    2017-02-02
  • 浅谈node的事件机制

    浅谈node的事件机制

    本篇文章主要介绍了node的事件机制,本文通过实现一个简易的、具有发布/订阅模式的事件机制,以此来理清EventEmitter类的实现思路,有兴趣的可以了解一下
    2017-10-10
  • nodejs与浏览器中全局对象区别点总结

    nodejs与浏览器中全局对象区别点总结

    在本篇文章里小编给大家整理的是一篇关于nodejs与浏览器中全局对象区别点总结内容,对此有需要的朋友们可以学习下。
    2021-12-12
  • Node.js和Express中设置TypeScript的实现步骤

    Node.js和Express中设置TypeScript的实现步骤

    本文主要介绍了Node.js和Express中设置TypeScript的实现步骤文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • nvm查看所有node包命令失效原因解决方案

    nvm查看所有node包命令失效原因解决方案

    使用nvm时可能会遇到超时问题,这是由于node的包存放在国外服务器上,解决方法是在nvm的配置文件中添加镜像地址,下面就来具体介绍一下步骤,感兴趣的可以了解一下
    2024-09-09
  • Node.js编写组件的三种实现方式

    Node.js编写组件的三种实现方式

    这篇文章主要介绍了Node.js编写组件的三种实现方式,包括纯js实现、v8 API实现(同步&异步)、借助swig框架实现,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • node实现封装一个图片拼接插件

    node实现封装一个图片拼接插件

    这篇文章主要介绍了node实现封装一个图片拼接插件,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • node+vue实现用户注册和头像上传的实例代码

    node+vue实现用户注册和头像上传的实例代码

    本篇文章主要介绍了node+vue实现用户注册和头像上传的实例代码,具有一定的参考价值,有兴趣的可以了解一下
    2017-07-07
  • Node.js 源码阅读深入理解cjs模块系统

    Node.js 源码阅读深入理解cjs模块系统

    这篇文章主要为大家介绍了Node.js 源码阅读深入理解cjs模块系统,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09

最新评论