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服务器(7):阻塞操作的实现
Dec 18 NodeJs
NodeJS学习笔记之Connect中间件应用实例
Jan 27 NodeJs
NodeJS使用formidable实现文件上传
Oct 27 NodeJs
Jquery通过ajax请求NodeJS返回json数据实例
Nov 08 NodeJs
简单实现nodejs上传功能
Jan 14 NodeJs
nodejs个人博客开发第三步 载入页面
Apr 12 NodeJs
nodejs读取并去重excel文件
Apr 22 NodeJs
详解Nodejs内存治理
May 13 NodeJs
NodeJS实现自定义流的方法
Aug 01 NodeJs
nodejs初始化init的示例代码
Oct 10 NodeJs
nodejs更新package.json中的dependencies依赖到最新版本的方法
Oct 10 NodeJs
nodejs 递归拷贝、读取目录下所有文件和目录
Jul 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文件
2007/01/04 PHP
async和DOM Script文件加载比较
2014/07/20 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
jQuery EasyUI API 中文文档 - DataGrid数据表格
2011/11/17 Javascript
jQuery输入城市查看地图使用介绍
2013/05/08 Javascript
jquery禁用右键示例
2014/04/28 Javascript
深入理解javascript变量声明
2014/11/20 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
js实现下拉菜单效果
2017/03/01 Javascript
ES6学习笔记之Set和Map数据结构详解
2017/04/07 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
VsCode插件整理(小结)
2017/09/14 Javascript
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
2018/08/28 Javascript
JS数组去重的6种方法完整实例
2018/12/08 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
2020/02/11 Javascript
python通过imaplib模块读取gmail里邮件的方法
2015/05/08 Python
在Python中使用sort()方法进行排序的简单教程
2015/05/21 Python
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
2017/05/25 Python
python逐行读写txt文件的实例讲解
2018/04/03 Python
python实现字符串加密 生成唯一固定长度字符串
2019/03/22 Python
django query模块
2019/04/20 Python
基于Python实现扑克牌面试题
2019/12/11 Python
Python assert关键字原理及实例解析
2019/12/13 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
python读取与处理netcdf数据方式
2020/02/14 Python
在keras下实现多个模型的融合方式
2020/05/23 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
2021/01/27 Python
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
高中运动会入场词
2014/02/14 职场文书
大学生职业生涯规划书
2014/03/14 职场文书
煤矿隐患排查制度
2015/08/05 职场文书
导游词之峨眉山
2019/12/16 职场文书