如何准确地给阅读计数器『注水』
上次博文提到,本站点的源服务器(位于Cloudcone)因为服务商进勒索了,除了有备份的之外,数据全丢,这其中自然就包括统计服务。本来各个文章的阅读数量,多的上千,少的也有几十,看着很赏心悦目,但现在没有了,就不赏心也不悦目了,咋办呢?
很简单,我们只需要通过别的数据来源,往里面『注水』就可以了
每天逛一逛,灌一灌,有益健康1. 前言
博客站点的访问流量主要有三个源头:
- 博客聚合站,阅读器(定期拉取RSS)
- 搜索引擎
- 直链(在其他网站/社交媒体被引用)
第一个和第三个,没办法获取准确数据,倒是第二个,看起来很有希望,甚至也是笔者一开始尝试的途径。不过很显然,仔细分析就能发现,这样获取到的数据其实质量是参差不齐的,一方面自然是不能代表全部流量来源(后台发现还有使用DuckDuckGo,Yahoo,以及Perplexity的用户),另一方面主要还是不同搜索引擎所面对的目标用户不同。
举个例子:本站的搜索引擎统计主要是Bing和Google,他们都提供了查询搜索关键词的选项。在剔除掉『cloudcone』这个关键词(因为这是近期热点,会对数据产生偏差影响)之后,拉取最近一个月的搜索关键词,可以得到如下结果:
这是来自Google的统计结果
这是Bing的搜索结果很显然,这就形成了三种不同的搜索倾向:
- 共有的:普通技术类(PVE,某浏览器扩展)
- Bing较多的:对讲机类(笔者有专门博文讲过这件事)
- Google较多的:加密代理类,重名类(这里不是枫林社区)
很显然,鱼龙混杂的搜索结果,给注水操作带来了麻烦。
别问了别问了,这里真的不是枫林社区!考虑了很久,突然想起来一件事:站点还有个Google Analytics的服务挂着,而且几乎就是开始建站就已经挂着了。虽然Google统计是各大广告屏蔽途径的首要拦截目标之一,但目前也没办法了,只能死马当活马医,把Google Analytics数据当作注水的根据。
2. 获取数据
进入Google Analytics控制台,导航到网页和屏幕页面:
在左侧接着把右上角的时间范围,起始点设置在站点开始运行的时间,终结点就是今天,下面就可以出现建站以来的统计数据:

我们主要关心的项目是浏览次数,因此只要拿到这个值,然后写入数据库即可。还好,GA提供了便捷的数据导出方式,只需要点击右上角的共享图标,在『共享此报告』中选择『下载文件』——『CSV文件』,就可以了。
CSV是方便进一步处理3. 编写脚本,注水
请出我们的老朋友Python,写点正则表达式提取正确的路径中的文章ID,再切割开浏览次数,然后就可以拼凑SQL语句了:
import re
with open('ga.csv', 'r', encoding='utf-8') as f:
for l in f:
r = re.search(r'(?:\/index\.php\/archives\/)(\d+)(?:\/)', l)
if(r != None):
cid = r.group(1)
# 解析csv
s = l.split(',')[1]
# 拼凑的语句,请自行修改
print(f'UPDATE `blog_page_views` SET `views`=`views`+{s} WHERE `cid`={cid};')本脚本主打一个凑合,除了最明显的,没有错误处理之外,理论上可以在Python里面直接连接数据库进行操作,但对于仅仅运行一次的脚本来说,调试起来就麻烦了,因此这里选择拼凑SQL语句,再手动扔到数据库管理软件执行的方式来操作。
同时,上面拼凑的语句是`views=views+{s}`,主要原因就在于,这份获取到的统计数据,部分路径有hashtag,会导致同一个ID出现多条统计结果。虽然理论上的正确处理方式是在程序代码里面去重,否则可能会导致数据不准确,但我们只是在灌水而已,不是精确统计,多出来的那一点毛毛雨就当作补偿好了。
软件是HeidiSQL经过注水处理后,就可以看到热门文章已经有了对应量级的访问数了:
PVE Docker文章4. 写在最后
科学注水,有益身心健康。
(完)
根据我自己站点的观察,开广告拦截的访客不到30%,基本谷歌数据乘以1.4就是实际的了
看来确实差不多,改天我也观察下