使用爬虫爬取指定文章,定时发送邮件

这里采用一个简单的网站,儿童睡前小故事:
http://www.tom61.com/ertongwenxue/shuiqiangushi/index.html

内容如下:
在这里插入图片描述

一、爬取小故事的标题及详情链接,作为数据来源

使用xpath抓取所有的小故事标题及详情链接:
在这里插入图片描述

在这里插入图片描述

代码如下:
这里只爬取一页数据作为参考

import json
import requests
from lxml import etree
from fake_useragent import UserAgent



def request_html(url,headers,article_list=[]):
    response = requests.get(url,headers=headers).content.decode('utf-8')
    tree = etree.HTML(response)
    dd_list = tree.xpath('//div[@id="Mhead2_0"]//dd')
    # print(len(dd_list))
    for dd in dd_list:
        # 标题
        title = dd.xpath('./a/text()')[0]
        print(title)
        # 详情url
        title_url = dd.xpath('./a/@href')[0]
        href = 'http://www.tom61.com' + title_url
        article_list.append(
            dict(title=title,title_url=href)
        )
    # 列表转化为json字符串
    list_json = json.dumps(article_list,ensure_ascii=False)
    with open('story.json','w',encoding='utf-8')as fp:
        fp.write(list_json)
    # print(article_list)
        # print(href)

if __name__ == '__main__':
    url = 'http://www.tom61.com/ertongwenxue/shuiqiangushi/index.html'

    ua = UserAgent()
    headers = {
        'User-Agent': ua.random
    }
    request_html(url,headers)
    # for i in range(2,72):
    #     url = f'http://www.tom61.com/ertongwenxue/shuiqiangushi/index_{i}.html'
    #     request_html(url,headers)

在这里插入图片描述`

二、读取json文件获取到小故事详情url,得到故事内容

读取json文件,转为python类型,利用随机模块挑选一个故事作为定时发送的内容,获取到故事详情url

with open('story.json', 'r', encoding='utf-8')as fp:
    content = fp.read()

# json字符串转化为python类型
content = json.loads(content)
# 随机取出一个故事
story = random.choice(content)
print(story)
name = story['title']
url = story['title_url']

定义请求函数,访问故事详情,使用xpath获取故事内容

import json
import random
import requests
from lxml import etree
from fake_useragent import UserAgent



def request_html(url,headers):
    response = requests.get(url, headers=headers).content.decode('utf-8')
    tree = etree.HTML(response)
    # 抓取故事内容
    content_list = tree.xpath('//div[@class="t_news_txt"]/p')
    try:
        for p in content_list:
            result = p.xpath('./text()')[0].replace('\n','')
            # result = ''.join(result)
            print(result)
        #     with open('gushi.txt','a',encoding='utf-8')as fp:
        #         fp.write(result+'\n')
    except:
        pass



if __name__ == '__main__':
    with open('story.json', 'r', encoding='utf-8')as fp:
        content = fp.read()

    # json字符串转化为python类型
    content = json.loads(content)
    # 随机取出一个故事
    story = random.choice(content)
    print(story)
    name = story['title']
    url = story['title_url']

    ua = UserAgent()
    headers = {
        'User-Agent': ua.random
    }

    request_html(url,headers)

在这里插入图片描述

三、使用邮件模块定义邮件发送函数,并将获取的故事内容传入函数中当做邮件发送的内容,之前获取的标题作为邮件主题
import json
import random
import requests
from lxml import etree
from fake_useragent import UserAgent
import smtplib
from email.mime.text import MIMEText


def request_html(url,headers):
    response = requests.get(url, headers=headers).content.decode('utf-8')
    tree = etree.HTML(response)
    # 抓取故事内容
    # content_list = tree.xpath('//div[@class="t_news_txt"]/p')
    content_list = tree.xpath('//div[@class="t_news_txt"]//text()')
    # try:
    #     for p in content_list:
    #         result = p.xpath('./text()')[0].replace('\n','')
    #         # result = ''.join(result)
    #         print(result)
    #     #     with open('gushi.txt','a',encoding='utf-8')as fp:
    #     #         fp.write(result+'\n')
    # except:
    #     pass
    content = '\n'.join(content_list)
    return content


# 邮件发送
def send_mail(name,content):
    # 发送方邮箱
    msg_from = '9*******7@qq.com'
    # 授权码
    password = 'my*******lbdcg'
    # 收件人邮箱
    receiver = '1*********2@163.com'
    # 邮件主题
    subject = name

    # 创建邮件发送内容对象
    msg = MIMEText(content,'plain','utf-8')
    msg['Subject'] = subject
    msg['From'] = msg_from
    msg['To'] = receiver

    # 发送邮件
    try:
        # 创建邮件服务器
        smtp = smtplib.SMTP()
        smtp.connect('smtp.qq.com')
        smtp.login(msg_from,password)
        smtp.sendmail(msg_from,msg['To'],msg.as_string())
        print('发送成功')
    except:
        print('发送失败')

if __name__ == '__main__':
    with open('story.json', 'r', encoding='utf-8')as fp:
        content = fp.read()

    # json字符串转化为python类型
    content = json.loads(content)
    # 随机取出一个故事
    story = random.choice(content)
    print(story)
    name = story['title']
    url = story['title_url']

    ua = UserAgent()
    headers = {
        'User-Agent': ua.random
    }
    # 获取到随机的小故事内容
    contents = request_html(url,headers)

    # 发送邮件
    send_mail(name,contents)

运行该脚本,测试邮件是否可以发送成功(前提必须开始邮件服务器,并获取到授权码)
在这里插入图片描述
在这里插入图片描述

四、将脚本在windows下设置为定时任务

现在将脚本在cmd下运行,测试是否成功,成功后再添加到windows定时任务中:(尽量还是将路径等改为英文路径)
在这里插入图片描述
实现定时发送功能:
在windows的环境中,在cmd中输入compmgmt.msc,将该脚本文件加入任务计划程序库,设置运行时间和频率
1、创建基本任务
在这里插入图片描述
2、创建定时任务名称
在这里插入图片描述
3、任务开始时间
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

更改脚本触发间隔:
在这里插入图片描述

至此,邮件定时发送儿童小故事就设置完成!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孜孜孜孜不倦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值