一.准备工作

1.使用python3.6和pycharm

2.使用的模块 tkinter 、requests 、beautifulSoup、getpass、os

3.网易云的榜单页面地址 https://music.163.com/playlist?id=2302000737

4.界面如下图

二.分析

1.打开网易云音乐的网址(谷歌浏览器),检查元素,会发现每首歌的都是一个a标签,如下图,这个时候,

看到这个统一的格式我们就可以,来过滤掉不必要的标签,在获取网页源代码的时候我们发现有这么一段代码

<ul class="f-hide">
<li><a href="/song?id=135377">依然在一起</a></li>
<li><a href="/song?id=29802294">我要的飞翔(哼唱版)</a></li>
<li><a href="/song?id=449626902">不爱你&middot;非也</a></li>
<li><a href="/song?id=29429422">给我深爱的你</a></li>
<li><a href="/song?id=489302317">雀跃</a></li>
<li><a href="/song?id=862491309">怎么说爱你</a></li>
<li><a href="/song?id=562675516">扎心</a></li>
<li><a href="/song?id=41500539">那是爱情</a></li>
<li><a href="/song?id=560863505">可岁月,你到底要怎样?</a></li>
<li><a href="/song?id=435288250">你会为我留下吗</a></li>
<li><a href="/song?id=556479928">关于二次元的歌</a></li>
<li><a href="/song?id=562594319">如果会是你</a></li>
<li><a href="/song?id=72731">那一次</a></li>
<li><a href="/song?id=490595991">星期三或礼拜三</a></li>
<li><a href="/song?id=507014930">赧(nǎn)然的贼</a></li>
<li><a href="/song?id=489506275">非酋</a></li>
<li><a href="/song?id=862129612">王牌冤家</a></li>
<li><a href="/song?id=445505374">心仪</a></li>
<li><a href="/song?id=36117834">南瓜饼子店</a></li>
<li><a href="/song?id=82203">为你写的歌</a></li>
<li><a href="/song?id=431551064">写给我第一个喜欢的女孩的歌</a></li>
<li><a href="/song?id=516321040">很可爱的歌&nbsp;(Remix&nbsp;featuring&nbsp;梁晓雪)</a></li>
<li><a href="/song?id=472646451">即使全世界都嫌弃这首歌肉麻又俗气我还是要把它献给你</a></li>
<li><a href="/song?id=254164">恋着多喜欢</a></li>
<li><a href="/song?id=466370500">不二臣</a></li>
<li><a href="/song?id=161420">偏偏爱上你</a></li>
<li><a href="/song?id=223638">多么想念你</a></li>
<li><a href="/song?id=31546892">恋爱中</a></li>
<li><a href="/song?id=521780143">繁华之处</a></li>
<li><a href="/song?id=412951744">无画</a></li>
<li><a href="/song?id=504624714">青柠</a></li>
<li><a href="/song?id=531295576">最美的期待</a></li>
<li><a href="/song?id=432506809">致姗姗来迟的你 </a></li>
<li><a href="/song?id=85571">我们俩</a></li>
<li><a href="/song?id=26349280">为了遇见你</a></li>
<li><a href="/song?id=389246">爱人</a></li>
<li><a href="/song?id=28427655">喜欢你的无数个理由</a></li>
<li><a href="/song?id=461899833">鸽子</a></li>
<li><a href="/song?id=562592191">如果写不出好的和弦就该在洒满阳光的钢琴前一起吃布丁</a></li>
<li><a href="/song?id=436346545">深蓝色的气球 </a></li>
<li><a href="/song?id=458553516">献给海子的歌</a></li>
<li><a href="/song?id=417596830">美好事物</a></li>
<li><a href="/song?id=144137">水晶</a></li>
<li><a href="/song?id=108445">表达爱</a></li>
<li><a href="/song?id=386181">让我照顾你</a></li>
<li><a href="/song?id=63570">两只恋人</a></li>
<li><a href="/song?id=139463">我们的小世界</a></li>
<li><a href="/song?id=440353151">猫眼里的半途</a></li>
<li><a href="/song?id=109125">夏天</a></li>
<li><a href="/song?id=5356944">爱很美</a></li>
<li><a href="/song?id=536669917">情感导师【Prod by L.H.W】</a></li>
<li><a href="/song?id=473571305">傲娇与偏见 (对唱版)</a></li>
<li><a href="/song?id=552304135">如果最后还是你♡</a></li>
<li><a href="/song?id=25648051">最佳听众</a></li>
<li><a href="/song?id=531786614">亲爱的</a></li>
<li><a href="/song?id=28936085">惟爱你</a></li>
<li><a href="/song?id=132975">爱的就是你</a></li>
<li><a href="/song?id=25638152">怎么爱你都不够</a></li>
<li><a href="/song?id=29482339">给我你的爱(demo)</a></li>
<li><a href="/song?id=435288313">天天情人节</a></li>
<li><a href="/song?id=26550475">一定有个你</a></li>
<li><a href="/song?id=297485">陪我到以后</a></li>
<li><a href="/song?id=82486">春风吹</a></li>
<li><a href="/song?id=425065716">好想你</a></li>
<li><a href="/song?id=215884">确定一定以及肯定</a></li>
<li><a href="/song?id=459858574">对你爱不完</a></li>
<li><a href="/song?id=25642952">我们的歌</a></li>
<li><a href="/song?id=327079">一想到你呀</a></li>
<li><a href="/song?id=233920">天生一对</a></li>
<li><a href="/song?id=421563713">桥豆麻袋</a></li>
<li><a href="/song?id=520464278">去海边</a></li>
<li><a href="/song?id=479219330">我一定会爱上你</a></li>
<li><a href="/song?id=357312">流川枫与苍井空</a></li>
<li><a href="/song?id=22852057">爱你</a></li>
<li><a href="/song?id=108269">记得</a></li>
<li><a href="/song?id=4875075">遇到</a></li>
<li><a href="/song?id=326719">喜欢</a></li>
<li><a href="/song?id=64706">给你</a></li>
<li><a href="/song?id=29805931">木头</a></li>
<li><a href="/song?id=306680">我们终究会牵手旅行</a></li>
<li><a href="/song?id=34014289">完美男友</a></li>
<li><a href="/song?id=375043">酸甜</a></li>
<li><a href="/song?id=394653">坐在巷口的那对男女</a></li>
<li><a href="/song?id=327736">梁山伯与茱丽叶</a></li>
<li><a href="/song?id=368942">橘子汽水</a></li>
<li><a href="/song?id=449818741">光年之外</a></li>
<li><a href="/song?id=515383689">我在十点差三分的时候开始想你</a></li>
<li><a href="/song?id=277352">那么爱你为什么</a></li>
<li><a href="/song?id=28739376">不愿错过你</a></li>
<li><a href="/song?id=436698550">幸福的终点</a></li>
<li><a href="/song?id=469699266">最美情侣</a></li>
<li><a href="/song?id=423703512">初心共老</a></li>
</ul>

我们就把这些数据拿过来 在处理一次

三.准备界面

1.使用的tkinter是python提供的图形开发界面的库,几个常用的界面开发库有Tkinter、w'xPython、Jython。具体用法不在赘述,详情请移步--Tkinter界面开发

导入tkinter模块,并初始化对应的输入框和按钮,

from tkinter import *

# 创建窗口
root = Tk()
# 设置标题
root.title('网易云音乐')
# 设置窗口大小,‘x’符号 区分宽高
# root.geometry('500x400')
# 设置出现的位置,用‘+’号来代替,这个是相对屏幕左上角的位置
# root.geometry('+500+200')
# 两句合成一句是执行
root.geometry('560x300+500+200') # 标签控件
label = Label(root,text='请输入要下载的歌单URL:',font=('华文行楷',12))
# 添加定位才能显示
# 网格式布局 以行列为准显示
label.grid(row=0,column=0) # 输入框
entry = Entry(root,font=('微软雅黑',25),width=25)
entry.grid(row=0,column=1) text = Listbox(root,font=('微软雅黑',15),width=55,height=10)
# 组件跨越的列数
text.grid(row=1,columnspan=2) # 添加下载按钮和退出按钮,command设置按钮的点击事件
download = Button(root,text='开始下载',font=('微软雅黑',15),width=10,height=2,command=download_song)
# 添加最后的对齐方式
# sticky对齐方式 N S W E
download.grid(row=2,column=0,sticky=W) exit = Button(root,text='退出',font=('微软雅黑',15),width=10,height=2,command=root.quit)
# 添加最后的对齐方式
# sticky对齐方式 N S W E
exit.grid(row=2,column=1,sticky=E) # 显示窗口,消息循环
root.mainloop()

2.最初的界面已经制作好了,开始网络请求的模块,点击下载按钮,请求网络信息

# 添加user-agent
header = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
} # 爬取网页数据
def download_song():
#每次开始重新下载的时候删除listBox里面的所有的内容
text.delete(0,END)
# 获取用户输入的URL地址
url = entry.get()
# url = "https://music.163.com/playlist?id=2302000737" #下载地址
song_url = "http://music.163.com/song/media/outer/url?id={}"
#request请求类库,直接获取的html源代码
result = requests.get(url,headers=header)
# 对获取的html源代码进行处理,beautifulSoup对源码的处理
html = BeautifulSoup(result.text,'html.parser')
print(html)
# 过滤元素,查找ul标签,class为f-hide,再去查找里面的所有a标签,返回的是一个数组
musics = html.find('ul',{'class','f-hide'}).find_all('a')
print(musics)
music_dict = {}
# 每个榜单数量太大,这里只下载5首歌曲
for music in musics[:5]:
#获取a标签对应的href,并过滤掉前面的song?id=,只留下歌曲的id
music_id = music.get('href').strip('/song?id=')
#获取歌曲的名称
music_name = music.text
#组装为一个字典
music_dict[music_id] = music_name # 遍历字典,下载每首歌曲,并保存到本地
for k, v in music_dict.items():
download_url = song_url.format(k)
saveMusic(download_url,v)

3.歌曲保存,引入第三方  import getpass,获取当前的用户名

def saveMusic(download_url,music_name):
# 拿到下载路径和文件保存路径
#在listbox中输出正在下载的文件和状态
text.insert(END,'正在下载>>>>:' + music_name)
# 拼接下载路径地址
file_path = '/Users/'+getpass.getuser()+'/Downloads/musics'
if not os.path.exists(file_path):
os.makedirs(file_path)
# 保存的文件名
save_path = file_path + '/%s.mp3' % music_name
print(save_path) # 开始下载数据
result = requests.get(download_url, headers=header)
with open(save_path, 'wb') as w_obj:
w_obj.write(result.content)
text.insert(END,'下载完成:>>>>' + music_name)
# 跳转到指定的item索引位置
text.see(text.size()-1)

4.自此,所有的步骤都已经完成,可以复制榜单地址直接点击下载了

python-网易云简单爬虫的更多相关文章

  1. 关于网易云音乐爬虫的api接口?

    抓包能力有限,分析了一下网易云音乐的一些api接口,但是关于它很多post请求都是加了密,没有弄太明白.之前在知乎看到过一个豆瓣工程师写的教程,但是被投诉删掉了,请问有网友fork了的吗?因为我觉得他 ...

  2. 爬虫综合大作业——网易云音乐爬虫 & 数据可视化分析

    作业要求来自于https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3075 爬虫综合大作业 选择一个热点或者你感兴趣的主题. 选择爬取的对象 ...

  3. 【Python3爬虫】网易云音乐爬虫

    此次的目标是爬取网易云音乐上指定歌曲所有评论并生成词云 具体步骤: 一:实现JS加密 找到这个ajax接口没什么难度,问题在于传递的数据,是通过js加密得到的,因此需要查看js代码. 通过断掉调试可以 ...

  4. 【Python项目】简单爬虫批量获取资源网站的下载链接

    简单爬虫批量获取资源网站的下载链接 项目链接:https://github.com/RealIvyWong/GotDownloadURL 1 由来 自己在收集剧集资源的时候,这些网站的下载链接还要手动 ...

  5. 【Python】:简单爬虫作业

    使用Python编写的图片爬虫作业: #coding=utf-8 import urllib import re def getPage(url): #urllib.urlopen(url[, dat ...

  6. [python]做一个简单爬虫

    为什么选择python,它强大的库可以让你专注在爬虫这一件事上而不是更底层的更繁杂的事 爬虫说简单很简单,说麻烦也很麻烦,完全取决于你的需求是什么以及你爬的网站所决定的,遇到的第一个简单的例子是pas ...

  7. 【Python数据分析】简单爬虫 爬取知乎神回复

    看知乎的时候发现了一个 “如何正确地吐槽” 收藏夹,里面的一些神回复实在很搞笑,但是一页一页地看又有点麻烦,而且每次都要打开网页,于是想如果全部爬下来到一个文件里面,是不是看起来很爽,并且随时可以看到 ...

  8. 第一次用python 写的简单爬虫 记录在自己的博客

    #python.py from bs4 import BeautifulSoup import urllib.request from MySqlite import MySqlite global ...

  9. python bs4 + requests4 简单爬虫

    参考链接: bs4和requests的使用:https://www.cnblogs.com/baojinjin/p/6819389.html 安装pip:https://blog.csdn.net/z ...

随机推荐

  1. IE8 如何 不显示 选项 卡,直接在任务显示 各个页面?

    IE8  如何 不显示 选项 卡,直接在任务显示 各个页面? 在  工具->Internet 选项(o) ->常规--选项卡-设置->把第一个勾去掉  “启用选项卡浏览(需要重新启动 ...

  2. 『Linux基础 - 4 』linux常用命令(1)

    这篇笔记包含以下知识点: 几个概念的理解:Linux命令,控制台,终端, 终端提示符 对文件目录的操作的相关命令: 切换目录,列出目录下的文件等 对文件的操作的相关命令: 创建,删除,复制,修改,移动 ...

  3. consonant_摩擦音

    consonant_摩擦音_[t∫].[dʒ].[tr].[dr].[ts].[dz] 破擦音:即有爆破音又有摩擦音. [t∫]:噘嘴,舌尖抵住上牙龈,舌头下切,用一瞬间的气流发出声音,不震动. ch ...

  4. Ruby中类的进阶(继承,private, public, protect)

    类中的public,protect,private public method class Point def test end end 这样定义的test方法就是一个public方法可以在类内外使用 ...

  5. mac安装ruby-oci8

    1.安装xcode 2.从oracle官网下载以下安装包 instantclient-basic-macos.x64-12.1.0.2.0.zip instantclient-sdk-macos.x6 ...

  6. 关于具有I2C总线的TEA6320的使用

    现在先了解一下TEA6320,TEA6320是一个I2C总线控制音响应用的立体声放大器,,它的I2C协议和音量控制如下: 它的主要代码: void delay1ms(unsigned int Dela ...

  7. 利用.NET Code Contracts实现运行时验证

    .NET的Contract类库是Declarative Programming实践的一部分,可以对日常编程带来很多好处: 提高代码可读性,使用者一看Require, Ensure就知道这方法接受什么输 ...

  8. ORB-SLAM(十)LoopClosing Sim3求解

    主要参考这篇论文 Horn B K P. Closed-form solution of absolute orientation using unit quaternions[J]. JOSA A, ...

  9. node-redis使用记录

    redis的高速存取性能让人印象深刻,虽然是分布式存储,但相比本地内存,性能毫不逊色. 之所以能做到这点,是由于redis的“单线程,多路复用IO”,同一时刻只有一个操作在进行. 而且多次建立从red ...

  10. 「日常训练」 Counting Cliques(HDU-5952)

    题意与分析 题源:2016ACM/ICPC沈阳现场赛. 这题让我知道了什么是团,不过最恶心的还是这题的数据了,卡了无数次- - 解决方法是维护一个G数组,不能去遍历邻接矩阵.至少我改了这么一个地方就过 ...