nodejs简单抓包工具使用详解


Posted in NodeJs onAugust 23, 2019

前言

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

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

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

https://github.com/xiaoqiuxiong/reptileDemo

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

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

nodejs简单抓包工具使用详解

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

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

nodejs简单抓包工具使用详解

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

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

nodejs简单抓包工具使用详解

这步是安装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"
 },

nodejs简单抓包工具使用详解

完结。

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

nodejs简单抓包工具使用详解

预览

nodejs简单抓包工具使用详解

nodejs简单抓包工具使用详解

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

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

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

NodeJs 相关文章推荐
Nodejs进程管理模块forever详解
Jun 01 NodeJs
nodejs实现黑名单中间件设计
Jun 17 NodeJs
轻松创建nodejs服务器(4):路由
Dec 18 NodeJs
nodejs+mongodb+vue前后台配置ueditor的示例代码
Jan 02 NodeJs
nodeJs实现基于连接池连接mysql的方法示例
Feb 10 NodeJs
Nodejs Express 通过log4js写日志到Logstash(ELK)
Aug 30 NodeJs
NodeJs实现简单的爬虫功能案例分析
Dec 05 NodeJs
nodejs基础之buffer缓冲区用法分析
Dec 26 NodeJs
nodejs微信开发之接入指南
Mar 17 NodeJs
nodejs各种姿势断点调试的方法
Jun 18 NodeJs
NodeJS开发人员常见五个错误理解
Oct 14 NodeJs
node快速搭建后台的实现步骤
Feb 18 NodeJs
nodejs使用node-xlsx生成excel的方法示例
Aug 22 #NodeJs
Nodejs libuv运行原理详解
Aug 21 #NodeJs
nodejs和react实现即时通讯简易聊天室功能
Aug 21 #NodeJs
Nodejs 识别图片类型的方法
Aug 15 #NodeJs
NodeJs实现简易WEB上传下载服务器
Aug 10 #NodeJs
NodeJs 实现简单WebSocket即时通讯的示例代码
Aug 05 #NodeJs
Nodejs监听日志文件的变化的过程解析
Aug 04 #NodeJs
You might like
php的数组与字符串的转换函数整理汇总
2013/07/18 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
PHP生成plist数据的方法
2015/06/16 PHP
php.ini中date.timezone设置详解
2016/11/20 PHP
在laravel中使用with实现动态添加where条件
2019/10/10 PHP
JavaScript中的History历史对象
2008/01/16 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
2013/01/25 Javascript
javascript实现日期按月份加减
2015/05/15 Javascript
实例解析JS布尔对象的toString()方法和valueOf()方法
2015/10/25 Javascript
基于Bootstrap实现tab标签切换效果
2020/04/15 Javascript
vue-cli启动本地服务局域网不能访问的原因分析
2018/01/22 Javascript
JS运动改变单物体透明度的方法分析
2018/01/23 Javascript
layui表格内容溢出的解决方法
2019/09/06 Javascript
[02:33]2018DOTA2亚洲邀请赛赛前采访——LGD
2018/04/04 DOTA
python3.3使用tkinter开发猜数字游戏示例
2014/03/14 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
基于python 字符编码的理解
2017/09/02 Python
Python中pillow知识点学习
2018/04/30 Python
python3+PyQt5 数据库编程--增删改实例
2019/06/17 Python
python实现超市商品销售管理系统
2019/10/25 Python
python无序链表删除重复项的方法
2020/01/17 Python
荷兰领先的百货商店:De Bijenkorf
2018/10/17 全球购物
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
军校本科大学生自我评价
2014/01/14 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
治安消防安全责任书
2014/07/23 职场文书
党的群众路线教育实践活动个人剖析材料
2014/10/07 职场文书
教师个人考察材料
2014/12/16 职场文书
陕西导游词
2015/02/04 职场文书
就业指导讲座心得体会
2016/01/15 职场文书
合同补充协议书
2016/03/24 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
SQL Server中交叉联接的用法详解
2021/04/22 SQL Server
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
聊聊redis-dump工具安装问题
2022/01/18 Redis