python爬虫打造音乐(Python开发音乐播放器)

Python开发音乐播放器(一)—— 模拟登陆 获得歌单信息

这个星期我的个人项目——(能导入各个平台歌单的)音乐播放器已经开始啦。所以先理清思路:

  1. 使用selenium进行模拟登录,即登录QQ号时同时能获得网易云和QQ音乐时可以获取两个账号的歌单
  2. 使用Python创建GUI界面(初期使用简洁的界面,后期再进行美化和功能增加)
  3. 将Python的GUI界面与第一步得到的歌单融合
  4. 解决音乐在播放器上播放的问题(目前想到的是两种方法:1.爬取源mp3文件,此方式较为困难并且可能涉及到版权问题暂时不适合。2. 得到播放的链接,进行在线播放)

期间可能会遇到各种问题或者说我的思路有问题的地方会进行改进,当然同时也不吝赐教。

一、selenium模拟登陆

首先是安装并且配置selenium的环境,网上都有教程这里就不赘述了。

接着进行网页的分析,打开网易云界面,我们首先要实现模拟登陆的功能。

python爬虫打造音乐(Python开发音乐播放器)(1)

查看此处的代码结构:

python爬虫打造音乐(Python开发音乐播放器)(2)

点击后弹出新的框:

python爬虫打造音乐(Python开发音乐播放器)(3)

此处因为需要点击QQ登录因此利用css选择器使用下列代码:

from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.keys import Keys from time import sleep class getMusic(): #chrome_options=Options() #设置为无界面模式 #chrome_options.add_argument('--headless') userid='***' #这里填上QQ号 password='***'#这里填上对应的密码 browser = webdriver.Chrome() browser.implicitly_wait(10) browser.get("https://music.163.com/") #login = browser.find_element_by_link_text('登录') #login.click() browser.implicitly_wait(10) browser.find_element_by_css_selector(".m-tophead.f-pr.j-tflag > a").click() #点击登录 #css 选择器中如果一个 tag 的 class 包含空格,要用.号代替空格 browser.find_element_by_css_selector(".lyct.lyct-1 > div > div.u-alt > ul > li:nth-child(2) > a").click() #点击QQ登录

运行代码,进入下列界面:

python爬虫打造音乐(Python开发音乐播放器)(4)

我们要先对选项卡进行切换

music_handle = browser.current_window_handle print(music_handle) # 输出当前窗口句柄 handles = browser.window_handles # 获取当前全部窗口句柄集合 print(handles) #切换到QQ登陆页面 for handle in handles: if handle != browser.current_window_handle: print('switch to qq login window') browser.switch_to.window(handle) browser.implicitly_wait(10) ##QQlogin = browser.find_element_by_link_text('QQ登录') #QQlogin.click() #music_handle = browser.current_window_handle browser.implicitly_wait(10) sleep(2)

接着我们发现QQ登录窗口含有iframe:

python爬虫打造音乐(Python开发音乐播放器)(5)

因此先切换此窗口:

browser.switch_to.frame('ptlogin_iframe')

再点击帐号密码登录,出现文本框将账号密码输入后进行登录。

python爬虫打造音乐(Python开发音乐播放器)(6)

python爬虫打造音乐(Python开发音乐播放器)(7)

browser.find_element_by_link_text('帐号密码登录').click() userid_ele=browser.find_element_by_name('u') #password_ele=browser.find_element_by_id('pwdArea') password_ele=browser.find_element_by_name('p') userid_ele.send_keys(userid) password_ele.send_keys(password) browser.find_element_by_id('login_button').click()

切换回原窗口:

browser.switch_to.window(music_handle)

完成登录:

python爬虫打造音乐(Python开发音乐播放器)(8)

二、初步获得歌单信息

首先进入我的音乐:

python爬虫打造音乐(Python开发音乐播放器)(9)

代码:

browser.find_element_by_xpath('//*[@id="g-topbar"]/div[1]/div/ul/li[2]/span/a/em').click() browser.implicitly_wait(10) sleep(2)

接下来提取歌单的名称:

python爬虫打造音乐(Python开发音乐播放器)(10)

经过检查代码发现,这里也是个iframe:

python爬虫打造音乐(Python开发音乐播放器)(11)

browser.switch_to.frame('contentFrame')

提取名称:

list=[] #list=browser.find_element_by_xpath('//*[@id="g_mymusic"]/div/div[1]/div/div[1]/ul/li[3]') #list.click() i=1 while True: try: list=browser.find_element_by_xpath('//*[@id="g_mymusic"]/div/div[1]/div/div[1]/ul/li[{}]'.format(i)) print(list.text) i=i 1 except: print('over') break;

输出结果:

python爬虫打造音乐(Python开发音乐播放器)(12)

(未完待续,如以上有疑问,不吝赐教)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页