您的位置:首页 > 编程语言 > Python开发

应用python对校园通知的更新进行推送

2016-02-27 20:34 453 查看
最近想学python语言,并没有找到合适的练手,在知乎上搜到关于抓取学校通知推送到手机并且还做了app,我就先学会了使用python进行抓取数据。由于学校的网站十分好抓取,只采用了最简单的urllib2模块进行抓取数据,在使用正则表达式进行匹配,抓取有用的信息。本来想使用服务器进行信息的推送,不过没使用过,经过google搜索,使用Python中的smtplib模块进行,发送电子邮件也能变相的进行,信息的推送。

最后使用,Windows的创建任务进行推送。代码都是网上找了拼凑的。
# -*- coding:utf-8 -*-
#author:hanyou11
from bs4 import *
import sys,urllib2
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import re

f_bofore= open('C:\Users\\admin\\111.txt','r')
txt_before = f_bofore.read()
f_bofore.close()

urlname = 'http://pg.njupt.edu.cn/s/26/t/775/p/8/list.htm'
url = urllib2.urlopen(urlname)
context = url.read().decode('utf-8')
#print context
pattern = re.compile('<tr><td><a.*?\'(.*?)\'.*?><font.*?>(.*?)<.*?>(.*?)<.*?</td><td.*?>(.*?)</td></tr>',re.S)
items = re.findall(pattern,context)
ftp = open('C:\Users\\admin\\111.txt','w')
for item in items:
#print item[0],item[1],item[2],item[3]
#item[0]='http://pg.njupt.edu.cn/'+item[0]
#item[1]=item[1]+item[2]
ftp.write('http://pg.njupt.edu.cn'.encode('utf-8'))
ftp.write(item[0].encode('utf-8'))
ftp.write(' '.encode('utf-8'))
ftp.write(item[1].encode('utf-8'))
#ftp.write(' '.encode('utf-8'))
ftp.write(item[2].encode('utf-8'))
ftp.write(' '.encode('utf-8'))
ftp.write(item[3].encode('utf-8'))
ftp.write('\n'.encode('utf-8'))
ftp.close( )
f= open('C:\Users\\admin\\111.txt','r')
txt = f.read()
f.close()
#print txt.decode('utf-8')

from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib

def _format_addr(s):
name, addr = parseaddr(s)
return formataddr(( \
Header(name, 'utf-8').encode(), \
addr.encode('utf-8') if isinstance(addr, unicode) else addr))

def sendemail(body):
from_addr = '**@163.com'
password = '**'
to_addr = '***@qq.com'
smtp_server = 'smtp.163.com'

msg = MIMEText(body.decode('utf-8'), 'plain', 'utf-8')
msg['From'] = _format_addr(u'** <%s>' % from_addr)
msg['To'] = _format_addr(u'** <%s>' % to_addr)
msg['Subject'] = Header(u'通知更新', 'utf-8').encode()

server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()

if txt==txt_before:
pass
else:
sendemail(txt)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: