简介
考研结束后,因为要关注官网发布的录取通知,每天都要去官网看好几遍。于是便做一个网络爬虫来自动处理事件,可以判断当天是否有最新的消息发布,如果有就发送到个人邮箱。
该爬虫主要涉及的部分有:
- 网页请求
- 网页解析
- 时间判断
- 邮件发送
网页请求
网页请求使用的是常规的requests库
def get_response(self, url):
print(url)
response = requests.get(url)
data = response.content
return data
页面解析
首先看一下所要爬取的页面的结构:
首次所要爬取的目标便是官网通知的标题信息,可以通过 id='content’下的a标签来进行定位,这一部分的解析如下:
def parse_data(self,data):
soup = BeautifulSoup(data, 'html.parser', from_encoding='gb18030')
all = soup.find(id="content")
new_url = self.url+all.a['href']
print(all.a.text)
self.notice = all.a.text
#print(new_url)
return new_url
时间判断
对于每一个通知,在其具体的HTML页面下会有相应的时间信息
判断该日期和当前电脑日期是否相同,即可判断是否是最新发布的消息,该时间是通过class_="info-article"来进行定位的,同时做了一定的字符串调整过程。系统当前时间则是调用了time库来进行获得。这里没有新公告,我也做了发送操作,如果不需要直接将没新公告下的发送逻辑删除即可。
def get_content(self,new_url):
data = requests.get(new_url).content
soup = BeautifulSoup(data, 'html.parser', from_encoding='gb18030')
tim = soup.find('div',class_="info-article").text[6:16]
#print(tim)
current_time = time.strftime('%Y-%m-%d', time.localtime(time.time()))
#print(current_time)
if tim.strip() == current_time.strip():
print("今日有新公告")
self.notice = self.notice+"今日有新公告"
self.send_email(self.notice)
else:
print("今日没有新公告")
self.notice = "今日没有新公告"
self.send_email(self.notice)
邮件发送
邮件发送则用到了smtplib以及email模块,这里直接pip install PyEmail 就好,这里需要强调的是password不是登录密码,而是邮箱的授权码,具体的获取过程可以参考授权码获取
def send_email(self,email_body):
from_addr = 'xxx@qq.com'
password = 'xxx'#这里不是登录密码,而是邮箱授权码
# 收信方邮箱
to_addr = 'xxx@qq.com'
# 发信服务器
smtp_server = 'smtp.qq.com'
# 邮箱正文内容,第一个参数为内容,第二个参数为格式(plain 为纯文本),第三个参数为编码
msg = MIMEText(email_body, 'plain', 'utf-8')
# 邮件头信息
msg['From'] = Header(from_addr)
msg['To'] = Header(to_addr)
msg['Subject'] = Header('newest notice')
# 开启发信服务,这里使用的是加密传输
server = smtplib.SMTP_SSL(smtp_server)
server.connect(smtp_server, 465)
# 登录发信邮箱
server.login(from_addr, password)
# 发送邮件
server.sendmail(from_addr, to_addr, msg.as_string())
# 关闭服务器
server.quit()
做的比较草率,有什么不足的地方还请见谅,完整的代码连接放在github上了,代码连接