美文网首页
几行代码实现Python爬取下载网易云音乐歌单

几行代码实现Python爬取下载网易云音乐歌单

作者: 老汤哥不老 | 来源:发表于2018-06-08 10:02 被阅读56次

本文基于Python2.7
忽然想把歌曲库更新一下,就去点网易云歌单里的下载,发现自己的会员到期了,很多歌曲不能下载,这个我不能忍,于是乎就发挥了程序员的本质,用爬虫去爬取歌单歌曲,https://music.163.com/playlist?id=22155050(不需要userid) 这个是我自己的歌单(欢迎大家关注我的网易云)
没有会员效果如下,点击下载需要开通会员

image.png

找到自己歌单的链接,复制到浏览器中,记得复制的时候,只要id,不需要userid,https://music.163.com/playlist?id=22155050(不需要userid)

image.png

然后,将链接放到postman中请求,查看一下我需要去抓的内容,其实用浏览器中的审查元素也是类似的,但是我一般都是两个对比的,审查元素中可能有些元素不准确,所以我一般结合起来看postman,这个页面很简单,能够直接找到需要的歌曲id,和歌曲名称,有了id之后就可以用网易云的歌曲Outer链接去下载,因为代码比较简单,直接贴上来了

# -*- coding: UTF-8 -*-
import requests
import sys
from bs4 import BeautifulSoup
import  urllib

headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
            }


def get_html(url):
    try:
        html = requests.get(url,headers=headers,timeout=30)
        html.encoding = 'utf-8'
        html.raise_for_status()
        return html.text
    except BaseException as f:
        print('获取HTML文本失败,错误信息为',f)

def get_url_down(html):

    try:
        soup = BeautifulSoup(html,'html.parser')
        urls = soup.find_all('a')
        for url in urls:
            if '/song?' in str(url.get("href")):
                try:
                    s = str(url.string).decode('utf-8').encode('gbk')
                    split = str(url.get("href")).split('=')
                    url ='http://music.163.com/song/media/outer/url?id={}.mp3'.format(split[1])
                    print s
                    print url
                    path = 'F:\NetEase\\' + s+ '.mp3'
                    urllib.urlretrieve(str(url),str(path))
                except Exception as f:
                    print('获取URL失败,错误信息为', f)
                    continue

    except BaseException as f:
        print('获取URL失败,错误信息为',f)

def main():
    html = get_html('https://music.163.com/playlist?id=22155050')
    get_url_down(html)



if __name__ == '__main__':
    reload(sys)  # 2
    sys.setdefaultencoding('utf-8')
    main()

其中用到的一些方法没有深究,只要实现功能就可以了,反正下载就可以了,李姐万岁!

效果如下:


image.png

有几点说明,1.可能有些歌曲下载不成功,这个原因没有深究;2.已经下架的歌曲,没有Outer链接了,无法下载;3,能够下载大部分歌曲(这样我已经很满足了)
歌曲下载好了之后,添加到网易云音乐的本地音乐,然后匹配音乐,发现之前很多无法下载的歌曲已经显示已下载了

相关文章

网友评论

      本文标题:几行代码实现Python爬取下载网易云音乐歌单

      本文链接:https://www.haomeiwen.com/subject/bujosftx.html