【Python數據分析】工作日發文章比周末發文章訪問量高?


前言

    看前面有位朋友分析了一下每天某個時間發文章的訪問量區別,以討論非系統性因素對文章訪問量的影響。之所以進一步討論工作日和周末發文對文章訪問量的影響,一是覺得很有意思,二是畢業設計與此有很大關系,三是覺得還是有點意義的,於是決定做一下這個工作。那么到底周末發文的訪問量是不是總體來說比工作日低呢,請往下看。

工具

1.Python 3.5

2.BeautifulSoup 4.4.1

3.Requests模塊

分析網頁

由於之前的工作已知博客園博客展覽頁是要通過ajax請求換頁,這里我采用了Requests模塊,post一個請求即可。

payload = {"CategoryType":"SiteHome","ParentCategoryId":0,"CategoryId":808,"PageIndex":i,"ItemListActionName":"PostList"}
r = requests.post(posturl,data = payload)

這樣就可以接收到第i頁的博文列表的HTML內容了。

再來看一下我們要爬取的內容: 

 

我們要爬取兩個內容:發布時間閱讀量,這次我們爬取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,就果斷換了,然后一發成功,不知道什么原因)

部分代碼如下:

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篇文章數據較小,感覺還是可以從速度方面進行優化的。

權重也是我自己簡單設計的,這方面也可以進一步優化。

歡迎大家提出意見與建議。

結論與啟示

所以說,如果你想要讓你的文章獲得更多的訪問量,獲得更大的影響力,盡量在工作日發文吧。當然,我前面說過,這些都只是非系統性因素,俗話說,打鐵還需自身硬,提高自己文章的質量和水平才是獲得更大文章影響力的決定性因素。希望廣大園友能夠致力於發布質量更高的文章,共同構建一個屬於我們的優質的博客園。

本文就是上星期四晚上寫就的,一直到現在才發,試下效果。事實是寫完文章很難忍住不發,哈哈。

 

同樣,爬取博客園只是為了學習之用,無其他目的,望理解。感謝韓子遲的工作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM