目标:我们曾在第3关爬取了下厨房网站中的“本周最受欢迎菜谱”,现在,我们完善这个程序,让程序在每个周五爬取数据,并把菜谱发送到我们的邮箱。
import requests
import smtplib
import schedule
import time
from bs4 import BeautifulSoup
from email.mime.text import MIMEText
from email.header import Header
account=input('请输入你的邮箱:')
password=input('请输入你的密码:')
receiver=input('请输入收件人的邮箱:')
def recipe_spider():
res=requests.get('http://www.xiachufang.com/explore/')#开始网址写成下厨房官网的网址了
html=res.text
soup=BeautifulSoup(html,'html.parser')
items=soup.find_all('div',class_='info pure-u')#要注意检查是不是find_all,如果不是的话,会出现NoneType
list_all=''
num=0
for item in items:
num+=1
name=item.find('a').text.strip()
url='http://www.xiachufang.com'+item.find('a')['href']
ingredients=item.find('p',class_='ing ellipsis').text.strip()
food_info='''
序号:{}
菜名:{}
链接:{}
原料:{}
'''.format(num,name,url,ingredients)
list_all=list_all+food_info
return (list_all)
def send_email(list_all):
global account,password,receiver
mailhost='smtp.qq.com'
qqmail=smtplib.SMTP()
qqmail.connect(mailhost,25)
qqmail.login(account,password)
content='亲爱的,本周的热门菜谱如下:'+list_all
message=MIMEText(content,'plain','utf-8')
subject='周末吃个啥'
message['Subject']=Header(subject,'utf-8')
try:
qqmail.sendmail(account,receiver,message.as_string())
print('邮件发送成功')
except:
print('邮件发送失败')
qqmail.quit()
def job():
print('开始一次任务')
list_all=recipe_spider()
send_email(list_all)
print('任务完成')
schedule.every(1).minute.do(job)#这里为了检测代码运行结果,我先设置了每隔1分钟
#schedule.every().friday.at("18:00").do(job)#部署每周五的18:00执行函数的任务
while True:
schedule.run_pending()
time.sleep(1)