热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【数据分析】6点发的文章在博客园阅读量最高?

最近个人恶趣味持续泛滥。博客的访问量、粉丝数一直是满足楼主个人虚荣心的好东西(原谅楼主也是凡人爱慕虚荣),有时候我就在想ÿ

最近 "个人恶趣味" 持续泛滥。

博客的访问量、粉丝数一直是满足楼主个人虚荣心的好东西(原谅楼主也是凡人爱慕 "虚荣"),有时候我就在想,同一篇随笔,不同时间段发表是不是能获得不同的阅读量,换句话说,博文质量相同的情况下,哪个时间段的阅读量可能会多一些呢,于是决定让数据说话。(我会告诉你其实是想学习 node 嘛)

PS:爬取博客园并不想对博客园的服务器造成任何影响(事实也证明博客园的服务器是很刚的),只是为了学习之用,还望博客园的大大们海涵。

整体架构

整体思路非常简单,采集发表在博客园首页的文章的 发表时间 以及 阅读量,进行分析。

博客园首页每页 20 篇随笔,采集 150 页,从 p51 到 p200,相应的 url 为 http://www.cnblogs.com/#p51 到 http://www.cnblogs.com/#p200,取每篇随笔的发表时间(小时)以及阅读量,最后求得该时段每篇随笔的阅读量平均值。

675542-20160109113656621-1565793368.png

考虑到我和马云平均一下也是亿万富翁,得剔除一些有影响的数据。怎么说?比方有篇文章发表于 5 点,阅读量为 10k,并不是因为发表于 5 点导致阅读量很高,而是因为这篇文章确实有质量,如果它是 10 点发表,它的阅读量还是一样高,如果将这条数据算做有效数据,那么发表于 5 点的文章的平均阅读量一下子会被拉高,和 5 点这个时段并没有直接关系。根据经验,我把这个阈值定为阅读量 2000,也就是剔除了阅读量 2000+ 的数据。这也正是前面说的,"博文质量相同" 为前提,当然这个 "相同" 不可能是绝对的,只能相对来说。

后端

后端方面,我希望能给前端提供一个接口,返回一个数组,该数组拥有 20*150 个对象,每个对象代表一条文章数据,它有两个 key 值,一个 key 为 postTime,表示发表时间(小时),另一个 key 为 viewTimes,表示阅读量。

675542-20160109113230059-776780529.jpg

比如上面这条数据,表示文章发表于 9 点(多),阅读量为 885。

这里我用 node 去爬博客园。

之前也用 node 并发爬过网页(详见 Nodejs - 如何用 eventproxy 模块控制并发),但是我不确定并发 150 个请求是不是会被博客园 "拒绝",好在我多虑了。

但是博客园的爬取和之前的爬虫还是有点区别,开始我以为爬取 http://www.cnblogs.com/#p51 到 http://www.cnblogs.com/#p200 即可,后来发现不对劲,它们的爬出来的页面 HTML 源代码都是一样的,都是博客园首页,才恍然大悟到博客园的翻页是 ajax 请求的(不知道 phantomjs 能不能得到类似的请求之后的页面源码),好在 SuperAgent 模块不仅能 get,还能 post。我们把这条请求抓出来看看:

675542-20160109113329481-1517134203.jpg

用 SuperAgent 伪造 post 请求:

superagent .post('http://www.cnblogs.com/mvc/AggSite/PostList.aspx').send({"CategoryType":"SiteHome","ParentCategoryId":0,"CategoryId":808,"PageIndex":i,"ItemListActionName":"PostList"}).end(function (err, sres) { // callback// ...});

接下去就不难了,用 eventproxy 模块控制并发,完成 150 个页面数据的抓取后,进入 after 回调;用 cheerio 模块对页面进行分析,得到需要的数据;通过 express 模块进行展示。这部分具体可以参考 node系列 的前两篇文章。

node 部分具体代码可以参考 Github

前端

前端方面,需要进行数据的直观展示。

一开始想的是用 ajax 去请求接口,但是 node 比 php 复杂多了,不大好搞,我也在 cnode 社区提了个 问题,解答如下:

首先你没理解ajax技术的本质1. 让你的node能在浏览器端输出 hello world 参见http://www.nodebeginner.org/index-zh-cn.html
2. 在你的页面端 js,跑 ajax 尝试去获取这个 hello world。如果涉及到跨域,请采用 fs 文件系统 + 设置 mime 的方式自己做 fs 服务器输出 page。

感觉有点复杂,毕竟文件系统什么的都没接触过,还好也有了解决方案,决定用 jsonp 进行跨域。

在调研了几款 Javascript 图表库后,最后选择了 chart.js 进行数据渲染,主要是它比较轻巧,很适合做简单的 demo。

接下去就非常简单了,将爬虫采集到的数据在 jsonp 回调函数中进行分析即可,分析的数据传入图表库的接口中,完成图表的渲染。

前端部分具体代码可以参考 Github

总结

最后来看看成果吧。

首先统计的是是各个时间段发文总量,这个图表没有剔除数据,共 3000 条。

675542-20160109113424606-1983719072.jpg

由图可以看出博客发表在 16点、17点 达到了高峰,个人猜测可能是快下班了,手头上的活都已经干完了,正好有时间可以总结总结。而 0-8 点以及 12-13 点明显处于谷值,这也不难理解,毕竟是睡觉时间以及午休时间。其他各个时间段的数据差异不大。

再来来看看各时段发文的平均阅读量(剔除了阅读量 2000+ 的数据):

675542-20160109113437871-869124255.jpg

由图中可以看到,6 点发的文章阅读量 "鹤立鸡群" 啊,平均可以斩获 875 的访问。而 7-9 点发表的文章阅读量也紧随其后,这不难理解,6 点发表的文章正好可以被上班途中的人阅读到,一般 6-8 点发文的量并不多,这样你的文章就有很大的概率被上班途中的人看到。而 7-9 点也是一样的道理,早上到公司,打开浏览器,看看博客园首页,这几乎成了很多人的 "惯性",所以这个时间点的发文阅读量会相对大些。

其他一些时间点的数据相对平均,12 点又迎来一个小高峰,吃完午饭,浏览下博客园也是常事。

所以,程序员们,早起 6 点发文吧!当然,程序员们才不会干这种事,这种事交给定时脚本来干就好了,这个就是后文了。

如果你有兴趣,还可以研究下周末发文的阅读量和工作日的区别(据说周末发文没人看哦)。

本文所有代码可在我的 Github 中找到。



推荐阅读
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
author-avatar
沙胆建筑_829
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有