前言:
需要定期監控網頁數據是否異常(但是網頁數據是動態的,不能直接採用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程序