美文网首页Node.js
NodeJS实现一个简单的知乎日报爬虫

NodeJS实现一个简单的知乎日报爬虫

作者: mvictor | 来源:发表于2017-06-20 14:49 被阅读110次

初衷

非常喜欢知乎日报上面的内容,另外又想用NodeJS来实现一个简单的爬虫练练手,so,对不住知乎了。(胡扯。。。。。。)

技术点

没什么难的东西,非要说一个,那就是 cheerio参考链接。如果对WEB前端开发很熟的话,�你很快就能上手这个库,因为它的用法和jQuery极其相似。

旅程开始

  1. 使用 NPM 建立��我们的爬虫工程

    npm init ZHSpider
    

    填写必要的信息后工程生成成功。

  2. 创建 data 目录,用以存放爬虫爬下来的的内容。

  3. 创建工程入口文件 app.js,需要和创建工程时填写的入口文件一致。

  4. 安装依赖。

    npm install --save cheerio
    
  5. 写爬虫逻辑

    上代码:

    var http =require('http');
    var cheerio = require('cheerio');
    var fs = require('fs');

    //需要爬的页面
    var url = 'http://daily.zhihu.com';

    function fetchPage(url){
        startRequest(url);
    }


    //获取故事标题、内容链接和图片链接
    function startRequest(url){
        http.get(url, function(res){
            var html = "";
            var storys = [];

            res.setEncoding('utf-8');
            res.on('data', function(chunk){
                html += chunk;
            });

            //1. 现将列表爬下来,列表包含每一个故事的标题、详细内容的链接等
            res.on('end', function(){
                var $ = cheerio.load(html);
                $('.main-content-wrap .row .col-lg-4').each(function(index, item){
                    var wraps = $(item).children();
                    wraps.each(function(index, box){
                        var item_box = $(box).find('a');
                        var story = {};
                        story.title = item_box.text();
                        story.link = url + item_box.attr('href');
                        story.img = item_box.find('img').attr('src');
                        var length = storys.length;
                        story.index = length;
                        storys[length] = story;
                    });
                });

                //2. 遍历列表,获取详细内容
                storys.forEach(function(item) {
                    fetchStoryContent(item.link, function(content, author){
                        item.content = content;
                        item.author = author;

                        //3. 将内容存储到本地文件
                        fs.appendFile('./data/' + item.title, item.content, 'utf-8', function(error){
                            if (error) {
                                console.log(error);
                            }
                        });
                    });
                }, this);
            });

        });
    }

    //获取故事内容
    function fetchStoryContent(url, callbackFunc){
        var html = "";
        http.get(url, function(res){
            res.on('data', function(chunk){
                html += chunk;
            });

            res.on('end', function(){
                $ = cheerio.load(html);
                var title = $('title').text();
                var author = $('span.author').text();
                var contentDom = $('.answer .content');
                var content = "";
                contentDom.each(function(index, item){
                    var text = $(this).text();
                    content += text;
                });
                //console.log(author);
                callbackFunc(content, author);
            });
        });
    }


    //开始请求
    fetchPage(url);

OK,到此,一个简单的额爬虫就完成了。这是一个非常简单的版本,还有许多的东西等待优化。运行一下,看看效果怎么样。

  1. 运行

    node app.js
    

运行结果:

运行结果

相关文章

  • NodeJS实现一个简单的知乎日报爬虫

    初衷 非常喜欢知乎日报上面的内容,另外又想用NodeJS来实现一个简单的爬虫练练手,so,对不住知乎了。(胡扯。。...

  • 日报知乎,一个第三方知乎日报客户端

    首先 日报知乎是一个基于Android平台的第三方知乎日报,界面UI参考自ios版的知乎日报。 知乎日报API来自...

  • 安卓日记——MVP重构知乎日报

    在之前安卓日记——手把手教你做知乎日报已经教大家分析和利用API做出一个简单的知乎日报,源码在github上也收到...

  • NodeJS实现简单的爬虫程序

    一、需要的模块: 二、 基础使用示例: 三、注意事项 必须手动安装require模块和cheerio模块 需要手动...

  • vue低仿知乎日报

    概述 一个基于vue的仿知乎日报的前端项目。 关于知乎日报: 知乎日报是一款拥有千万用户的资讯类客户端,每日提供来...

  • Flutter入门实战—高仿知乎日报

    Flutter版高仿知乎日报 高仿知乎日报,UI基本和Android端的知乎日报一致。新手小白的练习demo,代码...

  • 知乎日报

    为什么移动公司可以在⑥月份后利润分配低俗???下一次啊 : 这是真的!要和一个学校有关系XOFfer直白点-C...

  • 知乎日报

    一款全新的资讯类应用——知乎日报。知乎日报每天推荐几十条高质量的问题解答,内容涉及方方面面。 产品信息 名称:知乎...

  • 奇怪的bug:解决 vue-cli中 proxyTable 配置

    问题起源于最近打算用vue写个单页应用-知乎日报,因为知乎日报的api比较成熟,而且自己也是知乎日报的重度使用者。...

  • VUE前端框架

    Vue 入门实战项目——知乎日报 这是一个基于 Vue 全家桶开发的知乎日报 WebApp,页面样式主要参考 iO...

网友评论

  • MamBain:这个只是单页爬取 多页爬取有没有考虑过
    mvictor:@MamBain 这个没有,这篇文章就是一个简单实现,没有考虑太多。

本文标题:NodeJS实现一个简单的知乎日报爬虫

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