您的位置:首页 > 其它

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

2013-09-01 00:31 891 查看
首先,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点半左右,这正是到公司后看新闻的时间。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: