这是三个月之前用写的脚本,现在补的Markdown。当时对象(这个是真的对象)参加完某高校的研究生复试,一直焦急的等待着成绩,成绩出来的结果是范围时间的,所以就写了这个脚本,在后台一直搜索 keywords ,如果搜索到了,就弹出窗口提示。
- 操作环境:Win10 & Pycharm
- Python Version:Python 3.6.3::Anaconda,Inc.
首先是获取整个网页的信息
函数 中是正常的获取整个网页信息的操作。如果有疑问可以释放每一步 函数,这里对charset 进行详细阐述。
字符串编码一直是令人非常头疼的问题,尤其是在处理一些不规范的第三方网页的时候。虽然Python提供了Unicode表示的和两种数据类型,并且可以通过和方法转换,但是,在不知道编码的情况下,对做不好做。
对于未知编码的,要把它转换成,需要先“猜测”编码。猜测的方式是先收集各种编码的特征字符,根据特征字符判断,就能有很大概率“猜对”。
当然,肯定不能从头自己写这个检测编码的功能,这样做费时费力。chardet这个第三方库正好就派上了用场。用它来检测编码,简单易用。
安装chardet
如果安装了Anaconda,chardet就已经可用了。否则,需要在命令行下通过pip安装:
如果遇到Permission denied安装失败,请加上sudo重试。如果用 安装就很方便。
使用chardet
当拿到一个时,就可以对其检测编码。用chardet检测编码,只需要一行代码:
检测出的编码是,注意到还有个字段,表示检测的概率是1.0(即100%)。
来试试检测GBK编码的中文:
检测的编码是,注意到GBK是GB2312的超集,两者是同一种编码,检测正确的概率是74%,字段指出的语言是。
对UTF-8编码进行检测:
再试试对日文进行检测:
可见,用chardet检测编码,使用简单。获取到编码后,再转换为,就可以方便后续处理。
chardet支持检测的编码列表请参考官方文档Supported encodings。
刚才我们已经获取整个网页的 了,那么怎么获取有用的信息呢,一想到字符串的匹配问题,正则表达式 当仁不让了。因为这次匹配的内容针对性,比较强,所以我们就用 进行匹配,代码如下:
正则表达式,博大精深,就不在这里叙述了,有机会的话会补充,这里简单介绍:
其实,我们主体内容已经完成了,我们可以通过上面的方式,找到匹配的 ,但是,如果找不到,还是得然程序一直找的,当找到的时候,最好还能很直接的告诉我,找到了!这就需要添加一些功能。我们添加另外一个线程,用来计数时间,每过多少秒进行一次查询搜索。当搜索到的时候,弹窗提示。
对于多线程及GUI界面的操作,并没有过多解释,因为当时对这方面还没有太多的了解,因为急着用,也就只按照功能要求写了,当然,可以调整访问网页的时间间隔。如果有结果的话,会有如下提示:
顾不上美观了,结果达到就行了。