在日常生活当中你是否有过这样的烦恼,需要在网上获取信息,但是不知道信息何时会更新?
公务员等各类考试公告、考试成绩的公布
行业最新资讯的发布,如财经资讯、互联网公司新闻
追的电视剧、漫画最新更新内容
……
有些网站做的比较人性化,有更新消息会通过微信、短信、邮件或者电话等方式通知我们,但是大部分还没有,尤其是通知给你想要的信息。
日常生活中我们都会和熟人朋友讲「有消息了及时通知我」,那在互联网上是不是可以有这样的工具可以定制一个类似的跟踪器呢?
今天就来给大家这样的做这样一个网页跟踪器功能
的分享,使用到的依旧是强大的python。
需求具体化
首先把我们需要实现的功能具体化,比方以我的网站「永恒君的百宝箱」为例。
需求就是:跟踪网站文章,一旦有文章更新,就通过qq邮件来通知我
(说明一下:用qq邮件有个好处就是,一旦有新的邮件,微信里面会及时通知。当然也可以用另外一个微信号通知,有机会再写一个微信通知的。)
解决思路
简单的描述一下解决思路:
1、获取网站页面的源代码,提取第一篇文章的标题,存储到电脑中;
2、通过程序设定每个固定的时间(比如1个小时),提取网站第一篇文章标题,如果和之前存储的标题不一致,则说明有更新。
3、向qq邮箱发送邮件,告知网站有更新可以去查看。同时将最新的文章保存到电脑,以便下一次比对。
设计网页跟踪程序
有了上面的思路就好办了,永恒君花了大概3个小时的时间调试好了下面的代码,分了主程序和发邮件程序两块。
主程序
import requests
from lxml import etree
import time
import os
from sendemail import email
while True:
url = "http://www.yhjbox.com/" #目标跟踪网页
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]
#获取第一篇文章标题
print("当前的标题为:%s"%title)
#屏幕打印获取的第一篇文章标题
if not os.path.isfile("E:\\title_temp.txt"):
#判断title_temp.txt文件是否存在,不存在则创建,并写入获取的第一篇文章标题
f = open("E:\\title_temp.txt", "w")
f.write(title)
print("将当前标题记录在E:\title_temp.txt中,等待检测")
f.close()
else:
#title_temp.txt文件存在的话,提取里面标题,和获取的标题对比
with open("E:\\title_temp.txt", "r+") as f:
old_title = f.read()
if old_title !=title:
#如果读取内容和获取的网站第一篇文章标题不一致,则表明网站更新
email()#发送qq邮件
f.seek(0)
f.truncate()
print("网站有更新,需通知")
f.write(title)
#写入最新的标题内容,方便下一次比对
break
#退出循环
else:
#否则的话,表明网站没有更新
print("网站暂时没有更新\n")
time.sleep(5)
#检测网页内容时间间隔,单位为秒(s)
发邮件程序
import smtplib
from email.mime.text import MIMEText
from email.header import Header
def email():
sender = 'XXXX@163.com'#填写发件人
pwd = 'XXXX'#登录密码
receivers = ['XXXX@qq.com']#填写收件人
message = MIMEText("你好,网站有内容更新,请及时查看","plain",'utf-8')
# 三个参数:第一个为文本内容,第二个为plain设置文本格式,第三个为utf-8设置编码
message ['From'] = "XXX <XXX@163.com>"
message ['To'] = "XXX <XXX@qq.com>"
subject = "网站有内容更新"
#邮件主题
message["Subject"] = subject
try:
# 使用非本地服务器,需要建立ssl连接
smtpObj = smtplib.SMTP_SSL("smtp.163.com",465)
#发件箱邮件服务器
smtpObj.login(sender,pwd)
smtpObj.sendmail(sender,receivers,message.as_string())
print("邮件发送成功")
except smtplib.SMTPException as e:
print("Error:无法发送邮件.Case:%s"%e)
使用方法:
两个程序保存在同一个文件夹,其中发邮件程序必须保存为「sendemail.py」,主程序随意。然后运行主程序即可。
运行结果
程序使用演示:
永恒君把上面的代码打包了一下,需要的伙伴后台wx公号回复「网页跟踪」即可。
程序可定制的地方
这个程序目前还没法做成通用的版本,因为根据不同网站、不同邮箱要做更改的地方有:
1、url,即需要跟踪的网页地址
2、title,即获取第一篇文章标题的xpath地址
3、time.sleep(),即间隔多长时间提取一次网站信息
4、收发件邮箱地址
把上面这些改成你自己需要的内容即可定制私人的网页跟踪器。关于代码的具体的修改内容,打算有空的话再开一篇文章具体说说。
1、分享|教你制作一个微信机器人陪你聊天,只要几行代码
2、带你看看不一样的微信!
3、分享 | 微信一键统计、自动通过申请、自动回复(操作演示)
4、你还在为无法下载网站视频烦恼?试试You-Get,统统帮你搞定
5、有了这四款装备,告别繁琐和重复的工作!