一直感受爬蟲是個挺高端的東西 大數據時代 爬蟲顯得尤其重要。通過一番探索,終於用node實現了這個功能,還包括對抓取內容的解析html
一、首先搭建一個http服務,這裏使用咱們熟悉的koa(這個是非必須的 你也可使用純node去抓 這裏主要爲了方便交互、看效果或者給非技術人員使用方便)
服務端 index.js 代碼node
const Koa = require('koa'); const Router = require('koa-router'); // 路由 const {greenFmt, green, purple} = require('color7log'); // log工具 const app = new Koa(); const router = new Router(); // 默認頁面 router.get('/', async (ctx, next) => { ctx.response.type = 'html'; ctx.response.body = fs.createReadStream('./index.html'); }); app.use(router.routes()) app.listen(3000); green('服務已運行,端口:3000')
node index.js啓動服務 便可訪問你的頁面了 固然項目下要有一個 index.html 內容請本身解決git
二、核心代碼 使用node http模塊請求一個 html頁面github
依賴模塊,請自行安裝後端
const cheerio = require('cheerio'); const zlib = require('zlib'); const iconv = require('iconv-lite');
var http = require('http') // 引入模塊 var url = 'http://kaijiang.500.com/shtml/ssq/03001.shtml' // 獲取頁面源碼,調用方法進行解析及輸出 http.get(url, function(res) { var html = '' var arr = []; var chunks; res.on('data', function(data) { arr.push(data); }) res.on('end', function() { chunks = Buffer.concat(arr); chunks = zlib.unzipSync(chunks) // 由於頁面時gzip 因此要解壓 若是頁面時普通文本 不須要這個 var body = iconv.decode(chunks, 'gbk'); // 轉化爲可見字符 var cheerio = require('cheerio'), // 一個用法相似jq的庫 node後端使用 很方便的處理各類html模板 $ = cheerio.load(body); // 初始化dom對象 let content = $(".iSelectList a") let params = [] for (let i = 0; i < content.length; i++) { params.push($(content[i]).html()) // 獲取每一期的編碼 方便之後遍歷使用 } let nums = $(".ball_box01 li") for (let i = 0; i < nums.length; i++) { green($(nums[i]).html()) // 這裏實現了 抓取彩票的中獎號碼 } // 把各期的編碼 寫入到文件 方便使用 fs.writeFile("./data.txt", params.join(','), function(){ console.log("完成") }); }) }).on('error', function() { console.log('獲取數據出錯!') })
看頁面是否是gzip的方法以下app
完整可運行代碼地址 node爬蟲dom