乐趣区

关于python:Python网易云音乐自动化下载

应用以下脚本打印歌单信息:

encoding=utf8

import requests

from bs4 import BeautifulSoup

import urllib.request

headers = {

‘Referer’:’http://music.163.com/’,

‘Host’:’music.163.com’,

‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36’,

‘Accept’: ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8’,

}

play_url = ‘http://music.163.com/playlist…’

s = requests.session()

response=s.get(play_url,headers = headers).content

s = BeautifulSoup(response,’lxml’)

main = s.find(‘ul’,{‘class’:’f-hide’})

for music in main.find_all(‘a’):

print(‘{} : {}’.format(music.text, music[‘href’]))

残缺代码

encoding=utf8

import requests

from bs4 import BeautifulSoup

import urllib.request

headers = {

‘Referer’:’http://music.163.com/’,

‘Host’:’music.163.com’,

‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36’,

‘Accept’: ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8’,

}

# 歌单的 url 地址

play_url = ‘http://music.163.com/playlist…’

# 获取页面内容

s = requests.session()

response=s.get(play_url,headers = headers).content

应用 bs4 匹配出对应的歌曲名称和地址

s = BeautifulSoup(response,’lxml’)

main = s.find(‘ul’,{‘class’:’f-hide’})

lists=[]

for music in main.find_all(‘a’):

list=[]

# print(‘{} : {}’.format(music.text, music[‘href’]))

musicUrl=’http://music.163.com/song/med…’+music[‘href’][5:]+’.mp3′

musicName=music.text

# 单首歌曲的名字和地址放在 list 列表中

list.append(musicName)

list.append(musicUrl)

# 全部歌曲信息放在 lists 列表中

lists.append(list)

print(lists)

# 下载列表中的全部歌曲,并以歌曲名命名下载后的文件,文件地位为以后文件夹
外汇 MT4 教程 https://www.kaifx.cn/mt4.html

for i in lists:

url=i[1]

name=i[0]

try:

print(‘ 正在下载 ’,name)

urllib.request.urlretrieve(url,’./music/%s.mp3’% name)

print(‘ 下载胜利 ’)

except:

print(‘ 下载失败 ’)

拓展代码

附上一位大佬另外的一种实现爬取网易云歌单音乐的代码:

导入库

import requests

from fake_useragent import UserAgent

from lxml import etree

import re

网易云官网 搜寻薛之谦跳转网页后 查看 network doc 找到该网页的

Request URL: https://music.163.com/artist?…

1、确定 url 地址(薛之谦的歌单)

url = ‘https://music.163.com/artist?…’

网易云音乐的外链地址

base_url = ‘https://link.hhtjim.com/163/’

2、申请

headers= {

“User-Agent”: UserAgent().chrome

}

result = requests.get(url, headers=headers).text

# print(result)

3、删选数据 拿到列表中的歌曲 id 为一个字典 外面有每首个的 id

dom =etree.HTML(result)

# 通过审查元素发现每首歌在 中通过 xpath 剖析得获取所有歌曲 id 的 xpath 语句为 ’//a[contains(@href,”/song?”)]/@href’

ids = dom.xpath(‘//ul[@class=”f-hide”]//li/a/@href’)

将数据切片只须要 id 数值

正则表达式

for i in range(len(ids)):

ids[i] = re.sub(‘\D’, ”, ids[i])

print(ids)

for i in range(len(ids)):

每一首歌的地址

M_url = f’https://music.163.com/song?id={ids[i]}’

response = requests.get(M_url, headers=headers)

html = etree.HTML(response.text)

music_info = html.xpath(‘//title/text()’)

print(music_info) #[‘ 我如同在哪见过你(电影《精灵王座》主题曲) – 薛之谦 – 单曲 – 网易云音乐 ’]

music_name = music_info[0].split(‘-‘)[0]

singer = music_info[0].split(‘-‘)[1]

print(music_name, singer) #我如同在哪见过你(电影《精灵王座》主题曲) 薛之谦

获取歌源

music_url = base_url + str(ids[i]) + ‘.mp3’

print(music_url) #打印出每首歌的外链网址

music = requests.get(music_url).content

4、保留

with open(‘./music/’+music_name+’.mp3′, ‘wb’) as file:

file.write(music)

print(“ 正在下载第 ”+str(i+1)+” 首: “+music_name+singer)

退出移动版