【Python3爬虫】网易云音乐歌单下载
2018-09-05 07:57:13来源:博客园 阅读 ()
一、目标:
下载网易云音乐热门歌单
二、用到的模块:
requests,multiprocessing,re。
三、步骤:
(1)页面分析:首先打开网易云音乐,选择热门歌单,可以看到以下歌单列表,然后打开开发者工具
因此我们需要请求的url就是https://music.163.com/discover/playlist,然后用requests.get()方法请求页面,对于返回的结果,用正则表达式进行解析,得到歌单名字和歌单id,解析的正则表达式如下:
res = requests.get(url, headers=headers)
data = re.findall('<a title="(.*?)" href="/playlist\?id=(\d+)" class="msk"></a>', res.text)
(2)得到歌单名字和歌单id后,构造歌单的url,然后模仿步骤(1)可以得到歌曲名字和歌曲id,解析的正则表达式如下:
re.findall(r'<a href="/song\?id=(\d+)">(.*?)</a>', res.text)
再得到歌曲id后,构造歌曲的url,然后用requests.get().content方法下载歌曲,歌曲的url构造方法如下:
"http://music.163.com/song/media/outer/url?id=%s" %(歌曲id)
(3)由于部分歌曲的名字并不能作为文件名保存下来,所以用到了try...except,对于不能保存为文件名的歌曲,我选择pass掉==
(4)因为要下载多个歌单,一个歌单里又有很多歌曲,所以用到了multiprocessing模块的Pool方法,提高程序运行的效率。
四、具体代码
因为下载所有歌单会需要很长时间,所以我们先下载前三个歌单试试==
1 import requests 2 import re 3 from multiprocessing import Pool 4 5 headers = { 6 'Referer': 'https://music.163.com/', 7 "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 " 8 "Safari/537.36" 9 } 10 11 12 def get_page(url): 13 res = requests.get(url, headers=headers) 14 data = re.findall('<a title="(.*?)" href="/playlist\?id=(\d+)" class="msk"></a>', res.text) 15 16 pool = Pool(processes=4) 17 pool.map(get_songs, data[:3]) 18 print("下载完毕!") 19 20 21 def get_songs(data): 22 playlist_url = "https://music.163.com/playlist?id=%s" % data[1] 23 res = requests.get(playlist_url, headers=headers) 24 for i in re.findall(r'<a href="/song\?id=(\d+)">(.*?)</a>', res.text): 25 download_url = "http://music.163.com/song/media/outer/url?id=%s" % i[0] 26 try: 27 with open('music/' + i[1]+'.mp3', 'wb') as f: 28 f.write(requests.get(download_url).content) 29 except FileNotFoundError: 30 pass 31 except OSError: 32 pass 33 34 35 if __name__ == '__main__': 36 hot_url = "https://music.163.com/discover/playlist/?order=hot" 37 get_page(hot_url)
五、运行结果
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:算法:归并排序
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python day2-爬虫实现github登录 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash