nodejs簡單抓包工具
阿新 • • 發佈:2019-08-22
就是簡簡單單寫程式的我為什麼需要抓包?
其實在平時寫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,然後輸入
預覽
這樣就搞定了,是不是很爽啊。
&n