大家好,我是Python进阶者。

前言

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

# yyds干货盘点 # 每次记歌词——使用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()

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

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

# yyds干货盘点 # 每次记歌词——使用Python自动发邮件提醒你记歌词_邮件发送_02

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

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

# yyds干货盘点 # 每次记歌词——使用Python自动发邮件提醒你记歌词_Python网络爬虫_03

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

总结

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

最后感谢【冫马讠成】大佬的代码分享,也欢迎大家积极尝试,有好的内容也可以分享给我噢!

# yyds干货盘点 # 每次记歌词——使用Python自动发邮件提醒你记歌词_python_04

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎咨询我。