【小白教程】Python3監(jiān)控網(wǎng)頁

之前用RSS來監(jiān)控網(wǎng)頁更新內(nèi)容,可惜刷新時(shí)間太長了遗菠,三個(gè)小時(shí)联喘。。只能看看新聞啥的辙纬,又沒有小錢錢充會(huì)員(攤手

聽說Python可以做這個(gè)功能豁遭,抱著試試看的態(tài)度,本以為會(huì)很麻煩贺拣,沒想到這么簡單哈哈~我從來沒有用過Python都做出來了蓖谢,相信你也沒問題捂蕴!

(我真是純小白,路過的大佬請(qǐng)指教(⊙o⊙)ノ)

所用模塊

#監(jiān)控模塊
from urllib import request
from bs4 import BeautifulSoup
#正則表達(dá)
import re
import time

#發(fā)送郵件模塊

#郵箱服務(wù)器
import smtplib
#構(gòu)建郵件正文內(nèi)容
from email.mime.text import MIMEText
# email 用于構(gòu)建郵件內(nèi)容
from email.header import Header

1.原理

把網(wǎng)頁獲取到本地轉(zhuǎn)碼闪幽,然后篩選你需要的信息啥辨,重復(fù)這一過程。(看盯腌!是不是很簡單吶

2.獲取網(wǎng)頁信息

用到了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'}
    #發(fā)送訪問請(qǐng)求  此處header作用為模擬瀏覽器訪問  部分網(wǎng)頁反爬蟲會(huì)檢測(cè)訪問源信息
    _tmpRes=request.Request(url=url,headers=header)
    _req=request.urlopen(_tmpRes)
    #網(wǎng)頁utf-8解碼
    html=_req.read().decode('utf-8')
    return html

這里走了不少彎路,首先是一開始我是這么填的

request.Request(url)

也就是沒加headers腕够,導(dǎo)致總會(huì)報(bào)錯(cuò)级乍,不過我用百度試了一下卻沒問題。帚湘。玫荣。找了半天也不知道問題出在哪,后來才知道有的網(wǎng)頁會(huì)檢測(cè)你的訪問源信息大诸,只有訪問請(qǐng)求沒有設(shè)備信息有可能被拒絕...加上headers信息偽裝成瀏覽器訪問就好了捅厂。

害,我不會(huì)告訴你我最初Request就找了半天底挫。恒傻。脸侥。Python是嚴(yán)格區(qū)分大小寫的=ǖ恕!

3.分析網(wǎng)頁信息 開始匹配

這部分功能用到BeautifulSoup

#分析網(wǎng)頁信息并匹配關(guān)鍵字
def analyAndCompile(html,firstKey,secondKey):
    #提取Html數(shù)據(jù)
    html=BeautifulSoup(html,'html.parser')
    #二級(jí)匹配關(guān)鍵字
    pattern=re.compile(secondKey)
    #循環(huán)次數(shù)
    flag=0
    #當(dāng)前已匹配的信息   使其不必重復(fù)提醒
    currCom = ''
    #while 循環(huán)  10s一次  重復(fù)匹配信息
    while (1):
        flag += 1
        try:
         print('第' + str(flag) + '次 ' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
         #信息中包含'a'Tag和title內(nèi)容與一級(jí)匹配關(guān)鍵字相同的提取
         for link in html.find_all('a',title=re.compile(firstKey)):
            #獲取title內(nèi)容  
           link_title=link.get('title')
            #獲取網(wǎng)址
           info_link = link.get('href')
            #compilText判斷是否與二級(jí)關(guān)鍵字匹配    關(guān)鍵字匹配且之前沒出現(xiàn)過即為所需信息
           if compilText(pattern,link_title) and currCom is not link_title:
              currCom=link_title
              print('      ·出現(xiàn)新數(shù)據(jù):'+link_title+'\n      地址:'+info_link)
              #發(fā)送郵件
              SendMail.sendMail('出現(xiàn)新數(shù)據(jù):'+link_title+'\n地址:'+info_link)
           else:
               print('      ·無新數(shù)據(jù)'+link_title)
         time.sleep(10)
         #異常獲取
        except Exception as e:
            import traceback
            print(traceback.format_exc())
            print('異常')
            time.sleep(10)

這部分需要細(xì)心睁枕,先在網(wǎng)頁上找好所需信息的Tag官边,再用find_all方法篩選出來find_all方法可填多種參數(shù),具體參考這里:http://www.jsphp.net/python/show-24-214-1.html
需要花時(shí)間慢慢找外遇,這部分沒什么好方法注簿,耐心找吧~

4其他模塊代碼

上文中的匹配方法

#匹配關(guān)鍵字 若匹配到返回True 否則返回False
def compilText(pattern,compilStr):
    return pattern.search(compilStr) is not None

發(fā)送郵件模塊,這部分網(wǎng)上有很多跳仿,我的僅供參考吧

# 發(fā)信方的信息:發(fā)信郵箱诡渴,QQ 郵箱授權(quán)碼
from_addr = 'xx@qq.com'
password = '此處填入郵箱授權(quán)碼'

# 收信方郵箱
to_addr = 'xx@163.com'

# 發(fā)信服務(wù)器
smtp_server = 'smtp.qq.com'



def sendMail(sendMsg):
    # 郵箱正文內(nèi)容,第一個(gè)參數(shù)為內(nèi)容菲语,第二個(gè)參數(shù)為格式(plain 為純文本)妄辩,第三個(gè)參數(shù)為編碼
    msg = MIMEText(sendMsg, 'plain', 'utf-8')
    # 郵件頭信息
    msg['From'] = Header(from_addr)
    msg['To'] = Header(to_addr)
    msg['Subject'] = Header('郵件標(biāo)題')
    # 開啟發(fā)信服務(wù),這里使用的是加密傳輸
    #server = smtplib.SMTP_SSL()
    server=smtplib.SMTP_SSL(smtp_server)
    server.connect(smtp_server, 465)
    # 登錄發(fā)信郵箱
    server.login(from_addr, password)
    # 發(fā)送郵件
    server.sendmail(from_addr, to_addr, msg.as_string())
    # 關(guān)閉服務(wù)器
    server.quit()

大功告成

自己調(diào)用填上網(wǎng)址和篩選關(guān)鍵字就行啦
(同樣的功能別的語言能這么幾行就實(shí)現(xiàn)的嗎~ 哼哼~Python真香555

參考:
https://www.xiaoweigod.com/code/1609.html
https://blog.csdn.net/DahlinSky/article/details/104454971
https://www.cnblogs.com/hixiaowei/p/9721513.html
http://www.jsphp.net/python/show-24-214-1.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末山上,一起剝皮案震驚了整個(gè)濱河市眼耀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌佩憾,老刑警劉巖哮伟,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件干花,死亡現(xiàn)場離奇詭異,居然都是意外死亡楞黄,警方通過查閱死者的電腦和手機(jī)池凄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鬼廓,“玉大人修赞,你說我怎么就攤上這事∩=祝” “怎么了柏副?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蚣录。 經(jīng)常有香客問我割择,道長,這世上最難降的妖魔是什么萎河? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任荔泳,我火速辦了婚禮,結(jié)果婚禮上虐杯,老公的妹妹穿的比我還像新娘玛歌。我一直安慰自己,他們只是感情好擎椰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布支子。 她就那樣靜靜地躺著,像睡著了一般达舒。 火紅的嫁衣襯著肌膚如雪值朋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天巩搏,我揣著相機(jī)與錄音昨登,去河邊找鬼。 笑死贯底,一個(gè)胖子當(dāng)著我的面吹牛丰辣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播禽捆,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼笙什,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了睦擂?” 一聲冷哼從身側(cè)響起得湘,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎顿仇,沒想到半個(gè)月后淘正,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摆马,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年鸿吆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了囤采。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡惩淳,死狀恐怖蕉毯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情思犁,我是刑警寧澤代虾,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站激蹲,受9級(jí)特大地震影響棉磨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜学辱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一乘瓤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧策泣,春花似錦衙傀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至任洞,卻和暖如春蓄喇,著一層夾襖步出監(jiān)牢的瞬間发侵,已是汗流浹背交掏。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刃鳄,地道東北人盅弛。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像叔锐,于是被迫代替她去往敵國和親挪鹏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容