前言:
需要定期监控网页数据是否异常(但是网页数据是动态的,不能直接采用urllib模块来获取网页信息),想法是将数据抓取分析后,通过定时发送QQ消息来提醒数据情况。较为粗糙,不足之处,还请不吝赐教!
1.环境
- win10(64位)
- Anaconda(1.9.2)
- Python3.7
2.安装包
- pywin32(安装方法参考:Python3 pywin32模块安装)
- re
- selenium(一些文章说可直接pip install ,但不清楚什么原因,我的不可以,所以直接在Anaconda上安装)
- time
- sys
from selenium import webdriver
from bs4 import BeautifulSoup
import re
import win32gui
import win32con
import win32clipboard as w
import time
import sys
3.抓取网页,并处理
网页解析(参考:在python使用selenium获取动态网页信息并用BeautifulSoup进行解析--动态网页爬虫)
#网页解析
browser = webdriver.Chrome()
browser.get("***")#此处填写对应网址
time.sleep(1)#个人因为browser.get()获取网页时打开需要时间,否则会出现无法获取数据的情况
bs = BeautifulSoup(browser.page_source, "html.parser")
str_bs = str(bs)#将网页解析数据转成str
#数据处理,根据实际情况进行处理
content_pat = '***'#此处是正则表达式
content = re.compile(content_pat, re.S).findall(str_bs)
print(content)
n = 4
content_list = [content[i:i+n] for i in range(0, len(content), n)]#根据获取的数据进行切分,这里应当根据实际情况进行处理
cont = []
for i in content_list:
if(i[2] == '***'):
cont.append(i[1]+'数据报错')
elif(i[3] == '***'):
cont.append(i[1]+'数据报错')
else:
cont.append('一切正常')
4.发送QQ消息
来源于:使用python发送qq消息
注:发送qq消息要求已经登陆qq,而且qq的窗口是独立的,现在新版的qq一般都是将所有的聊天窗口聚合在一起,因此要设置将qq窗口分离,或者将需要发送消息的那个窗口单独分离出来。
def getText():
"""获取剪贴板文本"""
w.OpenClipboard()
d = w.GetClipboardData(win32con.CF_UNICODETEXT)
w.CloseClipboard()
return d
def setText(aString):
"""设置剪贴板文本"""
w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardData(win32con.CF_UNICODETEXT, aString)
w.CloseClipboard()
def send_qq(to_who, msg):
"""发送qq消息
to_who:qq消息接收人
msg:需要发送的消息
"""
# 将消息写到剪贴板
setText(msg)
# 获取qq窗口句柄
qq = win32gui.FindWindow(None, to_who)
# 投递剪贴板消息到QQ窗体
win32gui.SendMessage(qq, 258, 22, 2080193)
win32gui.SendMessage(qq, 770, 0, 0)
# 模拟按下回车键
win32gui.SendMessage(qq, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
win32gui.SendMessage(qq, win32con.WM_KEYUP, win32con.VK_RETURN, 0)
# 测试
to_who='***'#此处发送给谁就填写谁的id
msg= str(cont)
send_qq(to_who, msg)
#关闭
sys.exit(0)
5.终端调用python脚本
由于我使用的Anaconda,因此在调用时出现问题,这里参考了一篇Windows如何用Anaconda运行python脚本?
写了一个bat文件:
CALL C:\Users\***\Anaconda3\Scripts\activate.bat C:\Users\***\Anaconda3
cd C:\Users\**
python webmonitor.py
@exit
这样就把cmd调用webmonitor.py文件,改变成直接调用该.bat文件即可。
6.设置定时执行
如果不会的可以参考:Windows定时运行python程序