python监控网页_【小白教程】Python3监控网页
之前用RSS來監控網頁更新內容,可惜刷新時間太長了,三個小時。。只能看看新聞啥的,又沒有小錢錢充會員(攤手
聽說Python可以做這個功能,抱著試試看的態度,本以為會很麻煩,沒想到這么簡單哈哈~我從來沒有用過Python都做出來了,相信你也沒問題!
(我真是純小白,路過的大佬請指教(⊙o⊙)ノ)
所用模塊
#監控模塊
from urllib import request
from bs4 import BeautifulSoup
#正則表達
import re
import time
#發送郵件模塊
#郵箱服務器
import smtplib
#構建郵件正文內容
from email.mime.text import MIMEText
# email 用于構建郵件內容
from email.header import Header
1.原理
把網頁獲取到本地轉碼,然后篩選你需要的信息,重復這一過程。(看!是不是很簡單吶
2.獲取網頁信息
用到了python的urllib模塊,先上代碼
#解析url地址 返回utf-8解碼信息
def analyUrl(url):
header={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
#發送訪問請求 此處header作用為模擬瀏覽器訪問 部分網頁反爬蟲會檢測訪問源信息
_tmpRes=request.Request(url=url,headers=header)
_req=request.urlopen(_tmpRes)
#網頁utf-8解碼
html=_req.read().decode('utf-8')
return html
這里走了不少彎路,首先是一開始我是這么填的
request.Request(url)
也就是沒加headers,導致總會報錯,不過我用百度試了一下卻沒問題。。。找了半天也不知道問題出在哪,后來才知道有的網頁會檢測你的訪問源信息,只有訪問請求沒有設備信息有可能被拒絕...加上headers信息偽裝成瀏覽器訪問就好了。
害,我不會告訴你我最初Request就找了半天。。。Python是嚴格區分大小寫的!!
3.分析網頁信息 開始匹配
這部分功能用到BeautifulSoup
#分析網頁信息并匹配關鍵字
def analyAndCompile(html,firstKey,secondKey):
#提取Html數據
html=BeautifulSoup(html,'html.parser')
#二級匹配關鍵字
pattern=re.compile(secondKey)
#循環次數
flag=0
#當前已匹配的信息 使其不必重復提醒
currCom = ''
#while 循環 10s一次 重復匹配信息
while (1):
flag += 1
try:
print('第' + str(flag) + '次 ' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
#信息中包含'a'Tag和title內容與一級匹配關鍵字相同的提取
for link in html.find_all('a',title=re.compile(firstKey)):
#獲取title內容
link_title=link.get('title')
#獲取網址
info_link = link.get('href')
#compilText判斷是否與二級關鍵字匹配 關鍵字匹配且之前沒出現過即為所需信息
if compilText(pattern,link_title) and currCom is not link_title:
currCom=link_title
print(' ·出現新數據:'+link_title+'\n 地址:'+info_link)
#發送郵件
SendMail.sendMail('出現新數據:'+link_title+'\n地址:'+info_link)
else:
print(' ·無新數據'+link_title)
time.sleep(10)
#異常獲取
except Exception as e:
import traceback
print(traceback.format_exc())
print('異常')
time.sleep(10)
這部分需要細心,先在網頁上找好所需信息的Tag,再用find_all方法篩選出來find_all方法可填多種參數,具體參考這里:http://www.jsphp.net/python/show-24-214-1.html
需要花時間慢慢找,這部分沒什么好方法,耐心找吧~
4其他模塊代碼
上文中的匹配方法
#匹配關鍵字 若匹配到返回True 否則返回False
def compilText(pattern,compilStr):
return pattern.search(compilStr) is not None
發送郵件模塊,這部分網上有很多,我的僅供參考吧
# 發信方的信息:發信郵箱,QQ 郵箱授權碼
from_addr = 'xx@qq.com'
password = '此處填入郵箱授權碼'
# 收信方郵箱
to_addr = 'xx@163.com'
# 發信服務器
smtp_server = 'smtp.qq.com'
def sendMail(sendMsg):
# 郵箱正文內容,第一個參數為內容,第二個參數為格式(plain 為純文本),第三個參數為編碼
msg = MIMEText(sendMsg, 'plain', 'utf-8')
# 郵件頭信息
msg['From'] = Header(from_addr)
msg['To'] = Header(to_addr)
msg['Subject'] = Header('郵件標題')
# 開啟發信服務,這里使用的是加密傳輸
#server = smtplib.SMTP_SSL()
server=smtplib.SMTP_SSL(smtp_server)
server.connect(smtp_server, 465)
# 登錄發信郵箱
server.login(from_addr, password)
# 發送郵件
server.sendmail(from_addr, to_addr, msg.as_string())
# 關閉服務器
server.quit()
大功告成
自己調用填上網址和篩選關鍵字就行啦
(同樣的功能別的語言能這么幾行就實現的嗎~ 哼哼~Python真香555
總結
以上是生活随笔為你收集整理的python监控网页_【小白教程】Python3监控网页的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vijos 1082
- 下一篇: PHP函数array_intersect