项目背景:因为有时候要关注一些官网上的通知,比如政府网站、学校网站等等,这些通知往往具有时效性,而我们也不能保证每天都能去上网看,所以使用python做了这个小任务,每天定时爬取学校官网的通知,并发送到邮箱。
这个小任务主要包括三部分:
1. 数据爬取
2. 邮件发送
3. 定时执行
1、数据爬取
这里我使用requests+beautifulsoup来进行数据抓取。
首先抓取文章列表页的url,返回一个list:
```
def get_url():
url = 'http://www.bzuu.edu.cn/jxjy/125/list.htm'
r = requests.get(url=url)
soup = BeautifulSoup(r.text, 'lxml')
links = soup.find_all('td', width="97%")
main_url = 'http://www.bzuu.edu.cn'
url_list = []
for link in links:
a = link.a['href']
if a.endswith('htm'):
url_list.append(main_url+a)
return url_list
```
接着获取文章发布时间和标题:
def get_content():
title_list = []
for url in get_url():
r = requests.get(url=url)
r.encoding = 'utf-8'
soup = BeautifulSoup(r.text, 'lxml')
title = soup.find('span', class_="Article_Title").text
pub_data = soup.find('span', class_="Article_PublishDate").text
current_time = time.strftime('%Y-%m-%d', time.localtime(time.time()))
if pub_data == current_time:
title_list.append(pub_data + " ; 今日公告:" + title + ";" + "详情点击: " + url)
if len(title_list) == 0:
sent_email(mail_body='今天没有通知')
else:
for title in title_list:
sent_email(mail_body=title)
title_list.clear()
```
这里有几个需要注意的点,就是关于中文乱码问题,通过request获取到的网页信息,部分中文会出现乱码情况,为此需要做一次操作:
```
r.encoding = 'utf-8'
```
2、邮件发送
这里需要用到几个库:
```
import smtplib
from email.mime.text import MIMEText
from email.header import Header
```
具体代码:
```
def sent_email(mail_body):
sender = '***********'
receiver = '**********'
smtpServer = 'smtp.163.com'
username = '*******'
password = '*******'
mail_title = '今日通知'
mail_body = mail_body
message = MIMEText(mail_body, 'plain', 'utf-8')
message["Accept-Language"] = "zh-CN"
message["Accept-Charset"] = "ISO-8859-1,utf-8"
message['From'] = sender
message['To'] = receiver
message['Subject'] = Header(mail_title, 'utf-8')
try:
smtp = smtplib.SMTP()
smtp.connect(smtpServer)
smtp.login(username, password)
smtp.sendmail(sender, receiver, message.as_string())
print('邮件发送成功')
smtp.quit()
except smtplib.SMTPException:
print("邮件发送失败!!!")
```
其中包括sender发送方,receiver接收方,需要特别注意的是,username是你的邮箱账号,但password不是你的邮箱密码,而是你的smtp授权密码,如果发送的正文当中出现乱码情况,需要做一步操作:
```
message["Accept-Language"] = "zh-CN"
message["Accept-Charset"] = "ISO-8859-1,utf-8"
```
3、定时执行
这里需要用到windows的计划任务功能:
接下来几步操作没什么可说的,最重要的一步是:
第一个输入框输入:python.exe
添加参数输入脚本的完整路径
起始于输入python.exe的解释器路径;
需要注意的一点是:要看清设置选项,有的设置选项是必须插入电源才能按时执行,这个要勾选掉,否则可能会出现执行不成功的情况。
如果有类似需求的朋友也可以在文章下方留言,我将尽可能的帮助你解决类似的问题。