前言
之前写过如何从网易云网页下载歌曲,但是感觉太麻烦了,于是就想着写一个脚本来完成搜索加下载的功能。
开发环境及所需的库
开发环境
Windows 10
python 3.7
所需的库
requests
re
time
selenium
prettytable
思想
搜索
使用爬虫,访问https://music.163.com/#/search/m/?s=音乐名&type=1,来的到歌曲列表、歌手以及歌曲ID(下载音乐时需要)
下载
网易云网页播放音乐时会调用链接http://music.163.com/song/media/outer/url?id=音乐ID.mp3,来获取音乐,所以我们才需要音乐ID
保存
直接将爬取到的mp3保存到文件就行了
实现
调用库
from selenium.webdriver.firefox.options import Options
import requests
import re
from selenium import webdriver
from time import sleep
from prettytable import PrettyTable
搜索
本来我想用requests库来实现歌曲列表的爬取,但是,由于页面中嵌套着一个iframe,导致无法得到(也可能是我太菜了)。所以使用selenium来实现。
我使用的是火狐,先配置selenium,不显示gui
# 设置options
firefox_options = Options()
firefox_options.add_argument("--headless")
firefox_options.add_argument("--disable-gpu")
搜索音乐的函数:
# 搜索音乐
def SearchMusic(name):
url_search = "https://music.163.com/#/search/m/?s="+name+"&type=1"
# 初始化
browser = webdriver.Firefox(executable_path="geckodriver.exe", options=firefox_options)
# 歌曲搜索
browser.get(url=url_search)
# 切换iframe
browser.switch_to.frame("g_iframe")
sleep(0.5)
# 页面信息
page_text = browser.execute_script("return document.documentElement.outerHTML")
# 退出
browser.quit()
# 正则表达式
re1 = '<a.*?id="([0-9]*?)"'
re2 = '<b title="(.*?)">.*?<span class="s-fc7">