Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >爬取网易云音乐每日推荐歌单,然后定时自动发送到朋友邮箱

爬取网易云音乐每日推荐歌单,然后定时自动发送到朋友邮箱

作者头像
double
发布于 2022-01-26 05:54:43
发布于 2022-01-26 05:54:43
1.7K00
代码可运行
举报
文章被收录于专栏:算法channel算法channel
运行总次数:0
代码可运行

你好,我是 zhenguo

这是我的第493篇原创

今天是我的第三个Python项目:每天自动定时、自动发送爬取的网易云音乐的推荐歌单到你的邮箱列表中。

前两个项目:

我的第一个Python实用项目,来了!

我的第二个Python趣味项目,来了!

因为年底了工作忙,只能抽取每天碎片时间,这个项目我前前后后加起来准备了近一周,希望真正帮助到你。

下面1-6是爬虫的前端基本操作,我言简意赅的表述如下:

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 Headerscookie键中能够找到csrf_token的取值,如下图中的红框所示:

与代码实际获取的稍有出路:

这是代码获取到的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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=1446513182120 for .music.163.com/api/clientlog>, <Cookie MUSIC_R_T=1446513246949 for .music.163.com/api/clientlog>, <Cookie MUSIC_A_T=1446513182120 for .music.163.com/api/feedback>, <Cookie MUSIC_R_T=1446513246949 for .music.163.com/api/feedback>, <Cookie MUSIC_A_T=1446513182120 for .music.163.com/eapi/clientlog>, <Cookie MUSIC_R_T=1446513246949 for .music.163.com/eapi/clientlog>, <Cookie MUSIC_A_T=1446513182120 for .music.163.com/eapi/feedback>, <Cookie MUSIC_R_T=1446513246949 for .music.163.com/eapi/feedback>, <Cookie MUSIC_A_T=1446513182120 for .music.163.com/neapi/clientlog>, <Cookie MUSIC_R_T=1446513246949 for .music.163.com/neapi/clientlog>, <Cookie MUSIC_A_T=1446513182120 for .music.163.com/neapi/feedback>, <Cookie MUSIC_R_T=1446513246949 for .music.163.com/neapi/feedback>, <Cookie MUSIC_A_T=1446513182120 for .music.163.com/openapi/clientlog>, <Cookie MUSIC_R_T=1446513246949 for .music.163.com/openapi/clientlog>, <Cookie MUSIC_A_T=1446513182120 for .music.163.com/wapi/clientlog>, <Cookie MUSIC_R_T=1446513246949 for .music.163.com/wapi/clientlog>, <Cookie MUSIC_A_T=1446513182120 for .music.163.com/wapi/feedback>, <Cookie MUSIC_R_T=1446513246949 for .music.163.com/wapi/feedback>, <Cookie MUSIC_A_T=1446513182120 for .music.163.com/weapi/clientlog>, <Cookie MUSIC_R_T=1446513246949 for .music.163.com/weapi/clientlog>, <Cookie MUSIC_A_T=1446513182120 for .music.163.com/weapi/feedback>, <Cookie MUSIC_R_T=1446513246949 for .music.163.com/weapi/feedback>]>

以代码为准,使用正则提取:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
re.findall('__csrf=(.*?) for', str(self.session.cookies))[0]

6 user-agent

也是在Request Headers部分中,可以获取到:

下面进入到代码开发部分

环境安装

定时、自动爬取网易今日推荐歌单,并自动发送邮件。

内置模块,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import time
import re
import smtplib
from email import header
from email.mime import text, multipart
from threading import Timer

其中,timere模块都很常见。后面三行smtplibemail都与自动发邮件相关。

下面这几个包是重点,其中第一个包是公众号朋友皮卡丘编写,用于模拟自动登入常见各大平台,用起来很方便。

第二个包也是皮卡丘编写,用于自动爬取网易云音乐。我看了其中的主要模块,编写的很不错。

第三个包是用来写命令行接口,很方便。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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请求的头,从浏览器里复制过来:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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是定时自动发送邮件的时间间隔,设置为一天,意思是每一天定时发送:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
send_email_interval = 60*60*24

主要包括一个类:NetRcmndSong,用于自动爬取网易云音乐的推荐歌单,cmd函数是使用click模块装饰的命令行接口:

NetRcmndSong类

主方法是run

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    def run(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首歌:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
【程序员zhenguo】和网易云音乐今日为你(guozhennianhua@163.com)推荐的歌曲如下:
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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代码得到的。

最重量级的、最核心的应该是下面这行代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
self.cracker.get(data)

这里面都有源码,大家可以结合网易云前端的js代码,再学习RSAAES的加密技术,相信理解没问题。

cmd方法

click模块封装命令行接口是真的方便,只需要使用下面三个装饰器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@click.command()
@click.option('-u', help='用户名')
@click.option('-p', help='密码')
def cmd(u, p):
    client = NetRcmndSong(u, p)
    client.run()
    Timer(send_email_interval, cmd).start()

另外,应为我们想每天定时自动发送,所以使用Timer做定时任务。只需要下面一行代码,还是有点巧妙,cmd函数必须包括下面这行代码,同时Timer的参数也必须叫cmd

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Timer(send_email_interval, cmd()).start()

测试

下面应用上面的模块,实现定时、自动爬取并发送邮件。

song_email.txt文件中配置接收推荐音乐的邮箱,一行一个,可以给你女朋友、好朋友、家人的邮箱都写上。

然后在cmd或terminal窗口,只需输入下面一行代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python p3_email_song.py -u 你的网易云账户 -p 你的网易密码

这是我收到的邮件截图:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python3爬取网易云音乐歌单里的歌词(含源码)
一些注意事项: 1.看了Coursera上面的python教程,里面给了一个非常简单的示例,只传一个url就获取到响应报文。然而很多网站是不能只通过一个url就响应请求的,你还需要填写报文头部也就是header部分。 2.得到的报文里面中文字符都是bytes,十六进制的格式,需要用utf-8解码 3.巧用控制台找到页面内容真实的网址 其余的注意点我都写在注释里了,完整源码如下: ---- #爬取网易云音乐我的歌单里面所有歌曲的歌词 import json import requests import re
kalifa_lau
2018/04/28
1.8K0
爬取网易云音乐精彩评论
故事的小黄花 从出生那年就飘着 童年的荡秋千 随记忆一直晃到现在 Re So So Si Do Si La So La Si Si Si Si La Si La So 吹着前奏望着天空 我想起花瓣试着掉落 ……
猴哥yuri
2018/08/16
5560
Python爬虫实战:网易云音乐爬取
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
松鼠爱吃饼干
2020/11/19
4.4K0
Python爬虫实战:网易云音乐爬取
利用Python实现网易云音乐自动签到
标题:利用Python实现网易云音乐自动签到 作者:cuijianzhe 地址:https://solo.cjzshilong.cn/articles/2020/03/27/1585293177882.html
cuijianzhe
2022/06/14
1.3K0
利用Python实现网易云音乐自动签到
Scala爬虫实战:采集网易云音乐热门歌单数据
网易云音乐是一个备受欢迎的音乐平台,汇集了丰富的音乐资源和热门歌单。这些歌单涵盖了各种音乐风格和主题,为音乐爱好者提供了一个探索和分享音乐的平台。然而,有时我们可能需要从网易云音乐上获取歌单数据,以进行音乐推荐、分析等应用。本文将介绍如何使用Scala编写一个网络爬虫,来采集网易云音乐热门歌单的数据。我们将通过Scalaxx库来实现这一目标,并提供完整的代码示例。
小白学大数据
2023/11/09
4110
收藏这些API,获取网易云音乐数据超轻松
这应该是最最最常见的了,毕竟80%的网易云音乐的爬虫/数据分析文章都是关于评论数据~
朱小五
2019/11/26
18.9K0
网易云音乐评论爬取。
最后一页为10079,减500页应该是9579,然后你会发现9575页和9579页的数据是一模一样的。
挖数
2019/06/20
4.3K2
网易云音乐评论爬取。
网易云音乐直链
以下提供的方法简单、快捷并且直到现在依然可用。已经稳定几年了,网易云音乐外链用官方的就好。
NikoDos
2022/03/29
2.9K0
Python网易云音乐爬虫进阶篇
年前写过一篇爬网易云音乐评论的文章,爬不了多久又回被封,所以爬下来那么点根本做不了什么分析,后面就再改了下,加入了多线程,一次性爬一个歌手最热门50首歌曲的评论,算是进阶版了~
Awesome_Tang
2018/09/11
2.8K0
Python网易云音乐爬虫进阶篇
Hexo博客添加背景音乐和音乐歌单(举例网易云音乐)
Hexo博客添加背景音乐和音乐歌单(举例网易云音乐) 1、 打开网易云音乐首页,然后搜索你要添加的背景音乐 http://music.163.com/ 2、 搜索到歌曲点击生成外链播放器,进去下一个界面 3、 复制外链播放器的代码 打开yilia主题下的_partial文件夹下的left-col.ejs文件 复制文件内容到最下端 红线内的iframe框为复制的外链播放器代码,如图红线内,把代码放在div框 例如: <div style="position:absolut
AomanHao
2022/01/14
1.8K0
Hexo博客添加背景音乐和音乐歌单(举例网易云音乐)
免费下载网易云音乐内的音乐
分享艾索的单曲《晚安喵 (动画《罗小黑战记》插曲)》: http://music.163.com/song/28875230
KINDYEAR
2022/07/12
7K0
免费下载网易云音乐内的音乐
Python爬虫 | 如何获取网易云音乐评论
今天看了知乎上的一个问答,关于如何爬取网易云音乐的评论 关于如何爬网易云音乐的评论 我发现,第一位大佬写的方法,嗯,确实看不懂(虽然不妨碍白嫖),然后我自己试了试,params和encSecKey直接F12+ctrlC/V复制的😂 """ 不按照大佬写的加密方法,只能获取第一页的评论/(ㄒoㄒ)/~~ """ import requests from bs4 import BeautifulSoup import json import time def get_song_html(url):
Justlovesmile
2021/12/14
1.3K0
Python爬虫 | 如何获取网易云音乐评论
使用python3爬取网易云音乐的评论
用过很多播放器,之前一直是酷我,偶尔QQ。但是网易云音乐出来后毅然变成了他的忠实用户。精确推荐和乐评都很赞!安利了不少人入坑。前些日子网易云音乐将精选用户评论搬上了地铁,使网易云音乐又火了一把。因此就
听城
2018/04/27
9760
使用python3爬取网易云音乐的评论
如何爬取任意指定网易云歌曲
话不多说 ,转载一篇朋友的好文如下 ,助你爬天爬地爬空气 !今天来爬一爬指定的网易云音乐歌曲 。
小小詹同学
2019/11/12
1.6K0
如何爬取任意指定网易云歌曲
开源的网易云音乐API项目都是怎么实现的?
上一篇文章这个高颜值的开源第三方网易云音乐播放器你值得拥有介绍了一个开源的第三方网易云音乐播放器,这篇文章我们来详细了解一下其中使用到的网易云音乐api项目NeteaseCloudMusicApi的实现原理。
街角小林
2022/09/02
4K0
开源的网易云音乐API项目都是怎么实现的?
Python数据可视化 | 网易云音乐年度歌曲
网易云音乐2018年度听歌报告—遇见你,真好。 相信有不少人在上周,应该已经看过自己网易云音乐的年度报告了。 小F也是去凑凑热闹,瞅了一波自己的年度听歌报告。 那么你在云村又听了多少首歌,听到最多的歌词又是什么呢? 2018年你的年度歌手又是谁,哪些又是你最爱的歌呢? 不过相比去年,我的票圈并没有很多发自己年度报告的朋友。 不得不说,版权之争开始,网易云音乐似乎就在走下坡路。 很多喜欢的歌听不了,这应该是大家共同的痛点。 最大的印象就是周董的歌,在愚人节时下架了,原以为只是个玩笑,不想却是真的。 本次通过
龙哥
2019/04/25
1.8K1
Python数据可视化 | 网易云音乐年度歌曲
Python爬虫爬取网易云音乐全部评论
beautiful now.png 思路整理 访问网易云音乐单曲播放界面,我们可以看到当我们翻页的时候网址是没有变化的,这时候我们大致可以确定评论是通过post形式加载的; .
Awesome_Tang
2018/09/11
1.5K0
Python爬虫爬取网易云音乐全部评论
Python3爬虫抓取网易云音乐热评实战
前一段时间刚刚入门python爬虫,有大概半个月时间没有写python了,都快遗忘了。于是准备写个简单的爬虫练练手,我觉得网易云音乐最优特色的就是其精准的歌曲推荐和独具特色的用户评论,于是写了这个抓取
小小科
2018/05/02
1.7K0
Python3爬虫抓取网易云音乐热评实战
网易云音乐歌曲评论爬虫(附源码)
用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条.现在我就来分享一下如何爬取网易云音乐歌曲的全部评论,由于网易云音乐的评论都做了混淆加密处理,因此我们需要深入了解它的加密过程之后才能爬取到网易云音乐歌曲的全部评论.
Python中文社区
2018/10/25
2K0
网易云音乐歌曲评论爬虫(附源码)
Hexo获取网易云音乐外链
Hexo获取网易云音乐外链 网易云音乐MP3外链真实地址获取方法,可用于各种背景音乐、直链播放… 一、进入网易云音乐官网 打开网易云音乐,找到喜欢的歌,复制网址的ID, 例如: image.png 地
零式的天空
2022/03/26
1.7K0
Hexo获取网易云音乐外链
推荐阅读
相关推荐
python3爬取网易云音乐歌单里的歌词(含源码)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档