CSDN博客原创访问量日报工具

最近突然有点迷上攒博客,没有什么比有人看、排名上升更让人兴奋的了。可是日常总不能老盯着看增加了多少访问量,像排名这种也没办法记住变化,故粗浅调查了一下beautifulsoup4这个python写的html文件解析模块,写了一个小工具用来统计每篇原创文章的访问量变化,在电脑上跑crontab,定时向公司邮箱发送报告。

# filename:CSDNvisitReport.py
# Author: BaoJunxian
# Date: 6/11/2018

import requests, bs4, json
from logging import info, basicConfig, INFO

basicConfig(level=INFO)

def infoGet(url, mainSelector, detailSelector, oldDic):
    response = requests.get(url).text
    soup = bs4.BeautifulSoup(response, 'html.parser')
    visit = int(soup.select('.grade-box dd[title]')[0].get('title'))
    rank = int(soup.select('.grade-box dl[title]')[0].get('title'))

    fileName = []
    fileVisit = []
    for i in soup.select(' '.join([mainSelector, detailSelector[0]])):
        text = i.getText()
        fileName.append(text.split('\n')[3].strip())

    temp = []
    for i in soup.select(' '.join([mainSelector, detailSelector[1]])):
        temp.append(int(i.getText().split(':')[1].strip()))
    for i in range(0, len(temp), 2):
        fileVisit.append(temp[i])

    dic = {fileName[i]: [fileVisit[i]] for i in range(len(fileName))}
    dic['visit'] = [visit]
    dic['rank'] = [rank]
    for i in dic.keys():
        if i in oldDic.keys():
            dic[i].append(dic[i][0] - oldDic[i][0])
        else:
            dic[i].append(dic[i][0])
    dic['rank'][1] = -dic['rank'][1]
    #排名数值增加,实际排名降低
    return dic

def reportGen(newDict):
    with open('visitReport.txt', 'w') as target:
        content = '''**************************
Today's summary is below:
    *Total Visit: %s   %s
    *Rank: %s   %s
**************************
Details:
            ''' % (newDict['visit'][0], newDict['visit'][1], \
                   newDict['rank'][0], newDict['rank'][1])
        target.write(content)
        target.write('\n')
        for i in newDict.keys():
            if i != 'visit' and i != 'rank':
                target.write(''.join([i.strip().ljust(45, ' '), \
                                      str(newDict[i][0]).ljust(5), \
                                      str(newDict[i][1]).ljust(7), '\n']))

def main():
    url = 'https://blog.csdn.net/qq_31331027?t=1'
    #对于CSDN获取原创访问量,直接修改url为自己文章列表主页即可
    detailSelector = ['h4 a', '.read-num']
    mainSelector = 'main .article-list'
    oldInfo = {}
    try:
        with open('visitData', 'r')as target:
            oldInfo = json.load(target)
    except:
        pass
    newDict = infoGet(url, mainSelector, detailSelector, oldInfo)
    reportGen(newDict)

    with open('visitData', 'w') as target:
        json.dump(newDict, target)

if __name__ == '__main__':
    main()

这是主要的运行程序,会生成当天的统计数据,主要记录数据为:总阅读量、总排名、每篇原创的阅读量以及这几个数据跟前一天对比的涨幅(跌幅)。在对这几类数据进行处理时,将数据名称作为key,数值value用list表示,list[0]表示当前数量,list[1]表示跟前一天list[0]数值上的差值。运行程序生成两个文件,一个是当日统计数据的字典,json形式保存(visitData),还有一个直接是visitReport.txt,记录报表内容,直接用于crontab发送邮件的文本内容(crontab的执行目录默认是从cron计划用户的家目录下面的,因此这两个visitX文件默认生成在用户家目录下面)。
其次,编写脚本自动执行程序以及发送邮件的命令(发送邮件我用的是linux,安装sendemail):

# filename:autoReport.py
import os,time
os.system('python /home/stanpao/python/CSDNreport/CSDNvisitReport.py')
time.sleep(120)
os.system('sendemail -s smtp.qq.com -f [email protected]\
         -t [email protected] -u "CSDN Daily Report" -xu [email protected]\
         -xp password -o message-content-type=text\
         message-file=visitReport.txt message-charset=utf-8')

值得说明sendemail中几个参数:-s 是smtp服务器域名,如果qq就是smtp.qq.com,如果是163就是smtp.163.com;-f 发件人; -t 收件人; -u 邮件标题; -xu 发件人邮箱 ; -xp 发件邮箱密码 ; -o指定一些邮件内容参数: message-content-type – 邮件文本类型,message-file – 文本文件,message-charset – 邮件内容编码形式。至此,已经能够进行正常的report。
但是,要完全自动化发送每日报道,还需要地址crontab由系统自行完成:

0 9 * * * python /home/stanpao/python/CSDNreport/autoReport.py

以上,完全告终。收到邮件效果如下。其中,第一个数字为当前值,后一个数字为对比前一天的浮动数值。
代码略有粗糙,也没什么复用价值,重构也没啥必要,图个实用好玩,还望客官轻点~我还是个孩子~
CSDN博客原创访问量日报工具_第1张图片

你可能感兴趣的:(Python,工具配置)