网站访问情况的简单监控

我呢,想做这样一个事情:

通过爬取blog封面最下方的记数,将每天访问网站的信息抓取出来。然后调用WechatWork的webhook,将每天的访问数发给自己。
这样就能粗略了解,网站的访问情况。

1. 获取网站的访问记数:

开始的脚本想用python的requests库抓,但是发现个问题。
那就是封面加载的时候,页面记数不会立刻返回到界面中。我开始以为是我的xpath写法有问题,试了好久才发现其实是获取的text里第一时间不存在记数(应该是在调用busuanzi的服务,所以数据不是立刻返回。)
这样就导致使用requests.get()方法,无法抓到数据。每次抓的记数都不存在。


查了下资料,好像requests库没办法实现等待页面几秒再返回数据的情况。
所以我改成使用selenium库进行页面内容的抓取。

定义获取计数的函数get_counts():

1
2
3
4
5
6
7
8
9
10
def get_counts():    # 使用selenuim,加载动态界面,抓取计数;
browser = webdriver.Chrome()
browser.get("https://****.com")

count_site_pv = browser.find_element(By.ID, "busuanzi_value_site_pv").text
count_site_uv = browser.find_element(By.ID, "busuanzi_value_site_uv").text
count_page_pv = browser.find_element(By.ID, "busuanzi_value_page_pv").text

browser.close()
return count_site_pv, count_site_uv, count_page_pv

2. 在WechatWork里创建一个webhook:

Webhook在企业微信里只能在群机器人下使用。
所以我先拉了两个同事,创建个聊天群,然后再把他们移走。这样就创建了一个只有我自己的群。

3. 向webhook发送消息,推送至企业微信:

这个就按照群机器人配置说明中的说明,进行消息推送即可。
我使用的是urllib3库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def ewc_webhook(a, b, c):    # 调用ewc的webhook,发送消息;
a, b, c = a, b, c
hook_addr = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=*************'
http = urllib3.PoolManager()
time = datetime.datetime.now()
today = time.strftime('%Y-%m-%d')

data = {
"msgtype": "markdown",
"markdown": {
"content": "<font color=\"info\">%s</font>\n\
>Blog总访问量:<font color=\"comment\">%s</font>\n\
>Blog访客数量:<font color=\"comment\">%s</font>\n\
>封面访问数:<font color=\"comment\">%s</font>"
%(today, a, b, c)
}
}
data = json.dumps(data).encode()
response = http.request('POST', hook_addr, body=data)

4. 在本地电脑上设置定时job,每天执行程序。

最终效果: