一、练习目的
- 爬取在按网站故事并实现定时邮箱发送
二、实现步骤
- 爬取在线网站的小故事
- 编写邮箱发送程序
- 添加定时任务
三、实现过程
1.爬取在线网站的小故事并编写邮箱发送程序
# _*_ coding :utf-8 _*_
#@Time :2021/10/26 21:05
#@Author :帅哥
#@File :爬虫练习_爬取故事并实现邮箱定时发送
#@Project :
import requests
from bs4 import BeautifulSoup
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
import time
#步骤1:爬取需要爬取的url链接
def get_url(url,headers):
#发送请求
res = requests.get(url=url, headers=headers)
#设定返回的编码格式(页面编码格式查看方式:右键->检查->Elements->head里面查看charset=‘xxxx’)
res.encoding = 'gb2312'
#进行数据解析
soup = BeautifulSoup(res.text, 'lxml')
url_list = soup.find_all('a', attrs={'target': "_blank"})
new_url = []
#从9开始是为了删除非地址元素
for i in range(9, len(url_list)):
url2 = url_list[i]
new_url.append(url2['href'])
print(url2['href'])
# 依旧是为了删除非地址元素
new_url.pop(-1)
new_url.pop(-1)
new_url.pop(-1)
return new_url
# for i in new_url:
# print(i)
#步骤2:获取邮件发送内容
def get_content(getUrl,headers):
#发送请求
_res = requests.get(url=getUrl, headers=headers)
_res.encoding = 'gb2312'
#数据解析
_soup = BeautifulSoup(_res.text, 'lxml')
_content = _soup.find_all('p')
_title = _soup.select('body > div.w.clearfix > div.left.main-content2 > div.gushi > h1 > a')
# print(_title[0].get_text())
_listTitle = []
_listTitle.append(_title[0].get_text())
_sumContent = []
for i in range(len(_content)):
print(_content[i].get_text())
_sumContent.append(_content[i].get_text())
# print(_sumContent)
#除去多余的数据,目前不会更好的方式....
# _sumContent.pop(-1)
# _sumContent.pop(-1)
# _sumContent.pop(-1)
# _sumContent.pop(-1)
# _sumContent.pop(-1)
# _sumContent.pop(-1)
# _sumContent.pop(-1)
# _sumContent.pop(-1)
# _sumContent.pop(-1)
# _sumContent.pop(-1)
_sum_content = _listTitle + _sumContent
return _sum_content
# for i in _sum:
# print(i)
#步骤3:发送邮件
def send_mail(content):
#(1)设置smtplib所需的参数。
#设置邮箱的smtp服务器地址(常用邮箱的smtp服务器地址如下:#新浪邮箱:smtp.sina.com,新浪VIP:smtp.vip.sina.com,搜狐邮箱:smtp.sohu.com,126邮箱:smtp.126.com,139邮箱:smtp.139.com,163网易邮箱:smtp.163.com。)
smtpserver = 'smtp.163.com'
#设置发件人,收件人
username = 'xxxx@163.com'
#password 不是邮箱密码,是邮箱授权密码,步骤可参考https://blog.csdn.net/weixin_42983055/article/details/85685615
password = 'xxxx'
sender = 'YimengDuan1997@163.com'
# 收件人为多个收件人,通过字符串添加
receiver = ['xxxx@163.com']
#设置发送的邮件主题
subject = '东周列国故事新编'
# 通过Header对象编码的文本,包含utf-8编码信息和Base64编码信息。
subject = Header(subject, 'utf-8').encode()
#(2)构造邮件对象MIMEMultipart对象(实例化)并设置发送邮件的主题、内容
# 下面的主题,发件人,收件人,日期是显示在邮件页面上的。
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = 'xxxx@163.com <xxxx@163.com>'
# 收件人为多个收件人,通过join将列表转换为以;为间隔的字符串
msg['To'] = ";".join(receiver)
# 可选参数:msg['Date']='2021-10-16'
# 构造文字内容,并通过attach添加到发送的内容中
text_plain = MIMEText(str(content), 'plain', 'utf-8')
msg.attach(text_plain)
#(3)发送邮件
smtp = smtplib.SMTP()
smtp.connect('smtp.163.com')
smtp.login(username, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()
if __name__ == '__main__':
url = 'http://www.bestgushi.com/l/dongzhoulieguogushixinbian/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36'
}
# 步骤1:爬取需要爬取的url链接
getUrl=get_url(url,headers)
#步骤2:获取邮件发送内容
for url in getUrl:
content=get_content(url,headers)
#步骤3:发送邮件-每隔60s发送一次邮件
send_mail(content)
time.sleep(60)
# content=get_content(getUrl[5],headers)
# print(content)
# # #步骤3:发送邮件-每隔60s发送一次邮件
# send_mail(content)
2.添加定时任务
- 在windows下,在cmd中输入compmgmt.msc,设置定时任务
compmgmt.msc
写在后面:
- 代码注释写的比较清楚,亲测可直接使用,文中部分代码参考以下博主:
- 项目思路参考:
- 网络爬虫实战(一):给女友定时发送睡前小故事_老肥码码码-CSDN博客(博主的思路清晰代码写的也很好)
- python自动发邮件总结及实例说明 - 啄木鸟儿 - 博客园(编写邮箱发送参考的博主)
- 同样中间步骤需要截图啥的有点麻烦,没有找到好的截图工具(好吧是我懒了),有空的时候再说吧,如果有问题欢迎评论区提出!!!