python爬虫练习-爬取暖心小故事并实现定时邮箱发送

一、练习目的

  • 爬取在按网站故事并实现定时邮箱发送

二、实现步骤

  • 爬取在线网站的小故事
  • 编写邮箱发送程序
  • 添加定时任务

三、实现过程

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

python爬虫练习-爬取暖心小故事并实现定时邮箱发送

 写在后面:

上一篇:CF1625D.Binary Spiders


下一篇:实验1 8086汇编指令编码和调试