应用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)
最后使用,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)
相关文章推荐
- 王亟亟的Python学习之路(10)-函数对象的作用域,函数作为返回值,闭包
- 王亟亟的Python学习之路(10)-函数对象的作用域,函数作为返回值,闭包
- Python教程
- Python的zip函数
- 两个版本的python在同一系统下的安装
- 使用Python的SnowNLP模块实现情感分析
- 12步轻松搞定python装饰器
- Python基础回顾之-控制流语句
- python之旅【第一篇】
- Python篇----提供pip和virtualenv的Uranium之介绍(翻译篇)
- 学习《Python核心编程》做一下知识点提要,方便复习(一)
- 利用Python进行文章特征提取(二)
- python 图 无向图
- python 风格指南笔记
- Python中的模块
- 爬虫网页编码问题解决思路
- python学习---购物商场与ATM
- python之ATM(第五天)
- python学习笔记(一)
- 为什么在Pyhton中使用关键字参数