Zlib模塊和http模塊爬蟲案例

Zlib模塊

zlib是壓縮包的內置模塊,將文件打包,生成一個壓縮包

  • 以流的概念html

    • Node.js中數據傳輸是分片的流
  • 步驟前端

    1. fs建立可讀的流
    2. 建立空壓縮包
    3. 建立可寫的流
    4. 經過管道流進行數據傳遞
  • pipenode

    • 鏈接I/O之間的管道,這裏稱之爲管道流
代碼 const zlib = require( 'zlib' ) // zlib是一個壓縮包的內置模塊 const fs = require( 'fs' ) // fs是文件系統 const inp = fs.createReadStream('./dist/1.txt') // 建立可讀的流 const out = fs.createWriteStream('1.txt.gz') //建立可寫的流 const gzib = zlib.createGzip() // 建立一個空的壓縮包 inp .pipe( gzib ) .pipe( out ) $ node 文件名 

console模塊web

  • 底層調用的是 process.stdout

爬蟲案例

爬蟲

  • 經過後端語言爬取網站中的數據,而後經過特定模塊進行數據清洗,最後將數據輸出到前端json

  • 不是全部的網站都能爬取後端

  • 基本組成app

    1. 程序入口
    2. 請求模塊
    3. 數據解釋
  • 程序入口網站

    • 程序入口能夠用web頁面實現,還能夠在網頁上顯示抓取的數據和分析結果;
  • 請求模塊ui

    • https發送請求,有get方式和requers方式兩種
這邊用的是get,代碼以下: const http = require( 'http' ); const cheerio = require( 'cheerio' ); http.get('http://nodejs.org/dist/index.json', (res) => { const { statusCode } = res; // 獲取狀態碼 1xx - 5xx const contentType = res.headers['content-type']; // 文件類型 text/json/html/xml let error; // 錯誤報出,狀態碼不是200,報錯,不是json類型報錯 if (statusCode !== 200) { error = new Error('Request Failed.\n' + `Status Code: ${statusCode}`); } else if (!/^application\/json/.test(contentType)) { error = new Error('Invalid content-type.\n' + `Expected application/json but received ${contentType}`); } if (error) { console.error(error.message); // consume response data to free up memory res.resume(); // 繼續請求 return; } res.setEncoding('utf8'); // 字符編碼 

option裏分別寫入爬取網址的數據和請求頭數據this

若是是html格式的,如下代碼能夠不用寫

let error; // 錯誤報出,狀態碼不是200,報錯,不是json類型報錯 if (statusCode !== 200) { error = new Error('Request Failed.\n' + `Status Code: ${statusCode}`); } else if (!/^application\/json/.test(contentType)) { error = new Error('Invalid content-type.\n' + `Expected application/json but received ${contentType}`); } if (error) { console.error(error.message); // consume response data to free up memory res.resume(); // 繼續請求 return; } 

-數據解釋

將爬取到的數據調用cheerio顯示或保存
res.setEncoding('utf8'); // 字符編碼 // 核心 -- start let rawData = ''; res.on('data', (chunk) => { rawData += chunk; }); // 數據拼接 res.on('end', () => { // 數據獲取結束 try { const $ = cheerio.load( rawData ) $('td.student a').each( function ( item ) { console.log( $( this ).text() ) }) } catch (e) { console.error(e.message); } }); // 核心 -- end }).on('error', (e) => { console.error(`Got error: ${e.message}`); }); req.end() 

反爬蟲

給標籤的內容中放一張圖片
相關文章
相關標籤/搜索