[学习笔记]利用PHP探针和Python爬虫监控服务器状态

2022-5-16 18:45| 发布者: Hocassian| 查看: 62| 评论: 0|原作者: 某团的自留研究所

摘要:
C:\Users\Administrator\Downloads\2019-10-14-11-5-48-11828952542100-Steins;Lab - 某团的自留研究所-采集的数据-后羿采集器.html

标题

[学习笔记]利用PHP探针和Python爬虫监控服务器状态

链接

https://steinslab.io/archives/1144

发布时间

2017-02-18

导语

用Python爬虫抓取雅黑PHP探针返回的数据,以监控服务器,实时获取远端服务器的负载、CPU、内存、网卡流量、实时网速等信息。关键词:PHP探针、Python、爬虫、服务器监控。

分类

学习笔记

阅读量

4,140 Views

正文

[学习笔记]利用PHP探针和Python爬虫监控服务器状态

用Python爬虫抓取雅黑PHP探针返回的数据,以监控服务器,实时获取远端服务器的负载、CPU、内存、网卡流量、实时网速等信息。关键词:PHP探针、Python、爬虫、服务器监控。

 

 

0.实验环境


本实验在我的RaspberryPi 3b 上完成, Python3 。

我这个思路也算是骨骼清奇了,套了一圈用探针抓服务器信息。

不过对于一个本身运行着PHP的建站服务器,多挂一个探针并没有什么损耗。

某天我在床上躺尸的时候突然想到,大家天天剁手买VPS以针会友。如果我直接用树莓派抓取探针返回的服务器状态,显示在1602上,从此开始日日夜夜躺在沙发上看着数据跳动,岂不美哉?本文就是抓回数据的笔记。

 

1.雅黑PHP探针


1.1 关于PHP探针


关于PHP探针,给不知道的读者说道说道。

雅黑实验室  –  http://www.yahei.net/

【雅黑PHP探针】
雅黑PHP探针最大的优点:每秒更新,不用刷网页。有一个负责的站长,会对探针进行长期支持和更新。
用于Linux系统(不推荐使用于Windows系统)。
可以实时查看服务器硬盘资源、内存占用、网卡流量、系统负载、服务器时间等信息,1秒钟刷新一次。
以及包括服务器IP地址,Web服务器环境监测,php等信息。

php探针对于经常购买VPS折腾的人肯定不陌生,简单地老说就是一个可以获取系统信息并在网页上显示的php程序。雅黑PHP探针的界面如下:

我一个Digitalocean服务器上挂的演示探针:  http://sfo01.misaka.cc:888/tz.php

因此,经常有人买各种廉价小内存的VPS,只能挂个探针,却因此获得巨大快感,并从bbs上交流。叫做以针会友。

1.2 分析


打开探针网页可以看到循环刷新的服务器信息。思路很简单,用简单的Python爬虫去爬这个网页。

首先打开探针网页分析一下。

演示:

http://sfo01.misaka.cc:888/tz.php

可以看到服务器实时数据表格,是动态刷新的。因此,直接爬取该网页的html并不能持续获取服务器信息。既然有动态刷新,想必服务器和客户端之间必有数据包传输。在Chrome中,按F12开始审查网页,进入Networking标签栏。

可以立刻找到动态刷新请求的url。该url是

直接访问该url,返回的是以下数据。

可以确认,返回的即为包含服务器实时信息的数据。

有没有感觉,在其后的数据有着一种很规范的标记方法?是的,在中括号之间,是一种json数据集。

JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。

可以将其理解成一组各类语言都可以接受的,有自己的标准的,用于互相交换信息的数据。

url中的参数 act=rt ,在雅黑PHP探针源码中ctrl+F一下其源代码。

 

立刻找到,在tz.php中第964行:

即使不懂PHP,也可以看出它的规则。在我们的url中,callback参数为“jQuery1705809678890101435_1487402170358&_=1487402269387”。尝试直接请求 http://sfo01.misaka.cc:888/tz.php?act=rt

得到如下结果:

爬虫的思路也清晰了。

 

2.Python的简单爬虫


Python爬虫的简易教程我参考了:

Python爬虫教程 – 崔庆才的个人博客

文章简洁精悍。没多少字,简单带过后,了解了爬虫运用的一些思想。

 

 

想获得服务器信息的json数据,比较容易。现在shell中验证一下

这里试着直接用我示例站的ip地址,避免等待dns解析。用utf-8格式解码后,得到如下结果:

打印出来的字符串并不是标准的json数据,字符串左右多了小括号。使用Python方便的字符串处理功能,将其去掉。但此时data并不是str属性,直接尝试去掉小括号会报错。

此时data的类型为“bytes”。用str()转换:

此时data2可直接通过json读取为字典

完成。接下来只需要按照面向对象的思想、增加代码的健壮性将其封装起来即可。

 

3.封装

运行一下:

 

关于其错误处理的思想只是稍微领略了一下,不精,错误处理先试着这样写。

 

4.应用


有了数据在手,想怎么处理还不易如反掌?

尤其像是RaspberryPi这种东西,会有无尽的可能。我即将尝试制作新的东西

 


路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部