脚本在此
公司的商城需要添加一个脚本,这个脚本就是观察首页页面是否正常,虽然已经配置了zabbix监控网站是否200,但是有一些特殊的情况,比如网页可以打开但是页面是“file not found”,类似这样就需要被运维第一时间监控到然后通知开发。
原本我打算直接爬取整个首页然后与服务器里的index.html
对比一下,如果不符合就报警,但是跟前端同事说了这个思路之后,前端说服务器上是没有index.html
的,因为这个index.html
是结合其他的php拼接的。前端说“只要能检测title正常就OK,一般来说title能获取到就证明系统是OK的,如果titleOK但是html内容获取不到就是前段代码的问题,跟系统无关”。于是我就写了这么一个爬虫脚本来获取网站title,如下:
1 |
|
说一下,如果在from bs4 import BeautifulSoup
爆出ImportError: No module named 'bs4'
是因为安装的库装错了,应该是pip install beautifulsoup4
而不是pip install beautifulsoup
。启动脚本效果如下:
编码问题
上面那个脚本里的soup.title.string
的类型是bs4.element.NavigableString
,如果不用print那么它的形式是unicode
的,如图:
这种现象并不新鲜,比如list
在python2里一直都不是正常输出中文的,如图:
可见只有 大专栏 获取网站title的脚本for in
的时候才会正常编码,那么这样的情况怎么办?
最简单的方法,改用python3。不过上面那个脚本是可以直接把中文放到soup.title.string
进行判断的。
安装python 3.6.4
首先要先安装相关依赖包yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
,其中readline-devel
这个很重要,他是管方向键的,如果python运行的时候方向键不好使,那么就要yum install readline-devel
安装,安装完毕后重新configure
和make
。
然后过程如下:
1 | yum -y install epel-release #运行这个命令添加epel扩展源 |
更改yum配置,因为其要用到python2才能执行,否则会导致yum不能正常使用,需要分别修改/usr/bin/yum
和/usr/libexec/urlgrabber-ext-down
这两个文件,把他们的#! /usr/bin/python
修改为#! /usr/bin/python2
。
然后还要给python3的pip3做一个软连接: ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
。
注意!如果你用了python3那么上面那个脚本就会有很大的变动。
参考资料
https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/tutorial.html