使用selenium抓取网易云音乐数据

今天通过一个简单的网易云音乐排行榜数据抓取与音乐下载实战案例,带着大家一起来学习如何抓取动态生成的页面内容。网易云音乐排行榜网址:https://music.163.com/#/discover/toplist,界面效果如下。

查看页面源代码,发现并没有这些歌曲信息,说明这些内容都是通过JavaScript动态生成的。使用普通的requests库无法直接获取相关内容,这里我们采用Selenium模拟人操作浏览器,从而获取动态生成的内容。(Selenium是一个用于Web应用程序测试的工具,Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,Python中Selenium库的安装与使用请参考另一篇博文:Selenium + Chrome 网络爬虫学习笔记

以第 2 首歌 以梦为马 为例,将鼠标放在文字上方,右键选择检查(不同浏览器叫法可能不一样)即可打开网页分析工具,如下图所示。可知网页中使用了框架,音乐排行榜内容所在框架的id为"g_iframe"

抓取网易云音乐排行榜数据的关键代码如下:

这里的关键是要切换到指定的页面框架中去,即 browser.switch_to.frame("g_iframe"),否则无法获取相关内容。 

运行后,控制台打印结果如下(部分内容截图):

获取到音乐详情网址和音乐ID后,可以跳转页面进一步获取更多关于音乐的信息,例如作词、作曲、制片人、歌词、评论等,甚至可以直接下载音乐,主要流程都是类似的,不同的是页面解析的xpath有所不同,感兴趣的同学可以深入拓展,遇到问题可以在评论区交流。

相关代码可以关注微信公众号:Python资源分享,回复 网易 即可获取。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是使用Selenium爬取网易云音乐评论的步骤: 1. 安装Selenium和Chrome浏览器驱动。 ```python !pip install selenium ``` Chrome浏览器驱动下载地址:http://chromedriver.chromium.org/downloads 2. 导入必要的库和设置浏览器驱动路径。 ```python from selenium import webdriver from selenium.webdriver.common.keys import Keys import time # 设置浏览器驱动路径 driver_path = 'chromedriver的路径' ``` 3. 打开网易云音乐网站并搜索指定的歌曲。 ```python # 打开网易云音乐网站 driver = webdriver.Chrome(executable_path=driver_path) driver.get('https://music.163.com/') # 切换到iframe中 driver.switch_to.frame("contentFrame") # 搜索指定的歌曲 search = driver.find_element_by_xpath('//*[@id="m-search-input"]') search.send_keys('告白气球') search.send_keys(Keys.RETURN) # 等待页面加载完成 time.sleep(3) ``` 4. 打开歌曲的评论页面并切换到最新评论。 ```python # 打开歌曲详情页 song_link = driver.find_element_by_xpath('//*[@id="song-0"]/div[2]/div/div[1]/div[1]/a') song_link.click() # 点击展开评论 comment_button = driver.find_element_by_xpath('//*[@id="cnt_comment_count"]') comment_button.click() # 切换到最新评论 comment_tab = driver.find_element_by_xpath('//*[@id="comment-box"]/div[1]/div[1]/ul/li[2]/a') comment_tab.click() # 等待页面加载完成 time.sleep(3) ``` 5. 模拟滚动鼠标操作,加载更多评论。 ```python # 模拟滚动鼠标操作,加载更多评论 for i in range(10): driver.execute_script('window.scrollTo(0, document.body.scrollHeight)') time.sleep(2) ``` 6. 获取所有评论的用户名和内容。 ```python # 获取所有评论的用户名和内容 comment_list = driver.find_elements_by_xpath('//*[@id="comment-box"]/div[1]/div[3]/div') for comment in comment_list: username = comment.find_element_by_xpath('./div[2]/a').text content = comment.find_element_by_xpath('./div[1]/div[1]').text print(username, content) ``` 7. 关闭浏览器。 ```python # 关闭浏览器 driver.quit() ``` 完整代码如下: ```python from selenium import webdriver from selenium.webdriver.common.keys import Keys import time # 设置浏览器驱动路径 driver_path = 'chromedriver的路径' # 打开网易云音乐网站 driver = webdriver.Chrome(executable_path=driver_path) driver.get('https://music.163.com/') # 切换到iframe中 driver.switch_to.frame("contentFrame") # 搜索指定的歌曲 search = driver.find_element_by_xpath('//*[@id="m-search-input"]') search.send_keys('告白气球') search.send_keys(Keys.RETURN) # 等待页面加载完成 time.sleep(3) # 打开歌曲详情页 song_link = driver.find_element_by_xpath('//*[@id="song-0"]/div[2]/div/div[1]/div[1]/a') song_link.click() # 点击展开评论 comment_button = driver.find_element_by_xpath('//*[@id="cnt_comment_count"]') comment_button.click() # 切换到最新评论 comment_tab = driver.find_element_by_xpath('//*[@id="comment-box"]/div[1]/div[1]/ul/li[2]/a') comment_tab.click() # 等待页面加载完成 time.sleep(3) # 模拟滚动鼠标操作,加载更多评论 for i in range(10): driver.execute_script('window.scrollTo(0, document.body.scrollHeight)') time.sleep(2) # 获取所有评论的用户名和内容 comment_list = driver.find_elements_by_xpath('//*[@id="comment-box"]/div[1]/div[3]/div') for comment in comment_list: username = comment.find_element_by_xpath('./div[2]/a').text content = comment.find_element_by_xpath('./div[1]/div[1]').text print(username, content) # 关闭浏览器 driver.quit() ``` 注意:爬虫行为容易引起网站的反爬虫机制,使用时请注意合理使用,避免对网站造成影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高成珍

前行路上与你相伴!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值