八骏日行三万里,穆王何事不重来。

大家好,我是Python进阶者。

前言

前几天在Python交流群里边,【冫马讠成】大佬分享了一个有趣的代码,用于定时发送歌词到邮箱,觉得挺有意思,这里拿出来给大家分享。

每次记歌词——使用Python自动发邮件提醒你记歌词_机器学习


实现思路

实现思路倒是不难,其一是Python网络爬虫,将网页上的歌词信息抓取到,然后存起来到一个变量中,其二是编写发送邮件的逻辑,编辑好邮寄模板,然后将抓到的内容发送出去即可,定时任务可以使用Windows自带的任务计划程序实现。

实现过程

这里直接上代码,如下所示:

import json, random
import requests
import parsel
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('请输入收件人的邮箱:')
account = '{0}'.format('请输入你的邮箱:')
password = '{0}'.format('请输入邮箱授权码:')
receiver = '{0}'.format('请输入收件人的邮箱:')


def recipe_spider():
    headers = {
        'Cookie': 'kw_token=6A3S4588YMS',
        'csrf': '6A3S4588YMS'
    }
    url = 'http://www.kuwo.cn/api/www/bang/bang/musicList?bangId=93&pn=1&rn=30'
    resp = requests.get(url, headers=headers)
    text = resp.text
    text_dict = json.loads(text)
    musicList = text_dict['data']['musicList']
    music_list = []
    dit = {}
    for music in musicList:
        # rid
        dit['musicrid'] = music['musicrid'].split('_')[1]
        dit['name'] = music['name']
        music_list.append(dit.copy())
    # print(music_list)
    list_num=[]
    for i in range(30):
        music_num = music_list[i]['musicrid']
        list_num.append(music_num)
    # print(list_num)
    a = random.choice(list_num)

    url1 = str('http://www.kuwo.cn/play_detail/'+a)

    html_data = requests.get(url = url1).text    # <Response [200]> 数据请求成功

    sel = parsel.Selector(html_data)  # <Selector xpath=None data='<html data-n-head-ssr>\n  <head>\n    <...'>

    name = sel.xpath('//*[@class="song_name flex_c"]/span/text()').get().strip()  # 歌名

    lyric = sel.xpath('//*[@id="lyric"]/div/p/text()').getall()

    lyric1 = '\n'.join(lyric)
    return lyric1


def send_email(lyric1):
    global account,password,receiver
    mailhost = 'smtp.qq.com'
    qqmail = smtplib.SMTP_SSL(mailhost,465)
    # qqmail.connect(mailhost,465)
    qqmail.login(account,password)
    content = '亲爱的,今天歌名是:'+lyric1
    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('开始一次任务')
    lyric1 = recipe_spider()
    send_email(lyric1)
    print('任务完成')


if __name__ == '__main__':
    job()

你只需要输入你的邮箱,邮箱授权码和对应的收件人即可。如果不知道邮箱授权码怎么配置的话,请参考这篇文章,有详细的配置过程,这里不再赘述。

代码运行之后,用户就可以收到你发送的邮件了,如下所示。


每次记歌词——使用Python自动发邮件提醒你记歌词_机器学习_02

你也可以定时给自己发,使用定时任务工具,做个定时任务,每天提醒自己,看看歌词啥的,看的歌词多了,这样在歌词大赛中也许能拿个好名次呢!

针对定时任务,也可以在windows本地中的任务计划程序工具栏添加定时任务,如下图所示:依次点击【电脑】-->【管理】-->【创建定时任务】-->【创建新任务】


每次记歌词——使用Python自动发邮件提醒你记歌词_数据分析_03

根据提示选择需要定时的时间和任务程序即可,教程网上大把,这里不再赘述。

总结

大家好,我是Python进阶者。这篇文章主要基于Python网络爬虫和Python自动化办公中的邮件发送知识,实现歌词自动发送邮件的小项目。