内容简介:废话每年回家都要帮我爸下些音乐,这对我来说都是轻车熟路!可当我打开网易云点击下载按钮的时候,可惜已物是人非啦!
必备环境
废话
每年回家都要帮我爸下些音乐,这对我来说都是轻车熟路!可当我打开网易云点击下载按钮的时候,可惜已物是人非啦!
开个 VIP 其实也不贵,临时用用也就¥15!但 IT 男的尊严必须要有,于是开始徜徉于搜索引擎中
最后在知乎中,搜索到一个网址 VIP付费音乐解析
P.S.
再次感谢提供该服务的作者!如果你下载的音乐数量不多,直接这里搜索下载,下载后修改文件名即可!并且在这个网址中点击 播放列表
- 点击同步
,可以同步网易云的歌单!之后批量下载即是下载这些网易云的歌单!但是下载某个歌单中的几百首歌,手动下载就不现实了!在 点击同步
中需要输入你的网易云 UID,这 UID 的获取方式如下:第一步打开网易云随便选中一首歌,右键 复制链接
然后随便找个地方粘贴这个链接,例如 https://music.163.com/song?id=25727803&userid=275613591
最后这串数字就是 UID!
程序运行环境
第一步安装一个 python3
,这个简单吧!贴上我的版本 python3.65 ,安装时注意勾选 Add in path
第二步下载 FFmpeg
,这是用来解析视频和音频的,作为 you-get
的辅助工具, 下载点这里 ,下载后解压添加环境变量即可
第三步安装 you-get
,这是个下载视频音频的神器,有兴趣可以深入研究!之后我打算写个下载任意视频的工具,嘿嘿这是后话了!安装方式很简单 pip install you-get
环境配置就这样,还是非常轻松的,下面会解释下代码
源码
完整代码
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import time, os # import threding def get_music_name_link(): main_handle = browser.current_window_handle fp = open('E:\\Project_PY\\file\\musiclink.txt','wb') fp2 = open('E:\\Project_PY\\file\\musicname.txt','wb') try: for i in list(range(2,400)): browser.switch_to_window(main_handle) txt = browser.find_element_by_xpath('/html/body/div[3]/div/div[2]/div[2]/div[1]/div/div[%d]' % i).text + '\n' fp2.write(bytes(txt,encoding='utf-8')) location = browser.find_element_by_xpath('/html/body/div[3]/div/div[2]/div[2]/div[1]/div/div[%d]' % i) ActionChains(browser).move_to_element(location).perform() browser.find_element_by_xpath('/html/body/div[3]/div/div[2]/div[2]/div[1]/div/div[%d]/span[5]/div/span[2]' % i).click() time.sleep(2) all_handles = browser.window_handles browser.switch_to_window(all_handles[-1]) # lastest url_link = browser.current_url + '\n' fp.write(bytes(url_link,encoding='utf-8')) browser.close() except Exception as e: print('get_music_name_link meet some problem! {}'.format(e)) fp.close() fp2.close() def download_music(list_name): with open('E:\\Project_PY\\file\\musicname.txt','r',encoding='utf-8') as fp1: music_name = fp1.readlines() len1 = len(music_name) fp2 = open('E:\\Project_PY\\file\\musicname_format.txt','w',encoding='utf-8') for i in range(3,len1,4): music_name_format = music_name[i].strip() + '\n' fp2.write(music_name_format) fp2.close() with open('E:\\Project_PY\\file\\musiclink.txt','r',encoding='utf-8') as fp1: with open('E:\\Project_PY\\file\\musicname_format.txt','r',encoding='utf-8') as fp2: for music_link,music_name in zip(fp1.readlines(),fp2.readlines()): you_get_link = 'you-get "{}" -o "E:\\Project_PY\\file\\music\\{}" -O "{}"'.format(music_link.strip(),list_name,music_name.strip()) you_get_link = you_get_link.strip() # print(you_get_link) os.system(you_get_link) url = 'http://music.zhuolin.wang/' uid = input('please input your uid:') options = webdriver.FirefoxOptions() options.add_argument('--headless') browser = webdriver.Firefox(firefox_options=options) browser.implicitly_wait(8) browser.get(url) # browser.maximize_window() browser.set_window_size(1000,100000) browser.find_element_by_xpath('/html/body/div[3]/div/div[1]/div/span[3]').click() # scroll = browser.find_element_by_xpath('//*[@id="mCSB_1_dragger_vertical"]') # ActionChains(browser).drag_and_drop_by_offset(scroll,0,100).perform() # time.sleep(2) all_handles = browser.window_handles browser.switch_to_window(all_handles[-1]) # lastest time.sleep(1) browser.find_element_by_xpath('/html/body/div[3]/div/div[2]/div[1]/div[1]/div/span/div[2]/span').click() all_handles = browser.window_handles browser.switch_to_window(all_handles[-1]) # lastest time.sleep(1) browser.find_element_by_xpath('/html/body/div[6]/div[2]/input').send_keys(uid) browser.find_element_by_xpath('/html/body/div[6]/div[3]/a[1]').click() # t1 = threading.Thread(target=get_music_name) # t2 = threading.Thread(target=get_music_link) # t3 = threading.Thread(target=download_music) for i in list(range(3,100)): try: print('downloading song_list{}! please waiting....'.format(i)) browser.find_element_by_xpath('/html/body/div[3]/div/div[2]/div[1]/div[1]/div/div[%d]/img' % i).click() dir_name = browser.find_element_by_xpath('/html/body/div[3]/div/div[2]/div[1]/div[1]/div/div[%d]/p' % i).text time.sleep(1) get_music_name_link() download_music(dir_name) browser.find_element_by_xpath('/html/body/div[3]/div/div[1]/div/span[3]').click() time.sleep(1) all_handles = browser.window_handles browser.switch_to_window(all_handles[-1]) # lastest time.sleep(5) except Exception as e: print('get_song_list meet some problem! {}'.format(e)) browser.quit()
核心代码解释
总共有三个函数:
函数一 get_music_name_link
,主要是获取音乐名称以及音乐的下载链接
函数二 download_music
,获取歌单名称,然后拼接下载链接和音乐名,调用 you-get
开始下载到对应目录
函数三 main
,主要是利用 UID 获取歌单,以及批量下载歌单中的曲目
需要注意的几个点:
1.使用了 sleep(1)
休眠一秒,如果网络较慢需要将所有的 sleep
休眠时间加长
2.所有的路径需要自己根据本机修改
3.如果要修改代码一定要注意 switch_to_window
来切换窗口
4.73行的 for i in list(range(3,100))
是用来选择下载的歌单,歌单从 1 开始计数
程序演示
输入网易云的 UID!
然后静静的等待即可...此过程中会有部分音乐的播放声音,不喜欢可以开静音下
当所有的链接解析完成后就会调用 you-get
下载,此过程会自动创建与歌单名相同的文件夹
下载完成后
END
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 一个付费 Chrome 插件的一生
- 甲骨文通知用户需付费取得 Java 8 更新
- Python爬虫教程:爬取付费电影,告别费钱的日子
- 开发了一个微信群付费进群功能
- 酷瓜云课堂 v1.3.4 发布,知识付费开源方案
- 付费用户暴增7倍,这项技术是如何对用户产生影响的?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Spring in Action
Craig Walls / Manning Publications / 2011-6-29 / USD 49.99
Spring in Action, Third Edition has been completely revised to reflect the latest features, tools, practices Spring offers to java developers. It begins by introducing the core concepts of Spring and......一起来看看 《Spring in Action》 这本书的介绍吧!