一直感受爬虫是个挺高端的东西 大数据时代 爬虫显得尤其重要。通过一番探索,终于用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