利用脚本对CSDN博客实践数据收集与分析

简介: 首先,CSDN博客是没有给你做后台统计的,需要你自己收集数据。我写了个shell脚本,主要通过curl来获取HTML页面并自己过滤出需要的数据。 最新的代码共享在这里 https://code.csdn.net/hursing/shell-scripts/tree/master/pv.sh ,在linux和Mac OS X都可以运行(linux可能需要先sudo apt-get install curl),只是输出结果的格式有点差别,以linux的为准。

首先,CSDN博客是没有给你做后台统计的,需要你自己收集数据。我写了个shell脚本,主要通过curl来获取HTML页面并自己过滤出需要的数据。

最新的代码共享在这里 https://code.csdn.net/hursing/shell-scripts/tree/master/pv.sh ,在linux和Mac OS X都可以运行(linux可能需要先sudo apt-get install curl),只是输出结果的格式有点差别,以linux的为准。

(可以修改脚本中的id,就可运用到其他博主的博客了,无需登录)

#!/bin/bash
#record pv of hursing's blog. by liuhx

id="hursing"
interval=10
logFile="pvlog.txt"

url="http://blog.csdn.net/"$id"/article/list/"
viewmode="?viewmode=contents"
userAgent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0"

function getMaxPage {
	response=`curl -s -A $userAgent $url"1"$viewmode`
	echo $response | grep -o "共[0-9]\+页</span>" | grep -o "[0-9]\+"
}

function getArticalTitles {
	page=1
	while [ $page -le $1 ]; do
		response=`curl -s -A $userAgent $url$page$viewmode`
		echo "$response" | grep -A 1 "link_title" | grep -vE "link_title|\-\-" | sed "s#^\ \+##"
		let page+=1
	done
}

function queryReadTimes {
	page=$1
	date=`date +%y%m%d%H%M`
	zongshu=""
	cishu=""
	while [ $page -ge 1 ]; do
		response=`curl -s -A $userAgent $url$page$viewmode`
		if [ -z $zongshu ]; then
			zongshu=`echo "$response" | grep -o "<span>[0-9]\+次</span>" | grep -o "[0-9]\+"`
		fi
		pv=`echo "$response" | grep -o "阅读</a>([0-9]\+)" | grep -o "[0-9]\+"`
		cishu=$pv" "$cishu
		let page-=1
	done
	echo $date" "$zongshu" "$cishu
}

maxPage=`getMaxPage`
getArticalTitles $maxPage | tee -a $logFile
while true; do
	queryReadTimes $maxPage | tee -a $logFile
	sleep $interval
done
主流程大致如下:

1.通过“共多少页”为关键字,得到博客文章在目录视图下的最大页数。目录视图能显示更多文章,需要注意到url里有?viewmode=contents后缀。如果CSDN博客改版,那这个脚本可能就会错了。目前2013年9月1日还没改。

2.循环页数,获取所有文章标题的列表。关键字的选取需要分析HTML网页的结构。先把所有文章标题输出到pvlog.txt


3.循环页数,获取所有文章的阅读次数,连同当前时间(精确到分钟)和总访问次数,在同一行输出,追加到pvlog.txt

4.以间隔10秒无限循环第3步


我设的时间间隔是5分钟(interval=300),得到的pvlog.txt放在https://code.csdn.net/hursing/shell-scripts/tree/master/pvlog.txt,部分内容如下:

iOS私有API(二) UIGestureRecognizerDelegate的两个函数
iOS私有API(一) -[UIApplication _cancelAllTouches]
二进制/十六进制转浮点数的编程(互转类似)
Xcode3创建和使用iOS的dylib动态库
利用Objective-C运行时hook函数的三种方法
在windows和mac上以特定ua启动chrome的脚本
Mac OS X编译最新webkit(2013-03-15)
1308292017 36272 241 212 92 120 81 231 288 433 361 522 272 499 300 299 286 503 295 407 406 463 503 550 222 391 531 757 512 520 842 609 566 613 229 745 815 167 207 423 374 384 238 506 316 463 783 412 722 834 1061 512 1194 586 856 334 196 367 1359 374 308 1159 2257 324 406 344 617 157 153 400 167 171 992 501 101 260
1308292022 36274 241 212 92 120 81 231 288 433 361 522 272 499 300 299 286 503 295 407 406 463 503 550 222 391 531 757 512 520 842 609 566 613 229 745 815 167 207 423 374 384 238 506 316 463 783 412 722 834 1061 512 1194 586 856 334 196 367 1359 374 308 1159 2257 324 406 344 617 157 153 400 167 171 992 501 101 260
1308292027 36275 241 212 92 120 81 231 288 433 361 522 272 499 300 299 286 503 295 407 406 463 503 550 222 391 531 757 512 520 842 609 566 613 229 745 815 167 207 423 374 384 238 506 316 463 783 412 722 834 1061 512 1194 586 856 334 197 367 1359 374 308 1159 2257 324 406 344 617 157 153 400 167 171 992 501 101 260
1308292032 36275 241 212 92 120 81 231 288 433 361 522 272 499 300 299 286 503 295 407 406 463 503 550 222 391 531 757 512 520 842 609 566 613 229 745 815 167 207 423 374 384 238 506 316 463 783 412 722 834 1061 512 1195 586 856 334 197 367 1359 374 308 1159 2257 324 406 344 617 157 153 400 167 171 992 501 101 260
文章阅读次数的每一行中,第1个数字是时间(年月日时分),第2个数字是博客总访问次数,后面是74篇文章的阅读次数。

接下来是把数据做成excel表格(我用的是WPS表格,MS Excel的操作类似)。首先把文章标题从pvlog.txt剪切粘贴到excel,然后复制这一整列单元格,再右键单击一个空单元格,选菜单“选择性粘贴”,再勾上“转置”后确定。

那么列就会变成行了。

再用excel打开pvlog.txt,选择以空格为分隔符导入

那就得到数据表了。在首行再插入空行,把刚才的文章标题复制过来,从第3列开始对应,那就完整了。
还可以做的一些操作:

1.加上时间和访问次数的标示

2.访问次数旁边增加一列,数据为访问次数的增量,可以通过公式填充

3.冻结窗格,令首行和前3列一直显示

4.应用条件格式,令增量列大于0的行背景显示为紫色。令阅读次数数据中,大于上一行的格子背景显示为橙色

5.在最后一行的下面,增加一行,统计期间的阅读次数增量(最后一个数据减第一个数据)。

6.增加数据图表。时间段内的增量列的柱状图。


excel文件放在 https://code.csdn.net/hursing/shell-scripts/tree/master/pvall.xls , 打开网页后还需要下载。

通过图表,你可以看出:

1.从8点开始,阅读量变大,程序员开始上班了。

2.早上在10点到12点期间,阅读量最大。这是程序员最有精力阅读文档的时候。按照人的精神状态变化图,这个时段也是脑子较活跃的时候,适合干活。如果你是用博客为营销自己,那最好就是在8点半发表文章,可以在博客首页的列表最前面让人看到哦~~~

3.8月30日晚上11点左右有个小高峰,不知道哪个苦逼的程序员在加班了。

4.24小时都有人在访问。可惜只有CSDN自己能记录IP,不然可以知道是不是国外的同学在看。

还可以做的:

1.看看哪篇文章的阅读次数增量最多,最受欢迎。(28次的《IDA反汇编/反编译静态分析iOS模拟器程序(八)IDA for Mac》)

2.哪个系列/专栏的文章最多人看。 (需要自己计算)

3.总访问次数不等于所有文章的阅读总次数

4.CSDN数据有延迟,总访问次数增加了,但文章的阅读次数并非实时跟着变,过几分钟才变。

5.一天的访问增量,也就是日PV(Page Visit),在230左右。

等等


这里只有8月29日(周四)20:17到8月31日(周六)14:10的数据,记录更长时段还可以做到:

1.星期一到星期天,哪天最多。周六周日加班的人不少啊

2.最近的趋势是哪个专栏的多(自己另外计算专栏包含的文章)。 我的博客目前有3个专栏,通常是WebKit on iOS这个专栏内的文章阅读增量较大。然而最近IDA反汇编专栏的阅读量较大,可能与最近好多app被拒有关,都转去cydia发布了,得多学学越狱的东西,那得靠IDA反编译。

3.程序员的加班高峰在月初还是月底?国家节假日,程序员有得放假吗?

等等


就到这了,本人是程序员,还是别抢产品经理的饭碗吧。请继续自由发挥。


后话:

没想到被放到首页去了,下面这是本文的数据记录,可以看到被放到首页以后,阅读次数大增的情况。阅读增量的峰值在8点半到9点半左右,这正是到公司后看新闻的时间。


目录
相关文章
|
12月前
|
Java 测试技术 Android开发
Android性能测试——发现和定位内存泄露和卡顿
本文详细介绍了Android应用性能测试中的内存泄漏与卡顿问题及其解决方案。首先,文章描述了使用MAT工具定位内存泄漏的具体步骤,并通过实例展示了如何分析Histogram图表和Dominator Tree。接着,针对卡顿问题,文章探讨了其产生原因,并提供了多种测试方法,包括GPU呈现模式分析、FPS Meter软件测试、绘制圆点计数法及Android Studio自带的GPU监控功能。最后,文章给出了排查卡顿问题的四个方向,帮助开发者优化应用性能。
741 4
Android性能测试——发现和定位内存泄露和卡顿
|
安全 Java UED
掌握SpringBoot单点登录精髓,单点登录是一种身份认证机制
【8月更文挑战第31天】单点登录(Single Sign-On,简称SSO)是一种身份认证机制,它允许用户只需在多个相互信任的应用系统中登录一次,即可访问所有系统,而无需重复输入用户名和密码。在微服务架构日益盛行的今天,SSO成为提升用户体验和系统安全性的重要手段。本文将详细介绍如何在SpringBoot中实现SSO,并附上示例代码。
261 0
commons-httpclient 和 httpclient 区别
commons-httpclient 和 httpclient 区别
491 0
|
数据采集 数据可视化 算法
GitHub星标68K!Python数据分析入门手册带你从数据获取到可视化
Python作为一门优秀的编程语言,近年来受到很多编程爱好者的青睐。一是因为Python本身具有简捷优美、易学易用的特点;二是由于互联网的飞速发展,我们正迎来大数据的时代,而Python 无论是在数据的采集与处理方面,还是在数据分析与可视化方面都有独特的优势。我们可以利用 Python 便捷地开展与数据相关的项目,以很低的学习成本快速完成项目的研究。 今天给小伙伴们分享的这份Python数据分析入门手册本着实用性的目的,着眼于整个数据分析的流程,介绍了从数据采集到可视化的大致流程。
|
存储 负载均衡 Java
Java中的服务注册与发现原理与实现
Java中的服务注册与发现原理与实现
|
缓存 自然语言处理 Java
还在为字典值、枚举值校验烦恼吗,不妨试试这个
本文介绍了如何在Java中实现常量值校验的封装,主要包括两个方面:字典值类型的校验和枚举类型的校验。首先,作者提到在进行数据验证时,实体类字段需要添加`@Valid`注解。然后,对于字典值类型的校验,可以通过`@DictVaild`注解检查当前字段值是否在数据库中的字典值类别内,或者与预定义的枚举类中的值相匹配。在进行校验时,可以设置`dictType`参数为`DictType.CODE`或`DictType.LABEL`来分别验证代码值或标签值。
335 0
|
Python
深入理解Python中的range函数和for循环
探索Python的`range`函数与for循环:用于迭代的整数序列生成。for循环遍历可迭代对象,range生成指定范围的整数。基本语法:`for i in range(start, stop, step)`。结合使用可实现循环迭代、列表生成器及循环嵌套。注意避免无限循环和大范围导致的性能问题。通过实例学习,如计算序列和、打印九九乘法表及遍历列表操作。深入了解这些概念,提升Python编程能力。
501 0
|
设计模式 自然语言处理 算法
摆脱复杂图谱术语,7个原则搞定Schema建模
本文我们结合蚂蚁域内的多个业务场景,举例说明结合SPG规范的结构与语义解耦的知识建模及schema设计方法。
|
Kubernetes Java 网络架构
冷知识!如何远程调试在K8S POD中的Java应用程序!
冷知识!如何远程调试在K8S POD中的Java应用程序!
739 0