Python爬虫下载网易云音乐歌曲
使用爬虫的流程:
(1) 输入想要下载的歌曲歌名
(2) 在歌曲列表中找到要下载的歌曲
(3) 输入对应歌曲ID
(4) 成功下载到本地
打印出来的列表
最后那栏数字就是歌曲ID
#课程设计
#导入requests包
import requests
#创建存放歌曲的文件夹,若没有则创建
import os
if not os.path.exists('./musicLibs'):
os.mkdir('./musicLibs')
import re
from selenium import webdriver
#selenium无可视化界面设置
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
#进行UA伪装,防止网站发现这是一个爬虫程序不予访问
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'
}
vip = input('请输入歌名:')
url_1 = 'https://music.163.com/#/search/m/?s=' + vip + '&type=1'
#初始化浏览器对象
browser = webdriver.Chrome(executable_path='chromedriver.exe',options=chrome_options)
#访问该url
browser.get(url=url_1)
#由于网页中有iframe框架,进行切换。不转换无法检索嵌套里的网页
browser.switch_to.frame('g_iframe')
#抓取到页面信息
page_text = browser.execute_script("return document.documentElement.outerHTML")
#退出浏览器
browser.quit()
#利用正则re找到歌手,歌曲ID信息并打印出来
ex1 = '<a.*?id="([0-9]*?)"'
ex2 = '<b.*?title="(.*?)"><span class="s-fc7">'
ex3 = 'class="td w1"><div.*?class="text"><a.*?href=".*?">(.*?)</a></div></div>'
id_list = re.findall(ex1,page_text,re.M)[::2]
song_list = re.findall(ex2,page_text,re.M)
singer_list = re.findall(ex3,page_text,re.M)
li = list(zip(song_list,singer_list,id_list))
for i in range(len(li)):
print(str(i+1) + '.' + str(li[i]),end='\n')
#指定url
ID=input("请输入歌曲ID:")
url_2 = 'http://music.163.com/song/media/outer/url?id=' + ID + '.mp3'
#调用requests.get方法对url进行访问
audio_content = requests.get(url=url_2,headers=headers).content
# 存入本地
name='./musicLibs'+'/'+vip+'.mp3'
with open(name,'wb') as f :
f.write(audio_content)
print("拿下!")