1.邮件发送模板
from email.mime.text import MIMEText
from smtplib import SMTP
def send_email(self,text):
'''
发送邮件
:param text:
:return:
'''
# 定义发件人
msg_from = '[email protected]'
# 授权码
password = 'ndivp***xewagahi'
# 发件人
msg_to = '[email protected]' #收件人多个人用;分隔
# 主题
subject = text[0]
# 创建邮件对象
msg = MIMEText(text[1], 'plain', 'utf-8')
msg['From'] = msg_from
msg['To'] = msg_to
msg['Subject'] = subject
try:
# 创建smtp对象(邮件传输协议)
smtp = SMTP()
# 连接QQ服务器
smtp.connect('smtp.qq.com',25)
# 登录
smtp.login(msg_from, password)
# 发送
smtp.sendmail(msg_from,msg['To'].split(';'),msg.as_string())
print('发送成功!')
smtp.close()
except Exception as e:
print('邮件发送失败!',e)
2.定时发送邮件
爬虫说明:爬取的一个睡前小故事的网站
实现功能:定时触发爬虫程序,定向定时向用户发送一篇随机的故事以邮件的方式
# -*- coding:utf-8 -*-
import requests
import random
from lxml import etree
import urllib
import os
from email.mime.text import MIMEText
from smtplib import SMTP
import schedule
import time
class SleepStory(object):
def __init__(self, url):
self.url = self.init_url(url)
def init_url(self, url):
'''
确定爬取的页数(生成随机数)
:rtype: object
:param url:
:return:
'''
page = random.randint(0,71)
if page == 0:
return url.format('')
else:
return url.format('_'+str(page))
def get_xpath(self, url):
headers = {
'USER_AGENT' :'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
# etree.HTML(response.text) 构造了一个XPath解析对象
return etree.HTML(response.content.decode('utf-8'))
def parse_story(self, url):
'''
获取故事类容,发送邮寄
:param url:
'''
html = self.get_xpath(url)
story_name = html.xpath('//h1/text()')[0]
story_content = html.xpath('string(//div[@class="t_news_txt"])')
# os.linesep 系统换行
self.send_email((story_name, story_content))
def send_email(self,text):
'''
发送邮件
:param text:
:return:
'''
# 定义发件人
msg_from = '[email protected]'
# 授权码
password = 'ndivpszxxewagahi'
# 发件人
msg_to = '[email protected]' #收件人多个人用;分隔
# 主题
subject = text[0]
# 创建邮件对象
msg = MIMEText(text[1], 'plain', 'utf-8')
msg['From'] = msg_from
msg['To'] = msg_to
msg['Subject'] = subject
try:
# 创建smtp对象(邮件传输协议)
smtp = SMTP()
# 连接QQ服务器
smtp.connect('smtp.qq.com',25)
# 登录
smtp.login(msg_from, password)
# 发送
smtp.sendmail(msg_from,msg['To'].split(';'),msg.as_string())
print('发送成功!')
smtp.close()
except Exception as e:
print('邮件发送失败->',e)
def parse(self):
# 先获取该页面的所有dd_list
html= self.get_xpath(self.url)
dd_list = html.xpath('//dl[@class="txt_box"]/dd')
# 在从中重新取出s一个
dd_choice = random.choice(dd_list)
# 获取详情页连接
story_url = dd_choice.xpath('./a/@href')[0]
story_url = urllib.parse.urljoin(self.url,story_url)
self.parse_story(story_url)
def main():
base_url = 'http://www.tom61.com/ertongwenxue/shuiqiangushi/index{}.html'
app = SleepStory(base_url)
schedule.every().day.at("21:00:00").do(app.parse) # 每天21:00:00触发
schedule.every().day.at("14:00:00").do(app.parse)
schedule.every(5).seconds.do(app.parse) # 每5秒触发,用于调试的
while True:
schedule.run_pending()
time.sleep(1)
if __name__ == '__main__':
main()
3.爬虫监控
-
爬虫监控给的由来:
爬虫监控相当于监控(自动)一个爬虫,由于爬虫可能会出现一些问题,页面结构的变化,加载方式的改变等,就会造成大量的数据为空。对于这种情况,如果有一个类似于监控的展示代码出错的原因 -
监控的实现:
可以通过发邮件的形式 -
监控思路:
可将发送邮件的模块嵌入到爬虫程序中,如果判断被反爬(爬虫多次后,重定向到验证码页面),或其他故障(如网页更新,网页结构发生变化,然后得到的值全为空值,博主经常写爬虫会遇到),则可以通过向自己发送邮件的方式提醒自己,实例源码需要可以私聊,这里暂且不做展示!