1.网易云非付费内容爬取器(声明:由于技术十分简单,未到触犯软件使用规则的程度)驱动Edge浏览器(自己写驱动会更高端)进入界面,爬取列表中第一个音频地址并存入相应文件夹中。这里有一个最简单的爬虫程序和一个最简单的tkinter GUI编程。
注意,要先在网易云音乐网页中将第一个对应音频链接的位置定位:
对于以上定位可通过如下方式获得(定位器):
req = driver.find_element_by_id('m-search')
a_id = req.find_element_by_xpath('.//div[@class = "item f-cb h-flag "]/div[2]//a').get_attribute("href")
在XML语言中寻找链接路径的方法可参见find_element_by_xpath
创建目录参见makedirs
这里的GUI需要tkinter添加文本。用text控件insert(插入文本)、see(滚动)、update(更新)等方法显示正在下载和已下载图样;在get_music_name函数中,首先从输入窗口获取名称,然后调用Edge驱动访问网易云音乐主页,通过'http://music.163.com/song/media/outer/url?id={}.mp3'.format(song_id)搜到歌曲,通过上述定位器找到歌曲地址和歌名。注意到第一个函数传入的应该是字典类型(有了这种语句:song_id = item['song_id']),那就创建一个字典后在函数体内调用song_load实现下载。在这之前,驱动就完成了任务,所以可以关闭驱动。
至于Tkinter的控件内容,应该根据实际情况试错和设计,界面编程相对还是比较简单的。(分别创建标签控件、输入框、列表框、按钮,并依次确定它们在主界面中的位置)
from tkinter import *
from selenium import webdriver
global entry
import os
from urllib.request import urlretrieve
#2.下载歌曲
def song_load(item):
song_id = item['song_id']
song_name = item['song_name']
song_url = 'http://music.163.com/song/media/outer/url?id={}.mp3'.format(song_id)
#创建文件夹
os.makedirs('music_netease',exist_ok=True)
path = 'music_netease\{}.mp3'.format(song_name)
#显示数据到文本框
text.insert(END,'歌曲:{},正在下载...'.format(song_name))
#文本框滚动
text.see(END)
#更新
text.update()
#下载
urlretrieve(song_url,path)
#显示数据到文本框
text.insert(END,'歌曲:{},下载完毕'.format(song_name))
#文本框滚动
text.see(END)
#更新
text.update()
#1.搜索
def get_music_name():
#获取输入的内容
name = entry.get()
url = 'https://music.163