在日常生活當(dāng)中你是否有過(guò)這樣的煩惱狂票,需要在網(wǎng)上獲取信息,但是不知道信息何時(shí)會(huì)更新熙暴?
公務(wù)員等各類考試公告闺属、考試成績(jī)的公布
行業(yè)最新資訊的發(fā)布,如財(cái)經(jīng)資訊周霉、互聯(lián)網(wǎng)公司新聞
追的電視劇掂器、漫畫最新更新內(nèi)容
……
有些網(wǎng)站做的比較人性化,有更新消息會(huì)通過(guò)微信俱箱、短信国瓮、郵件或者電話等方式通知我們,但是大部分還沒(méi)有,尤其是通知給你想要的信息。
日常生活中我們都會(huì)和熟人朋友講「有消息了及時(shí)通知我」聋涨,那在互聯(lián)網(wǎng)上是不是可以有這樣的工具可以定制一個(gè)類似的跟蹤器呢嫁艇?
今天就來(lái)給大家這樣的做這樣一個(gè)網(wǎng)頁(yè)跟蹤器功能
的分享,使用到的依舊是強(qiáng)大的python。
需求具體化
首先把我們需要實(shí)現(xiàn)的功能具體化,比方以我的網(wǎng)站「永恒君的百寶箱」為例。
需求就是:跟蹤網(wǎng)站文章掰读,一旦有文章更新,就通過(guò)qq郵件來(lái)通知我
(說(shuō)明一下:用qq郵件有個(gè)好處就是叭莫,一旦有新的郵件磷支,微信里面會(huì)及時(shí)通知。當(dāng)然也可以用另外一個(gè)微信號(hào)通知食寡,有機(jī)會(huì)再寫一個(gè)微信通知的雾狈。)
解決思路
簡(jiǎn)單的描述一下解決思路:
1、獲取網(wǎng)站頁(yè)面的源代碼抵皱,提取第一篇文章的標(biāo)題善榛,存儲(chǔ)到電腦中辩蛋;
2、通過(guò)程序設(shè)定每個(gè)固定的時(shí)間(比如1個(gè)小時(shí))移盆,提取網(wǎng)站第一篇文章標(biāo)題悼院,如果和之前存儲(chǔ)的標(biāo)題不一致,則說(shuō)明有更新咒循。
3据途、向qq郵箱發(fā)送郵件,告知網(wǎng)站有更新可以去查看叙甸。同時(shí)將最新的文章保存到電腦颖医,以便下一次比對(duì)。
設(shè)計(jì)網(wǎng)頁(yè)跟蹤程序
有了上面的思路就好辦了裆蒸,永恒君花了大概3個(gè)小時(shí)的時(shí)間調(diào)試好了下面的代碼熔萧,分了主程序和發(fā)郵件程序兩塊。
主程序
import?requests
from?lxml?import?etree
import?time
import?os
from?sendemail?import?email
while?True:
????url?=?"http://www.yhjbox.com/"???#目標(biāo)跟蹤網(wǎng)頁(yè)
????content?=?requests.get(url).content?
????html?=?etree.HTML(content)
????title?=?html.xpath("/html/body/section/div[2]/div/article[1]/header/h2/a/@title")[0]
????#獲取第一篇文章標(biāo)題????
????print("當(dāng)前的標(biāo)題為:%s"%title)
????#屏幕打印獲取的第一篇文章標(biāo)題
????if?not?os.path.isfile("E:\\title_temp.txt"):
????#判斷title_temp.txt文件是否存在僚祷,不存在則創(chuàng)建佛致,并寫入獲取的第一篇文章標(biāo)題
????????f?=?open("E:\\title_temp.txt",?"w")
????????f.write(title)
????????print("將當(dāng)前標(biāo)題記錄在E:\title_temp.txt中,等待檢測(cè)")??
????????f.close()
????else:
????#title_temp.txt文件存在的話辙谜,提取里面標(biāo)題俺榆,和獲取的標(biāo)題對(duì)比
????????with?open("E:\\title_temp.txt",?"r+")?as?f:
????????????old_title?=?f.read()
????????????if?old_title?!=title:
????????????#如果讀取內(nèi)容和獲取的網(wǎng)站第一篇文章標(biāo)題不一致,則表明網(wǎng)站更新
????????????????email()#發(fā)送qq郵件
????????????????f.seek(0)
????????????????f.truncate()?????????????????????????????
????????????????print("網(wǎng)站有更新装哆,需通知")
????????????????f.write(title)
????????????????#寫入最新的標(biāo)題內(nèi)容肋演,方便下一次比對(duì)
????????????????break
????????????????#退出循環(huán)????????????????
????????????else:
????????????#否則的話,表明網(wǎng)站沒(méi)有更新????????????????
????????????????print("網(wǎng)站暫時(shí)沒(méi)有更新\n")
????time.sleep(5)
????#檢測(cè)網(wǎng)頁(yè)內(nèi)容時(shí)間間隔烂琴,單位為秒(s)
發(fā)郵件程序
import?smtplib
from?email.mime.text?import?MIMEText
from?email.header?import?Header
def?email():
????sender?=?'XXXX@163.com'#填寫發(fā)件人
????pwd?=?'XXXX'#登錄密碼
????receivers?=?['XXXX@qq.com']#填寫收件人?????
????message?=?MIMEText("你好,網(wǎng)站有內(nèi)容更新蜕乡,請(qǐng)及時(shí)查看","plain",'utf-8')
????#?三個(gè)參數(shù):第一個(gè)為文本內(nèi)容奸绷,第二個(gè)為plain設(shè)置文本格式,第三個(gè)為utf-8設(shè)置編碼
????message?['From']?=?"XXX?<XXX@163.com>"
????message?['To']?=?"XXX?<XXX@qq.com>"
????subject?=?"網(wǎng)站有內(nèi)容更新"
????#郵件主題
????message["Subject"]?=?subject
????try:
????????#?使用非本地服務(wù)器层玲,需要建立ssl連接
????????smtpObj?=?smtplib.SMTP_SSL("smtp.163.com",465)
????????#發(fā)件箱郵件服務(wù)器
????????smtpObj.login(sender,pwd)
????????smtpObj.sendmail(sender,receivers,message.as_string())
????????print("郵件發(fā)送成功")
????except?smtplib.SMTPException?as?e:
????????print("Error:無(wú)法發(fā)送郵件.Case:%s"%e)
使用方法:
兩個(gè)程序保存在同一個(gè)文件夾号醉,其中發(fā)郵件程序必須保存為「sendemail.py」,主程序隨意辛块。然后運(yùn)行主程序即可畔派。
運(yùn)行結(jié)果
程序使用演示:
永恒君把上面的代碼打包了一下,需要的伙伴后臺(tái)wx公號(hào)回復(fù)「網(wǎng)頁(yè)跟蹤」即可润绵。
程序可定制的地方
這個(gè)程序目前還沒(méi)法做成通用的版本线椰,因?yàn)楦鶕?jù)不同網(wǎng)站、不同郵箱要做更改的地方有:
1尘盼、url憨愉,即需要跟蹤的網(wǎng)頁(yè)地址
2烦绳、title,即獲取第一篇文章標(biāo)題的xpath地址
3配紫、time.sleep()径密,即間隔多長(zhǎng)時(shí)間提取一次網(wǎng)站信息
4、收發(fā)件郵箱地址
把上面這些改成你自己需要的內(nèi)容即可定制私人的網(wǎng)頁(yè)跟蹤器躺孝。關(guān)于代碼的具體的修改內(nèi)容享扔,打算有空的話再開一篇文章具體說(shuō)說(shuō)。
1植袍、分享|教你制作一個(gè)微信機(jī)器人陪你聊天惧眠,只要幾行代碼
2、帶你看看不一樣的微信奋单!
3锉试、分享 | 微信一鍵統(tǒng)計(jì)、自動(dòng)通過(guò)申請(qǐng)览濒、自動(dòng)回復(fù)(操作演示)
4呆盖、你還在為無(wú)法下載網(wǎng)站視頻煩惱?試試You-Get贷笛,統(tǒng)統(tǒng)幫你搞定
5应又、有了這四款裝備,告別繁瑣和重復(fù)的工作乏苦!