Python爬取下载网易云音乐

本文采用Python3.7,以pycharm为开发平台,实现了Python爬取网易云音乐并可以下载歌曲的功能。文章代码是参考网上的代码,根据自己的需要写的。在此说明几点作者本文遇到的问题。

1、User-Agent是根据自己浏览器的链接写的,谷歌浏览器打开开发者工具,找到网易云音乐,网络那一栏打开查看

2、url为自己的歌单链接,注意不是浏览器的网址链接,需要右键点击歌单,选择复制链接即可

根据自己下载的歌单歌曲,只需要改以上两点即可。

代码测试无问题。

from urllib import request
import requests
import re
from bs4 import BeautifulSoup
from pprint import pprint
import urllib, time

def get_content(url):
    headers = {
        'Host': 'music.163.com',
        'Referer': 'https://music.163.com/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36'#网页版浏览器下的链接,谷歌浏览器打开开发者工具获取此地址,其他浏览器打开web工具箱
    }
    r = requests.session()
    r = BeautifulSoup(r.get(url, headers=headers).content, "html.parser")
    return r

def save(r):
    music_dict = {}
    result = r.find('ul', {'class': 'f-hide'}).find_all('a')
    # print(result)
    for music in result:
        music_dict[music['href'].strip("/song?id=")] = music.text
    # for k, v in src_dict.items():
    # print(k, v)
    return music_dict

def download_song(song_id, music_dict):
    try:
        song_url = 'http://music.163.com/song/media/outer/url?id=%s.mp3' % song_id  # 该链接为浏览器在网页版缓存歌曲的下载链接
        # song_content=get_content(song_url)
        # print(song_content)
        # urllib.request.urlretrieve(song_url, r'C:\Users\Administrator\Desktop\%s.mp3'%music_dict[song_id])  # 下载文件
        # request.urlretrieve(song_url, r'C:\Users\Administrator\Desktop\%S.mp3'%music_dict[song_id])
        urllib.request.urlretrieve(song_url, 'E:\\test\\%s.mp3' % music_dict[song_id])
        time.sleep(0.9)
        print("下载完成!")
    except KeyError:
        print("请确认歌曲id是否正确或者歌曲是否收费。")

def write(music_dict):
    fp = open('music1.txt', 'a')
    for k, v in music_dict.items():
        fp.write(music_dict[k] + "\r\n" + "id:" + k + "\r\n")
    fp.close()

if __name__ == '__main__':
    url = 'https://music.163.com/playlist?id=2450495265'#歌单链接,右键点击歌单获取链接
    r = get_content(url)
    music_dict = save(r)
    pprint(music_dict)
    # print(musiclist[5]+"\r\n"+musiclist[6])
    write(music_dict)
    print("---------------------")
    while 1:
        song_id = input("(输入0退出)请输入想下载的歌曲id:")
        if song_id == '0':
            print("欢迎使用")
            break
        print("正在搜索歌曲信息并下载.")
        # musiclist=",".join(musiclist)
        download_song(song_id, music_dict)

运行结果如下图所示:

 Python爬取下载网易云音乐_第1张图片

你可能感兴趣的:(爬虫)