看前面有位朋友分析了一下天天某個時間發文章的訪問量區別,以討論非系統性因素對文章訪問量的影響。之因此進一步討論工做日和週末發文對文章訪問量的影響,一是以爲頗有意思,二是畢業設計與此有很大關係,三是以爲仍是有點意義的,因而決定作一下這個工做。那麼到底週末發文的訪問量是否是整體來講比工做日低呢,請往下看。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篇文章數據較小,感受仍是能夠從速度方面進行優化的。
權重也是我本身簡單設計的,這方面也能夠進一步優化。
歡迎你們提出意見與建議。
因此說,若是你想要讓你的文章得到更多的訪問量,得到更大的影響力,儘可能在工做日發文吧。固然,我前面說過,這些都只是非系統性因素,俗話說,打鐵還需自身硬,提升本身文章的質量和水平纔是得到更大文章影響力的決定性因素。但願廣大園友可以致力於發佈質量更高的文章,共同構建一個屬於咱們的優質的博客園。
本文就是上星期四晚上寫就的,一直到如今才發,試下效果。事實是寫完文章很難忍住不發,哈哈。
一樣,爬取博客園只是爲了學習之用,無其餘目的,望理解。感謝韓子遲的工做。