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实现PHP的print_r函数代码
Mar 14 NodeJs
nodejs npm包管理的配置方法及常用命令介绍
Jun 05 NodeJs
Nodejs实现的一个静态服务器实例
Dec 06 NodeJs
轻松创建nodejs服务器(10):处理上传图片
Dec 18 NodeJs
nodejs实现HTTPS发起POST请求
Apr 23 NodeJs
nodejs入门教程一:概念与用法简介
Apr 24 NodeJs
Nodejs读取文件时相对路径的正确写法(使用fs模块)
Apr 27 NodeJs
使用Nodejs连接mongodb数据库的实现代码
Aug 21 NodeJs
Nodejs中crypto模块的安全知识讲解
Jan 03 NodeJs
详解NodeJs开发微信公众号
May 25 NodeJs
nodeJS进程管理器pm2的使用
Jan 09 NodeJs
Nodejs监听日志文件的变化的过程解析
Aug 04 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
7个超级实用的PHP代码片段
2011/07/11 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
2011/08/15 PHP
PHP无法访问远程mysql的问题分析及解决
2013/05/16 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
php使用array_search函数实现数组查找的方法
2015/06/12 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
2019/03/14 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
JS的IE和Firefox兼容性集锦
2006/12/11 Javascript
jquery 锁定弹出层实现代码
2010/02/23 Javascript
jquery 图片 上一张 下一张 链接效果(续篇)
2010/04/20 Javascript
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
聊一聊JavaScript作用域和作用域链
2016/05/03 Javascript
判断数组的最佳方法(推荐)
2016/10/11 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
JS实现select选中option触发事件操作示例
2018/07/13 Javascript
vue transition 在子组件中失效的解决
2019/11/12 Javascript
[01:08]DOTA2次级职业联赛 - Wings 战队宣传片
2014/12/01 DOTA
[05:15]2018年度CS GO社区贡献奖-完美盛典
2018/12/16 DOTA
python实现爬虫下载漫画示例
2014/02/16 Python
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
2018/06/11 Python
Python中请不要再用re.compile了
2019/06/30 Python
python 内置函数汇总详解
2019/09/16 Python
Keras 快速解决OOM超内存的问题
2020/06/11 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
HTML5图片层叠的实现示例
2020/07/07 HTML / CSS
Staples加拿大官方网站:办公用品一站式采购
2016/09/25 全球购物
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
英国户外服装品牌:Craghoppers
2019/04/25 全球购物
印度在线购买电子产品网站:Croma
2020/01/02 全球购物
2014年预备党员学习两会心得体会
2014/03/17 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
优秀员工推荐材料
2014/12/20 职场文书
婚礼答谢词
2015/01/04 职场文书
2015年加油站工作总结
2015/05/13 职场文书