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

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值