python每天定时爬取官网通知,并把通知发送到邮箱

2019-03-17 13:21发布

项目背景:因为有时候要关注一些官网上的通知,比如政府网站、学校网站等等,这些通知往往具有时效性,而我们也不能保证每天都能去上网看,所以使用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的解释器路径;

需要注意的一点是:要看清设置选项,有的设置选项是必须插入电源才能按时执行,这个要勾选掉,否则可能会出现执行不成功的情况。

如果有类似需求的朋友也可以在文章下方留言,我将尽可能的帮助你解决类似的问题。

文章来源: https://www.toutiao.com/group/6668964094055285255/