nodejs简单抓包工具
就是简简单单写程序的我为什么需要抓包?
其实在平时写demo的时候需要用到一些图片和文本的资源的,但是需求量比较大,这个时候就想去网站上面直接复制啊,然后图片另存为啊,什么的一系列繁琐的操作。
但是现在不需要了,你只要看到这篇文章,你就很轻松了。
本项目Github地址: https://github.com/xiaoqiuxiong/reptileDemo
1.在你的电脑桌面新建一个reptileDemo文件夹。
然后进入文件夹,然后在改文件夹目录下打开cmd。输入下图所示回车,连续按回车即可。
初始化完之后,你会在文件夹里面看下package.json文件,里面就是一些基本的包管理基本配置。
2.cmd输入下图所示,然后回车
这步是安装cheerio模块,主要是用来解释html和使用jqueryAPI来操作请求返回的html。
3.cmd输入下图所示,然后回车
这步是安装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"
},
完结。
做完上面操作之后你就可以使用cmd,然后输入
预览
这样就搞定了,是不是很爽啊。
nodejs简单抓包工具的更多相关文章
- Fiddler抓包工具的简单使用
Fiddler的官方网站:http://www.fiddler2.com Fiddler的官方帮助:http://docs.telerik.com/fiddler/knowledgebase/quic ...
- Microsoft Message Analyzer (微软消息分析器,“网络抓包工具 - Network Monitor”的替代品)官方正式版现已发布
来自官方日志的喜悦 被誉为全新开始的消息分析器时代,由MMA为您开启,博客原文写的很激动,大家可以点击这里浏览:http://blogs.technet.com/b/messageanalyzer/a ...
- Fiddler 抓包工具总结
阅读目录 1. Fiddler 抓包简介 1). 字段说明 2). Statistics 请求的性能数据分析 3). Inspectors 查看数据内容 4). AutoResponder 允许拦截制 ...
- 抓包工具fiddler
具体的可以看这个链接,后来补充了些东西,cnblog复制图片太麻烦了 http://note.youdao.com/yws/public/redirect/share?id=37f8556270b44 ...
- Android 常用抓包工具介绍之Charles
➠更多技术干货请戳:听云博客 Charles是一款抓包修改工具,相比起TcpDump,charles具有界面简单直观,易于上手,数据请求控制容易,修改简单,抓取数据的开始暂停方便等等优势!前面介绍了如 ...
- Android常用抓包工具之TcpDump
➠更多技术干货请戳:听云博客 做为一个测试人员,工作中经常会用到数据抓包工具来进行数据分析和验证,下面就简单介绍一下工作中常用的抓包工具. TcpDump抓包 Tcpdump是一个用于截取网络分组,并 ...
- 抓包工具charles使用教程指南
0x01 前言: Charles是一款抓包修改工具,相比起burp,charles具有界面简单直观,易于上手,数据请求控制容易,修改简单,抓取数据的开始暂停方便等等优势!下面来详细介绍下这款强大好用的 ...
- [工具]Mac平台开发几个网络抓包工具(sniffer)
Cocoa Packet Analyzer http://www.tastycocoabytes.com/cpa/ Cocoa Packet Analyzer is a native Mac OS X ...
- charles使用教程指南(抓包工具)
0x01 前言: Charles是一款抓包修改工具,相比起burp,charles具有界面简单直观,易于上手,数据请求控制容易,修改简单,抓取数据的开始暂停方便等等优势!下面来详细介绍下这款强大好用的 ...
随机推荐
- [记录]HAproxy负载均衡配置教程
HAproxy负载均衡配置教程 一.简介 haproxy是一个开源的高性能负载均衡软件:支持双机热备.虚拟主机和图形化的管理界面,自带强大的对RS健康检查功能:支持TCP(四层).HTTP(七层)应用 ...
- 给hexo博客的NEXT主题添加一个云日历
一点废话 hexo中有文件的归档,但是博文的数目多了,浏览的时候也是很不方便的.于是我就有找个云日历的想法了,折腾了几天,网上的方法都试过了.但是没出效果.于是想着自己来写一个.这自己写的这部分是基于 ...
- Quartus ii调试技巧_01
前几天李主任跟我分享了一些特别好用的调试技巧: 1)System Sources and Probes Editor---类似于人为设置触发条件,创建虚拟按键等功能,这段时间一直在做一个电机的驱动,板 ...
- 【剑指offer】面试题(三)
package com.haxianhe.test; /** *题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序, *每一列都按照从上到下递增的顺序排序. *请完成一个函数, *输入这样的一 ...
- C/C++用new、delete分配回收堆中空间
int *CreateList() 10 { 11 int a[5]; 12 int *a = new int[5]; 13 delete[] a; 14 15 int a(5); 16 int a ...
- Linux下gcc编译器的使用
例:gcc -x -g c helloC -o firstC -x:改变gcc的行为.(注:如果是.c文件则不用加-x) -x c :编译c程序 -x c++ :编译c++程序 -x java :编译 ...
- 《VR入门系列教程》之21---使用Unity开发GearVR应用
使用Unity开发GearVR应用 上一章我们介绍了如何运用Unity3D开发Oculus Rift应用,当然,这个便宜且强大的游戏引擎也可以用于GearVR的应用开发,这时我们需要用到Ocu ...
- OpenStack 初探(一) -- All-In-One模式部署(初学OpenStack必备)
OpenStack 初探(一) -- All-In-One模式部署(初学OpenStack必备) 一.操作前需了解: 1. OpenStack提供IaaS(基础设施即服务)服务,它是开源的云计 ...
- C++ 八数码问题宽搜
C++ 八数码问题宽搜 题目描述 样例输入 (none) 样例输出 H--F--A AC代码 #include <iostream> #include <stdio.h> #i ...
- mybatis-Generator 代码自动生成报错 Result Maps collection already contains value for BaseResultMap
原因: 如果不把之前已经生成的xxxMapper.xml删除掉,再次生成代码时,会附加上去! 运行项目就回报上面的错误. 所以在运行代码生成之前,要把以前已经生成的xml文件清掉,以妨出错.