# 【Python数据分析】工作日发文章比周末发文章访问量高？

## 前言

看前面有位朋友分析了一下每天某个时间发文章的访问量区别，以讨论非系统性因素对文章访问量的影响。之所以进一步讨论工作日和周末发文对文章访问量的影响，一是觉得很有意思，二是毕业设计与此有很大关系，三是觉得还是有点意义的，于是决定做一下这个工作。那么到底周末发文的访问量是不是总体来说比工作日低呢，请往下看。

## 工具

1.Python 3.5

2.BeautifulSoup 4.4.1

3.Requests模块

## 分析网页

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

（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)

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

weight = 1 - 0.0005 * (i - 40)

## 代码

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)

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()

## 运行结果与分析

1.剔除版本数据

每行前面是161篇文章中星期1~7的文章访问总量，后面是文章数量。不算3000+访问以上的文章总数3104篇，贡献访问量1573399。

2.未剔除版本

## 结论与启示

posted @ 2016-01-18 06:02 whatbeg 阅读(...) 评论(...) 编辑 收藏