美文网首页
node爬虫 抓取网页的实现

node爬虫 抓取网页的实现

作者: 鸢_行风 | 来源:发表于2019-08-06 13:35 被阅读0次

    一、前言 

    一直感觉爬虫是个挺高端的东西 大数据时代 爬虫显得尤为重要。经过一番探索,终于用node实现了这个功能,还包括对抓取内容的解析

     二、正文 

    1、首先搭建一个http服务,这里使用我们熟悉的koa(这个是非必须的 你也可以使用纯node去抓 这里主要为了方便交互、看效果或者给非技术人员使用方便)

    服务端 index.js 代码

    ```

    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 内容请自己解决

    2、核心代码 使用node http模块请求一个 html页面

    依赖模块,请自行安装

    ```

    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的方法如下

    完整可运行代码地址 node-spider

    相关文章

      网友评论

          本文标题:node爬虫 抓取网页的实现

          本文链接:https://www.haomeiwen.com/subject/xsolcqtx.html