爬取网易云音乐每日推荐歌单,然后定时自动发送到朋友邮箱
点击上方蓝色字体,关注程序员zhenguo
前两个项目:
1 打开网址
https://music.163.com/
2 点击 发现音乐--推荐
3 在此网页,右键,按下检查
4 点击 Network
5 在第一个红框内输入:recommand 过滤得到API
进而找到推荐歌曲的API:
https://music.163.com/weapi/discovery/recommend/resource?csrf_token=
且是
POST
请求并且在
Request Headers
的cookie
键中能够找到csrf_token
的取值,如下图中的红框所示:与代码实际获取的稍有出路:
这是代码获取到的:
<RequestsCookieJar[<Cookie MUSIC_U=8e504c23c925ac6b1a9f8570bd5ea25899dcb9d14e06692fe82562bbf8998e10db7e765df03701e5d88f396e7092517fd69973145faab799d78b6050a17a35e7a47070bb71cca15c2d96587bb7c51858 for .music.163.com/>, <Cookie NMTID=00OfaG13kwU00MTt0ZEkt1FAzgBBlEAAAF-Bs4AAA for .music.163.com/>, <Cookie __csrf=13b3d714dab6aefe645de1f994416da6 for .music.163.com/>, <Cookie __remember_me=true for .music.163.com/>, <Cookie MUSIC_A_T=1446513182120for .music.163.com/api/clientlog>, <Cookie MUSIC_R_T=1446513246949for .music.163.com/api/clientlog>, <Cookie MUSIC_A_T=1446513182120for .music.163.com/api/feedback>, <Cookie MUSIC_R_T=1446513246949for .music.163.com/api/feedback>, <Cookie MUSIC_A_T=1446513182120for .music.163.com/eapi/clientlog>, <Cookie MUSIC_R_T=1446513246949for .music.163.com/eapi/clientlog>, <Cookie MUSIC_A_T=1446513182120for .music.163.com/eapi/feedback>, <Cookie MUSIC_R_T=1446513246949for .music.163.com/eapi/feedback>, <Cookie MUSIC_A_T=1446513182120for .music.163.com/neapi/clientlog>, <Cookie MUSIC_R_T=1446513246949for .music.163.com/neapi/clientlog>, <Cookie MUSIC_A_T=1446513182120for .music.163.com/neapi/feedback>, <Cookie MUSIC_R_T=1446513246949for .music.163.com/neapi/feedback>, <Cookie MUSIC_A_T=1446513182120for .music.163.com/openapi/clientlog>, <Cookie MUSIC_R_T=1446513246949for .music.163.com/openapi/clientlog>, <Cookie MUSIC_A_T=1446513182120for .music.163.com/wapi/clientlog>, <Cookie MUSIC_R_T=1446513246949for .music.163.com/wapi/clientlog>, <Cookie MUSIC_A_T=1446513182120for .music.163.com/wapi/feedback>, <Cookie MUSIC_R_T=1446513246949for .music.163.com/wapi/feedback>, <Cookie MUSIC_A_T=1446513182120for .music.163.com/weapi/clientlog>, <Cookie MUSIC_R_T=1446513246949for .music.163.com/weapi/clientlog>, <Cookie MUSIC_A_T=1446513182120for .music.163.com/weapi/feedback>, <Cookie MUSIC_R_T=1446513246949for .music.163.com/weapi/feedback>]>
以代码为准,使用正则提取:
re.findall('__csrf=(.*?) for', str(self.session.cookies))[0]
6 user-agent
也是在
Request Headers
部分中,可以获取到:环境安装
定时、自动爬取网易今日推荐歌单,并自动发送邮件。
内置模块,如下:
import time
import re
import smtplib
from email import header
from email.mime import text, multipart
from threading import Timer
其中,
time
和re
模块都很常见。后面三行smtplib
和email
都与自动发邮件相关。下面这几个包是重点,其中第一个包是公众号朋友皮卡丘编写,用于模拟自动登入常见各大平台,用起来很方便。
第二个包也是皮卡丘编写,用于自动爬取网易云音乐。我看了其中的主要模块,编写的很不错。
第三个包是用来写命令行接口,很方便。
from DecryptLogin import login
from DecryptLogin.core.music163 import Cracker
import click
项目框架
首先,看下项目文件,主要包括以下两个:
p3_email_song.py
song_email.txt
其中,py为代码模块,txt为py模块需要读入的邮箱列表,表示爬取后自动发给这些邮箱。
下面,看下py模块的主要类和函数。
如上提到的,全局变量
headers
字典是post请求的头,从浏览器里复制过来:headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
'Accept': '*/*'
}
接下来,全局变量
send_email_interval
是定时自动发送邮件的时间间隔,设置为一天,意思是每一天定时发送:send_email_interval = 60*60*24
主要包括一个类:
NetRcmndSong
,用于自动爬取网易云音乐的推荐歌单,cmd
函数是使用click
模块装饰的命令行接口:NetRcmndSong类
主方法是
run
:defrun(self):
recommend_info = self.__get_recommend()
keys, values = list(recommend_info.keys()), list(recommend_info.values())
self.title = f'【程序员zhenguo】和网易云音乐今日为你({self.username})推荐的歌曲如下:'
options = [v for v in values]
self.email_content = self.title + "\n" + '\n'.join(options) + "\n\n\t来自你的老朋友\n\t程序员zhenguo"
print(self.email_content)
self.__send_email()
self.__get_recommend()
用于爬取歌单数据,后面解析成邮件发送的格式,这是我今天爬取的推荐歌单,一共74首,下面是前20首歌:【程序员zhenguo】和网易云音乐今日为你([email protected])推荐的歌曲如下:
0 梦一场-小叶同学
1 Something Just Like This-We Rabbitz
2 侧脸-于果
3 我们的时光-赵雷
4 余生浮梁-侃侃
5 第三极-十月时Sunset
6 无感-王朝
7 逆流时光-安图声乐队
8 多幸运遇见你-李乐乐
9 夢に向かって-中村由利子
10 直到遇见了你,我只喜欢你-陈柯宇
11 万万里-史超
12 Forrest Gump-David Metis
13 董小姐(小调版)-张超洋
14 Sứ Thanh Hoa(Remix)-SHENMING
15 一生中最爱 (Live)-李克勤
16 Tojana-Willyam Wiay
17 一言难尽-张宇
18 你-刘健宗
19 求佛南方凯-白风流
20 我曾-杨骑瑞
来自你的老朋友
程序员zhenguo
__get_recommend
是整个项目的核心,通过文章一开始的讲解,我们知道API是下面的url
:def__get_recommend(self):
"""
获得每日歌曲推荐
:return:
"""
url = 'http://music.163.com/weapi/v2/discovery/recommend/songs?csrf_token='
data = {
'crsf_token': self.csrf,
'limit': '999',
'offset': '0',
'total': 'true'
}
data = self.cracker.get(data)
response = self.session.post(url, headers=self.headers, data=data)
response_json = response.json()
你一定会好奇:
data
的结构为啥是这样,这是通过解析网易云前端的js代码得到的。最重量级的、最核心的应该是下面这行代码:
self.cracker.get(data)
这里面都有源码,大家可以结合网易云前端的js代码,再学习
RSA
和AES
的加密技术,相信理解没问题。cmd方法
click模块封装命令行接口是真的方便,只需要使用下面三个装饰器:
@click.command()
@click.option('-u', help='用户名')
@click.option('-p', help='密码')
defcmd(u, p):
client = NetRcmndSong(u, p)
client.run()
Timer(send_email_interval, cmd()).start()
另外,应为我们想每天定时自动发送,所以使用
Timer
做定时任务。只需要下面一行代码,还是有点巧妙,cmd
函数必须包括下面这行代码,同时Timer
的参数也必须叫cmd
:Timer(send_email_interval, cmd()).start()
测试
下面应用上面的模块,实现定时、自动爬取并发送邮件。
在
song_email.txt
文件中配置接收推荐音乐的邮箱,一行一个,可以给你女朋友、好朋友、家人的邮箱都写上。然后在cmd或terminal窗口,只需输入下面一行代码:
python p3_email_song.py -u 你的网易云账户 -p 你的网易密码
这是我收到的邮件截图:
完整代码下载
上面完整py代码文件,在我的公众号后台回复:c,即可下载
同时过往或后面的Python项目代码,我也会同步到这个文件夹中。
不用打赏,点个赞或在看
就心满意足了
对应关键词
下载关键词
代码
音乐
模块
网易云音乐
网易云
最新评论
推荐文章
作者最新文章
你可能感兴趣的文章
Copyright Disclaimer: The copyright of contents (including texts, images, videos and audios) posted above belong to the User who shared or the third-party website which the User shared from. If you found your copyright have been infringed, please send a DMCA takedown notice to [email protected]. For more detail of the source, please click on the button "Read Original Post" below. For other communications, please send to [email protected].
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。