您的位置:首页 > 编程语言 > Python开发

python自动抓取某网站食谱,并以excel文件的形式通过邮箱定时发送信息

2020-02-01 15:09 549 查看

python自动抓取某网站食谱,并以excel文件的形式通过邮箱定时发送信息

如题,本项目运用了requests,BeautifuSoup 库抓取数据,openpyxl库本地储存数据,email库各种模块设计并组成邮件,smtplib库第三方发送邮件,schedule库实现定时执行任务。代码如下:
import requests
import openpyxl
from bs4 import BeautifulSoup
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.header import Header
import schedule,time

mailhost=input('你的邮箱号:')
password=input('你的smtp授权码:')
receiver=input('收件人邮箱号:')

def food_spider():
res_foods = requests.get('http://www.xiachufang.com/explore/')
bs_foods = BeautifulSoup(res_foods.text,'html.parser')
list_foods = bs_foods.find_all('div',class_='info pure-u')
list_all = []
for food in list_foods:
tag_a = food.find('a')
name = tag_a.text[17:-13]
URL = 'http://www.xiachufang.com'+tag_a['href']
tag_p = food.find('p',class_='ing ellipsis')
ingredients = tag_p.text[1:-1]
list_all.append([name,URL,ingredients])
return(list_all)

def save_data(data):
wb=openpyxl.Workbook()#创建工作簿
sheet=wb.active#获取工作簿活动表
sheet.title='food'#title属性赋值
sheet['A1']='菜名'#单元格属性赋值
sheet['B1']='链接'
sheet['C1']='食材'
for i in data:
sheet.append(i)
wb.save('food.xlsx')

def send_email(message):
global mailhost,password,receiver
qq_server='smtp.qq.com'
try:
smtp_obj=smtplib.SMTP()
smtp_obj.connect(qq_server,25)
smtp_obj.login(mailhost,password)
smtp_obj.sendmail(mailhost,receiver,message.as_string())
smtp_obj.quit()
print('发送成功')
except smtplib.SMTPException as ex:
print('发送失败:%s'%ex)

def set_email():
message=MIMEMultipart('related')#采用related定义内嵌资源的邮件体
content='正文'#文本内容
textpart=MIMEText(content,'plain','utf-8')#文本部分实体化
file=open(r'D:\file-py\paqu\food.xlsx','rb')#打开本地文件
file_content=file.read()#读取附件部分所需信息
file.close()#关闭本地文件
xlsxpart=MIMEApplication(file_content)#附件部分实体化
xlsxpart.add_header('Content-Disposition','attachment',filename='food.xlsx')#附件都要带上附件声明
message.attach(textpart)#加上文本部分
message.attach(xlsxpart)#加上xlsx附件部分
message['Subject']=Header('下厨房-本周推荐美食')#加邮件头 主题
message['From']=Header('ZOU')#加邮件头 发件人
message['To']=Header('zou')# 加邮件头 收件人
return(message)

def job():
print('开始任务')
data=food_spider()
save_data(data)
message=set_email()
send_email(message)
print('任务结束\n')

schedule.every().monday.at("8:00").do(job)#每周一早上八点自动发邮寄
while True:
schedule.run_pending()#检查部署的情况,如果任务准备就绪,就开始执行任务(pending 即将发生的事)
time.sleep(1)
  • 点赞
  • 收藏
  • 分享
  • 文章举报
不懂就问问 发布了5 篇原创文章 · 获赞 0 · 访问量 269 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐