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

前言

    看前面有位朋友分析了一下天天某個時間發文章的訪問量區別,以討論非系統性因素對文章訪問量的影響。之因此進一步討論工做日和週末發文對文章訪問量的影響,一是以爲頗有意思,二是畢業設計與此有很大關係,三是以爲仍是有點意義的,因而決定作一下這個工做。那麼到底週末發文的訪問量是否是整體來講比工做日低呢,請往下看。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篇文章數據較小,感受仍是能夠從速度方面進行優化的。

權重也是我本身簡單設計的,這方面也能夠進一步優化。

歡迎你們提出意見與建議。

結論與啓示

因此說,若是你想要讓你的文章得到更多的訪問量,得到更大的影響力,儘可能在工做日發文吧。固然,我前面說過,這些都只是非系統性因素,俗話說,打鐵還需自身硬,提升本身文章的質量和水平纔是得到更大文章影響力的決定性因素。但願廣大園友可以致力於發佈質量更高的文章,共同構建一個屬於咱們的優質的博客園。

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

 

一樣,爬取博客園只是爲了學習之用,無其餘目的,望理解。感謝韓子遲的工做。

相關文章
相關標籤/搜索