看前面有位朋友分析了一下天天某个时间发文章的访问量区别,以讨论非系统性因素对文章访问量的影响。之因此进一步讨论工做日和周末发文对文章访问量的影响,一是以为颇有意思,二是毕业设计与此有很大关系,三是以为仍是有点意义的,因而决定作一下这个工做。那么到底周末发文的访问量是否是整体来讲比工做日低呢,请往下看。html
1.Python 3.5python
2.BeautifulSoup 4.4.1ajax
3.Requests模块mvc
因为以前的工做已知博客园博客展览页是要经过ajax请求换页,这里我采用了Requests模块,post一个请求便可。函数
payload = {"CategoryType":"SiteHome","ParentCategoryId":0,"CategoryId":808,"PageIndex":i,"ItemListActionName":"PostList"} r = requests.post(posturl,data = payload)
这样就能够接收到第i页的博文列表的HTML内容了。工具
再来看一下咱们要爬取的内容: post
咱们要爬取两个内容:发布时间 与 阅读量,此次咱们爬取40—200页共161页的内容,并分两种状况:剔除3000以上访问量的文章以及考虑所有文章,而后要作的工做有两个:根据打扫过的数据,统计出一周周一到周日天天的文章总数与访问量总数,最后用WPS表格来制做出对比图。一提到解析网页,我毫无疑问地又想到了BeautifulSoup这款工具,简单好用,功能强大,推荐。学习
那么咱们首先用BeautifulSoup抓出 class = post_item_foot 的 ‘发布于...’ 内容,以及抓出 class = 'article_view' 的 ’阅读(...)‘内容,再去除一些无用的部分,最后提取出日期三个数据y,m,d,以及阅读量,这里咱们无需关心文章究竟是谁发的或者具体时间。优化
(ps:Python 3.5下装BeautifulSoup总是不成功,后来发现有更高的版本4.4.1,就果断换了,而后一发成功,不知道什么缘由)url
部分代码以下:
bs = BeautifulSoup(r.text,"html.parser") #转化成beautifulsoup对象 View = bs.findAll(attrs = {'class' : 'article_view','class' : 'post_item_foot'}) #找出两个class内容 strallview = str(View) #转化为字符串 viewcountsmatch = re.findall('阅读\(\d+\)',strallview) viewdaymatch = re.findall('发布于 ....-\d+-\d+',strallview)
得出日期三个数据之后,这里我使用蔡勒公式(Zeller Fomula)直接计算出该日是星期几。蔡勒公式函数代码以下:
def ZellerFomula(y,m,d): if m == 1 or m == 2: y -= 1 m += 12 c = y // 100 y = y - c * 100 w = (c // 4) - 2 * c + (y + y // 4) + (13 * (m + 1) // 5) + d - 1 while w < 0: w += 7 w %= 7 if w == 0: w += 7 return w
而后就是简单的统计了。
这里我有一个考虑,因为日子越早的文章显然访问量老是会更高,因此为了在必定程度上抵消这种效应,我为每一页的20篇文章设置了一个权重:
weight = 1 - 0.0005 * (i - 40)
即i越大,页数越大,发布越早,访问量相应打一个折扣,这里我设置的最大折扣为92%,即第200页的文章相应的阅读量为其原来阅读量的92%,但愿能稍微提高一下结果的公平性。
这时候写出python代码(剔除3000+文章版本):
import requests import re import urllib from bs4 import BeautifulSoup def ZellerFomula(y,m,d): if m == 1 or m == 2: y -= 1 m += 12 c = y // 100 y = y - c * 100 w = (c // 4) - 2 * c + (y + y // 4) + (13 * (m + 1) // 5) + d - 1 while w < 0: w += 7 w %= 7 if w == 0: w += 7 return w f = open('keyvalue.txt','w') posturl = 'http://www.cnblogs.com/mvc/AggSite/PostList.aspx' daysum = [0,0,0,0,0,0,0,0,0] count = [0,0,0,0,0,0,0,0,0] for i in range(40,201): weight = 1 - 0.0005 * (i - 40) payload = {"CategoryType":"SiteHome","ParentCategoryId":0,"CategoryId":808,"PageIndex":i,"ItemListActionName":"PostList"} r = requests.post(posturl,data = payload) bs = BeautifulSoup(r.text,"html.parser") View = bs.findAll(attrs = {'class' : 'article_view','class' : 'post_item_foot'}) strallview = str(View) viewcountsmatch = re.findall('阅读\(\d+\)',strallview) viewdaymatch = re.findall('发布于 ....-\d+-\d+',strallview) #print(viewcountsmatch) #print(viewdaymatch) for j in range(len(viewcountsmatch)): vcm = viewcountsmatch[j] vcm = re.sub('阅读\(','',vcm) vcm = re.sub('\)','',vcm) #print(vcm) vc = int(vcm) if(vc > 3000): continue vdm = viewdaymatch[j] vdm = re.sub('发布于 ','',vdm) vdm = vdm.split('-',2) #print(vdm) ans = ZellerFomula(int(vdm[0]),int(vdm[1]),int(vdm[2])) #print(ans) ass = int(weight*vc) #print(str(ass)+ ' ' +str(vc)) daysum[ans] += ass count[ans] += 1 for i in range(1,8): f.write(str(daysum[i])+' ') f.write(str(count[i])) f.write('\n') f.close()
这代码写了好久,主要python好久没碰也不熟悉了。
而后咱们运行就能够爬了,耗时大约40+秒,结果以下:
1.剔除版本数据
每行前面是161篇文章中星期1~7的文章访问总量,后面是文章数量。不算3000+访问以上的文章总数3104篇,贡献访问量1573399。
2.未剔除版本
文章总数3220 = 161 x 20篇,贡献访问量2176232.
由上能够看出,3000+访问以上的较优质文章116篇,占比3.6%,其贡献的访问量为602833,占比27.7%,这也是预料之中的。
由图可得,两种方式整体上的差距并不大,从发文数量上看,周一发文最多,多是你们都上班了,开始新一周的工做使然。随后周二到周四发文数量略有波动,可是都差不太多,而且比周一少。到周五因为放假了,文章数量也相应减小。到周末两天发文数量就有了很大降低,这也是预料之中。
从文章访问量来看,周一达到最大,随后又以较周一低的水平波动,到周末达到低谷,一大缘由也是因为文章数量的减小。
从平均访问状况来看,周一至周五的平均访问量广泛比周末稍高一点,印证告终论“工做日发文要比周末发文平均访问量多”,可是并无多太多,其中周一达到最高峰,随后有波动,到周日有一个反弹,说明“周一效应”仍是有一点的。
两幅图的有些显著的不一样就是访问量来看,剔除3000+文章之后,周二的访问量有10W+的显著降低,这是否说明周二的时候高质量文章的访问在急速增加的缘由呢。
后来我发现光考虑篇均访问还不全面,由于周一即便篇均访问较高,可是它的文章数也是很大的,因此周一的文章必然会很快被覆盖过去,因此这里有一个性价比的问题,因而我又算了一项指标,即篇均访问与当日文章数量之比,底数越大小即文章数量越小,越晚被覆盖,曝光率越大,篇均访问越大天然带来的效应越大。因此有了下面这张图:
事实证实,性价比最高的发文日期竟然是发的不多,访问不多的周末!
虽然本次挖掘3220篇文章数据较小,感受仍是能够从速度方面进行优化的。
权重也是我本身简单设计的,这方面也能够进一步优化。
欢迎你们提出意见与建议。
因此说,若是你想要让你的文章得到更多的访问量,得到更大的影响力,尽可能在工做日发文吧。固然,我前面说过,这些都只是非系统性因素,俗话说,打铁还需自身硬,提升本身文章的质量和水平才是得到更大文章影响力的决定性因素。但愿广大园友可以致力于发布质量更高的文章,共同构建一个属于咱们的优质的博客园。
本文就是上星期四晚上写就的,一直到如今才发,试下效果。事实是写完文章很难忍住不发,哈哈。
一样,爬取博客园只是为了学习之用,无其余目的,望理解。感谢韩子迟的工做。