python爬虫爬取网易云音乐

  • 1.实现功能
  • 2.具体实现
    • 1.搜索部分
    • 2.下载歌曲
      • 1.再次获取信息
      • 2.下载
  • 3.结语

Github完整代码获取:https://github.com/Lian-Zekun/python_spilder

1.实现功能

可以分别对歌名,歌手,歌单进行搜索,搜索歌曲和歌单会列出页面第一页所显示的所有歌曲或歌单及其id以供选择下载,搜索歌手会下载网易云音乐列表显示第一位歌手的所有热门歌曲。

2.具体实现

1.搜索部分

网易云音乐搜索界面为:https://music.163.com/#/search ,经过测试发现
对单曲搜索时链接为:https://music.163.com/#/search/m/?s={}&type=1 ,
对歌手搜索时链接为:https://music.163.com/#/search/m/?s={}&type=100 ,
对歌单搜索时链接为:https://music.163.com/#/search/m/?s={}&type=1000
其中大括号中内容为要搜索内容的名称,例如搜索年少有为,网址为:https://music.163.com/#/search/m/?s=年少有为&type=1 搜索后即出现此页面
通过检查元素发现在网页的这一部分存在歌曲链接和名字
同理,在搜索歌单和歌手时检查元素也会发现类似的情况

虽然分析网易云音乐接口可能会更快的得到这些信息,网上也有很多这样的文章,但菜鸡的我现在对js实在是不懂,选择selenium + chrome 获取js渲染后的页面源码,并通过xpath提取想要的信息(虽然速度是慢了点,但它简单啊)
python代码:

本文导入的所有模块及对爬虫的伪装

import requests
from urllib import request
from lxml import etree
from selenium import webdriver
import platform
import os
import timeheaders = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36','Host': 'music.163.com','Referer': 'https://music.163.com/'}

通过selenium获得页面源码

def selenium_get_html(url):"""通过selenium获得页面源码"""# 无界面启动chromeoptions = webdriver.ChromeOptions()options.add_argument('User-Agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36"')options.add_argument('--headless')driver = webdriver.Chrome(chrome_options=options)driver.get(url)# 歌曲信息在frame框架内,进入frame框架得到源码driver.switch_to.frame('contentFrame')return driver.page_source

得到具体信息

# 提取歌曲名称,演唱者姓名,和歌曲id以供选择
def search_input_song(url):"""获取歌曲名字和id"""html = selenium_get_html(url)root = etree.HTML(html)id = root.xpath('//div[@class="srchsongst"]//div[@class="td w0"]//div[@class="text"]/a[1]/@href')artist = root.xpath('//div[@class="srchsongst"]//div[@class="td w1"]//div[@class="text"]/a[1]/text()')name = root.xpath('//div[@class="srchsongst"]//div[@class="td w0"]//div[@class="text"]//b/@title')id = [i.strip('/song?id==') for i in id]return zip(name, artist, id)# 歌手默认选择第一位,所以仅得到第一位歌手的id
def search_input_artist(url):"""获取歌手id"""html = selenium_get_html(url)root = etree.HTML(html)id = root.xpath('//div[@class="u-cover u-cover-5"]/a[1]/@href')return id[0].strip('/artist?id==')# 提取歌单名称,和歌单id以供选择
def search_input_playlist(url):"""获取歌单名字和id"""html = selenium_get_html(url)root = etree.HTML(html)id = root.xpath('//div[@class="u-cover u-cover-3"]/a/@href')name = root.xpath('//div[@class="u-cover u-cover-3"]//span/@title')id = [i.strip('/playlist?id==') for i in id]return zip(name, id)

2.下载歌曲

1.再次获取信息

得到id信息后,就可以在交互界面提示用户选择id下载。对于单曲来说获取用户选择的id后与对应地址拼接即可进行下载,而对于歌单和歌手因为每一个单位中都存在多首歌曲,第一次仅仅获取了歌手或歌单的id,需要二次分析。我们通过刚刚获取的链接可以发现
单曲的地址为:https://music.163.com/song?id={}
歌手的地址为:https://music.163.com/artist?id={}
歌单的地址为:https://music.163.com/playlist?id={}  ({}内为id)
这回我们进入歌手的页面,检查元素查询歌曲信息,但这次有一个小坑,因为获取的页面中真正的歌曲信息并不在我们检查时看到所在的位置,通过查看框架源代码发现真正的信息在这,歌单页面也是一样。
python代码:

# url为歌单或歌手的地址
def get_url(url):"""从歌单中获取歌曲链接"""req = requests.get(url, headers=headers)root = etree.HTML(req.text)items = root.xpath('//ul[@class="f-hide"]//a')print(items)return items

2.下载

通过之前的爬取,我们已经获得了歌曲的id及名称,可以进行下载了
网易云音乐有一个下载外链:https://music.163.com/song/media/outer/url?id={}.mp3
大括号中内容为所下载音乐在网易云的id,所以通过该外链和相应id即可下载网易云音乐。
将id和外链进行拼接后发送get请求,获取get请求所得到页面请求头中’Location’内容,这里面存储的是真正的音乐地址,使用request模块的urlretrieve方法下载。
python代码:

# song_id为歌曲id, song_name为歌曲名称
def download_song(song_id, song_name):"""通过外链下载歌曲"""url = 'https://music.163.com/song/media/outer/url?id={}.mp3'.format(song_id)# get请求设置禁止网页跳转,即allow_redirects=Falsereq = requests.get(url, headers=headers, allow_redirects=False)song_url = req.headers['Location']try:# path在主函数中输入request.urlretrieve(song_url, path + "/" + song_name + ".mp3")print("{}--下载完成".format(song_name))except:print("{}--下载失败".format(song_name))

3.结语

网易云音乐下载就这么草率的完成了,还有一些瑕疵,因为在写的时候并没有完全构思好,想到什么就加点什么,但绝对可以正常的运行。


本博客文章仅供博主学习交流,博主才疏学浅,语言表达能力有限,对知识的理解、编写代码能力都有很多不足,希望各路大神多多包涵,多加指点。

python爬虫---网易云音乐下载相关推荐

  1. python网络爬虫网易云音乐下载_python网络爬虫爬取网易云音乐

    #爬取网易云音乐 url="https://music.163.com/discover/toplist" #歌单连接地址 url2 = 'http://music.163.com ...

  2. Python爬虫-网易云音乐自动化爬取下载

    文章目录 前言 爬取分析 完整代码 爬取效果 拓展代码 前言 上一篇简述了如何使用 Python 爬虫自动爬取CSDN博客排行榜数据并自动整理成Excel文件,这篇文章来看看如何自动化爬取网易云音乐的 ...

  3. python爬虫网易云音乐评论最多的歌_Python网易云音乐评论爬虫,歌曲的全部评论...

    用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条.现在我就来分享一下如何爬取网易云音乐歌曲的全部评论,由于网易云音乐的评论都做了混淆加密处 ...

  4. python爬虫网易云音乐最热评论并分析_Python3实现爬虫抓取网易云音乐的热门评论分析(图)...

    这篇文章主要给大家介绍了关于Python3实战之爬虫抓取网易云音乐热评的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧. ...

  5. python爬虫网易云音乐评论最多的歌_Python3实战之爬虫抓取网易云音乐的热门评论...

    前言 之前刚刚入门python爬虫,有大概半个月时间没有写python了,都快遗忘了.于是准备写个简单的爬虫练练手,我觉得网易云音乐最优特色的就是其精准的歌曲推荐和独具特色的用户评论,于是写了这个抓取 ...

  6. python爬虫网易云音乐最热评论并分析_网易云音乐热门评论api分析

    网上有现成的例子我就扒过来了!! title: 网易云评论api分析 date: 2018-12-24 20:54:46 tags: [python] 网易云音乐是个好地方,里面各个都是人才,特别是评 ...

  7. python爬虫网易云音乐评论再分析_爬取网易云音乐的评论后,竟有这种发现!

    原标题:爬取网易云音乐的评论后,竟有这种发现! 作者 | 志颖 责编 | 胡巍巍 用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条. 现在 ...

  8. python爬虫----网易云音乐歌曲爬取并存入Excel

    因为数据要存入Excel中,所以首要目标是找个办法将数据能够存入excel中 经过在网上一番搜索后,发现用python里的xlwt模块可以比较容易的解决 一.准备工作 1.安装xlwt模块: 可以看h ...

  9. python爬虫网易云音乐许巍的漫步制作热门点赞柱状图云词

    喜欢许巍的一些歌曲,真实而洒脱,那就爬虫玩会.获取数据用到了requests,绘制柱状图时用到了pyecharts,制作云词用到了wordcloud. 打开网易云音乐,找到许巍的漫步,按F12,让后再 ...

最新文章

  1. 【编程语言】Java基础进阶——面向对象部分
  2. 软件学院学习体验之三
  3. git checkout之一 HEAD基本和detached 状态
  4. java的System.getProperty()方法可以获取的值
  5. idea中.ignore插件的使用
  6. 老李分享:持续集成学好jenkins之解答疑问
  7. 如何配置VS使得可以通过域名或IP访问
  8. STM32HAL库使用RX8025
  9. 值得收藏的网站----安全
  10. php 图形库 锯齿,PHP imageantialias - 是否使用抗锯齿(antialias)功能
  11. Flutter高仿微信-第26篇-新的朋友
  12. Python菜鸟爬虫技巧
  13. 记账软件 如何查看以往记录的所有收支明细
  14. KStar ----BPM应用框架,K2 的新星
  15. html5游戏视频UI框架,推荐几个精致的web UI框架
  16. mysql备份工具xtr_xtrbackup备份mysql
  17. 天体运行轨迹_太阳系内天体的运行轨迹是什么?开普勒为什么这么伟大?
  18. ios开发——AirPlay的琢磨经历
  19. 浏览器访问虚拟机elasticsearch失败
  20. 近期学到的css样式

热门文章

  1. 交易员学堂第五课 海龟交易法则的术与道
  2. python numpy官网_官网Numpy教程
  3. 期权分仓系统是什么?期权分仓软件的原理又是什么?
  4. 【创建者模式】工厂模式
  5. 网络领域知产保护难题简析
  6. anaconda安装-超详细版
  7. pascal(收藏)
  8. 09月02日星期一 恒指/美原油/美黄金 走势分析
  9. DOS经典软件,落下帷幕,新型国产平台,蓬勃发展
  10. zw字王《中华大字库》2018版升级项目正式启动