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创建web服务器之hello world程序
Aug 20 NodeJs
解析NodeJs的调试方法
Dec 11 NodeJs
初识NodeJS服务端开发入门(Express+MySQL)
Apr 07 NodeJs
nodeJS实现简单网页爬虫功能的实例(分享)
Jun 08 NodeJs
nodejs之get/post请求的几种方式小结
Jul 26 NodeJs
基于nodejs res.end和res.send的区别
May 14 NodeJs
Nodejs Express 通过log4js写日志到Logstash(ELK)
Aug 30 NodeJs
nodejs初始化init的示例代码
Oct 10 NodeJs
Nodejs实现的操作MongoDB数据库功能完整示例
Feb 02 NodeJs
Nodejs实现用户注册功能
Apr 14 NodeJs
监控Nodejs的性能实例代码
Jul 02 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 和 COM
2006/10/09 PHP
常用PHP封装分页工具类
2017/01/14 PHP
lnmp安装多版本PHP共存的方法详解
2018/08/02 PHP
Javascript 篱式条件判断
2008/08/22 Javascript
javascript call和apply方法
2008/11/24 Javascript
js表头排序实现方法
2015/01/16 Javascript
javascript 四十条常用技巧大全
2016/09/09 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
JS作用域链详解
2017/06/26 Javascript
详解vue中的computed的this指向问题
2018/12/05 Javascript
JavaScript基础之静态方法和实例方法分析
2018/12/26 Javascript
JS数组方法concat()用法实例分析
2020/01/18 Javascript
解决Nuxt使用axios跨域问题
2020/07/06 Javascript
在ironpython中利用装饰器执行SQL操作的例子
2015/05/02 Python
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
Python中Selenium模拟JQuery滑动解锁实例
2017/07/26 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
使用Python读取大文件的方法
2018/02/11 Python
Django跨域请求问题的解决方法示例
2018/06/16 Python
基于numpy中数组元素的切片复制方法
2018/11/15 Python
详解Python 解压缩文件
2019/04/09 Python
Numpy 中的矩阵求逆实例
2019/08/26 Python
Python 自动登录淘宝并保存登录信息的方法
2019/09/04 Python
Python selenium爬虫实现定时任务过程解析
2020/06/08 Python
CSS3实现千变万化的文字阴影text-shadow效果设计
2016/04/26 HTML / CSS
canvas 如何绘制线段的实现方法
2018/07/12 HTML / CSS
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
加拿大购物频道:The Shopping Channel
2016/07/21 全球购物
迪卡侬波兰体育用品商店:Decathlon波兰
2020/03/31 全球购物
护士实习自我鉴定
2013/10/22 职场文书
《小动物过冬》教学反思
2014/04/17 职场文书
会计试用期自我评价
2014/09/19 职场文书
遗嘱继承权公证书
2015/01/26 职场文书
信用卡工资证明范本
2015/06/19 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书
导游词之山东八大关
2019/12/18 职场文书