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与Mysql的交互示例代码
Aug 18 NodeJs
基于promise.js实现nodejs的promises库
Jul 06 NodeJs
nodejs 整合kindEditor实现图片上传
Feb 03 NodeJs
nodejs通过phantomjs实现下载网页
May 04 NodeJs
学习 NodeJS 第八天:Socket 通讯实例
Dec 21 NodeJs
nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)
Jul 05 NodeJs
Mac 安装 nodejs方法(图文详细步骤)
Oct 30 NodeJs
nodejs用gulp管理前端文件方法
Jun 24 NodeJs
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
Jul 31 NodeJs
nodejs二进制与Buffer的介绍与使用
Jul 11 NodeJs
nodejs使用socket5进行代理请求的实现
Feb 21 NodeJs
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
May 30 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
《OVERLORD》手游英文版即将上线 手机上也能扮演骨王
2020/04/09 日漫
PHP令牌 Token改进版
2008/07/18 PHP
真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )
2012/10/24 PHP
php设置页面超时时间解决方法
2015/09/22 PHP
Linux下编译redis和phpredis的方法
2016/04/07 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
2019/10/10 PHP
JS高级笔记
2011/07/13 Javascript
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
2013/01/06 Javascript
javascript真的不难-回顾一下基础知识
2013/01/15 Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
2014/05/01 Javascript
JS简单计算器实例
2015/01/20 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
mac下的nodejs环境安装的步骤
2017/05/24 NodeJs
jQuery回调方法使用示例
2017/06/26 jQuery
基于vue 添加axios组件,解决post传参数为null的问题
2018/03/05 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
2018/05/17 Javascript
vue中组件的过渡动画及实现代码
2018/11/21 Javascript
小程序自定义日历效果
2018/12/29 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
Vue.js实现立体计算器
2020/02/22 Javascript
[02:43]2014DOTA2国际邀请赛 官方Alliance战队纪录片
2014/07/14 DOTA
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
python下paramiko模块实现ssh连接登录Linux服务器
2015/06/03 Python
SVM基本概念及Python实现代码
2017/12/27 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
2018/06/26 Python
python将字符串转换成json的方法小结
2019/07/09 Python
Pycharm+Python工程,引用子模块的实现
2020/03/09 Python
物流专业求职计划书
2014/01/10 职场文书
大学生期末自我鉴定
2014/02/01 职场文书
街道党工委党的群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
资产移交协议书
2016/03/24 职场文书
Go语言空白表示符_的实例用法
2021/07/04 Golang
vue中data里面的数据相互使用方式
2022/06/05 Vue.js
Vue深入理解插槽slot的使用
2022/08/05 Vue.js