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 相关文章推荐
基于promise.js实现nodejs的promises库
Jul 06 NodeJs
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
Nov 20 NodeJs
nodejs通过phantomjs实现下载网页
May 04 NodeJs
NodeJS和BootStrap分页效果的实现代码
Nov 07 NodeJs
nodejs实例解析(输出hello world)
Jan 03 NodeJs
实例分析nodejs模块xml2js解析xml过程中遇到的坑
Mar 18 NodeJs
使用nodejs爬取前程无忧前端技能排行
May 06 NodeJs
详解NODEJS的http实现
Jan 04 NodeJs
Nodejs连接mysql并实现增、删、改、查操作的方法详解
Jan 04 NodeJs
Nodejs监听日志文件的变化的过程解析
Aug 04 NodeJs
nodejs制作小爬虫功能示例
Feb 24 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中curl、fsocket、file_get_content三个函数的使用比较
2014/05/09 PHP
PHP 与 UTF-8 的最佳实践详细介绍
2017/01/04 PHP
PHP实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
Laravel6.18.19如何优雅的切换发件账户
2020/06/14 PHP
跨浏览器开发经验总结(三)   警惕“IE依赖综合症”
2010/05/13 Javascript
提取字符串中年月日的函数代码
2013/11/05 Javascript
javascript使用location.search的示例
2013/11/05 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
2015/04/17 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
解决JavaScript数字精度丢失问题的方法
2015/12/03 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
微信小程序 swiper组件构建轮播图的实例
2017/09/20 Javascript
Gulp实现静态网页模块化的方法详解
2018/01/09 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
2018/09/11 Javascript
node全局变量__dirname与__filename的区别
2019/01/14 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
javascript实现计算器功能
2020/03/30 Javascript
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
Python中进程和线程的区别详解
2017/10/29 Python
Python程序运行原理图文解析
2018/02/10 Python
pycharm安装和首次使用教程
2018/08/27 Python
Python列表list排列组合操作示例
2018/12/18 Python
简单了解Pandas缺失值处理方法
2019/11/16 Python
pandas 对group进行聚合的例子
2019/12/27 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
CSS中垂直居中的简单实现方法
2015/07/06 HTML / CSS
施华洛世奇澳大利亚官网:SWAROVSKI澳大利亚
2017/01/06 全球购物
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
YOOX台湾:意大利奢侈品电商
2018/10/13 全球购物
函授本科自我鉴定
2014/02/04 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
武夷山导游词
2015/02/03 职场文书
2015年前台个人工作总结
2015/04/03 职场文书
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS
mysql创建存储过程及函数详解
2021/12/04 MySQL
Vue操作Storage本地化存储
2022/04/29 Vue.js