python 爬取博客访问量并且统计数据成图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 爬取博客访问量并且统计数据成图相关的知识,希望对你有一定的参考价值。


update by 2018-10-01:

开通了一个公众号,多数文章会围绕python写,有兴趣的朋友可以关注哟!

python

萌生思路

写了csdn博客已有半年之久了,虽然一直当做笔记记录自己的技术成长,但是发现有一个博客的访问量,这点还是挺吸引人的,于是打算做一个数据统计,看看究竟是哪些日子的数据量增长的较快。。
有了思路好说呀,接下来就是实现了。。

爬取自己博客访问量

环境

  • Python3.6
  • Windows10
  • 第三方库(下面)

用到的第三方库

  • requests : 访问博客用的专用,特别好用的库
  • BeautifulSoup : 解析返回的html节点用的库

此模块的思路

有了上面的两个库就好说了,先用requests去请求对应的博客网址,在用BeautifulSoup解析html节点,用bs里的方法进行匹配html节点,抓出想要的数据,最后记录每天的访问量和日期,输出到txt文档中。

而用浏览器自带的F12找对应的访问量的节点很好找。如下图:

python

代码实现

这里不多说,代码上有注释,很详细了

#coding = utf-8
import requests
from bs4 import BeautifulSoup as bs
import re
import time

# 访问我的博客
def spider(url, headers):
r = requests.get(url=url, headers=headers)
html = r.text
# 解析html代码
soup = bs(html, lxml)
ul = soup.find(name=ul, attrs=id: blog_rank)
# 获取ul下的第一个li节点,正则表达式需要字符串,所以转化一下
li = str(ul.find_next(li))
numbers = re.findall(rspan>(.+?)次</, li)
# print(numbers)
# 获取当前年月日
date = time.strftime("%Y-%m-%d", time.localtime())
# 拼接日期
numbers.append(date)
text_save(numbers, visitorNumber.txt)
print(成功执行!)

# 文件存储
def text_save(content, filename, mode=a):
# Try to save a list variable in txt file.
file = open(filename, mode)
for i in range(len(content)):
# 如果索引为最后一位,去掉空格且拼上换行符,否则剩下的后面拼接逗号
if i == len(content) - 1:
number = (content[i]) + \\n
else:
number = str(content[i]) + ,
file.write(number)
file.close()


if __name__ == __main__:

url =
headers =
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8,
Accept-Encoding: gzip, deflate, sdch,
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6,
Cache-Control: max-age=0,
Connection: keep-alive,
Host: blog.csdn.net,
Upgrade-Insecure-Requests: 1,
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36

spider(url, headers)

然后代码执行后如下图:

python

打开看看生成的格式:

python

这样此模块就算完成了代码上的,但是我觉得每天手动去执行好麻烦,于是想到了可以用windows自带的定时器(也就是任务计划)去执行脚本。

windows每天定时执行脚本

这里说的定时器就是Windows下的任务计划,当时遇到的坑正好总结一下,因为Windows10的定时器去执行脚本当时试了好多遍,都是没有成功,后来通过自己的观察发现是定时器调用路径的坑。。废话不多说了,直接上图了。

  1. Windows键+R 调出此窗口,输入compmgmt.msc (调用的是计算机管理)

python

2.点击下面的框,创建一个基本任务

python

3.开始配置任务

python

python

python

python

python

python

python

python

4.任务计划的问题

重点:至此配置完成了执行计划,但是!!!!!如果你发现你定时之后Windows并没有执行你的脚本,那么一定是你的批处理文件写的有问题,也就是.bat的问题。

刚开始LZ也是一脸懵逼, 为什么就执行不了呢!后来决定用在.bat中添加pause;试试,让cmd执行完停止在这里看看。如下图:

这里有个test.bat是用来任务计划测试用的Windows脚本,还有一个是helloworld的脚本。

python

test.bat如下图所示:

python3 helloWorld.py
#这行代码可以让Windows调用
#cmd的窗口暂停住,不会自动消失
pause;

python

当到时间自动执行后,发现:

python

Windows调用的时候,默认cmd路径是在system32下,所以。。。
我们需要将我们的批处理文件改动一下。

最终我执行抓取博客的.bat文件如下:

python

先cd到脚本的路径下,再去执行既可成功运行:

python

至此,第一个模块全部完成。


读取txt数据生成访问量与日期图

这里就坐等了两个月的数据,每天都会自己执行一下,然后继续上代码

代码实现

代码不详讲,有注释。

#coding=utf-8

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime
import decimal
#根据数据动态画图
def drawBydata():
#读取输出的txt文档
(recordDate,y) = readData(visitorNumber.txt)
#获取记录的日期列表范围(0,)
x = range(len(recordDate))
# plt.figure() 开始画图,r:红色
#http://www.360doc.com/content/15/0113/23/16740871_440559122.shtml
plt.plot(x,y,ro-)
#rotation,x轴字体旋转的角度
plt.xticks(x, recordDate,rotation=70)
plt.margins(0.08)
plt.subplots_adjust(bottom=0.15)
#设置x轴的名字
plt.xlabel("Date")
plt.ylabel("Visitors")
#图的标题
plt.title("My blog visit analysis")
plt.show()
print(执行成功!)

#读取数据
def readData(fileName):
#以只读文件打开
inFile = open(fileName,r)
#定义第一列数据为博客访问量
visitors = []
#第二列数据为日期
recordDate = []
#遍历文件每一行
for line in inFile:
#逗号分隔
trainingSet = line.split(,)
#将第一列和第二列数据拼入对应的列表中
visitors.append(trainingSet[0])
recordDate.append(trainingSet[1])
inFile.close()
return (recordDate,visitors)

if __name__ == __main__:
drawBydata()

执行后的效果图

如下图,有木有很清晰呢- -哈哈哈!

python




2017-11-29 更新

无语。。。。。。。。。。。今天看到csdn上的访问量居然消失了。。。很是尴尬,格局也变了,这篇就当是纪念原来的csdn皮肤用的吧。。。。。


以上是关于python 爬取博客访问量并且统计数据成图的主要内容,如果未能解决你的问题,请参考以下文章

使用python爬取csdn博客访问量

Python 批量刷博客园访问量脚本过程解析

使用python爬取csdn博客访问量

Python爬取韩寒所有新浪博客

python爬取疫情数据

Python 爬取 热词并进行分类数据分析-[安全性修复]