网易云歌单歌曲实时拉取

最近个人公众号Mozi的bug日志上线了新的音乐推送API,下面来讲讲推送的实现过程。

一、抓取目的

  1. 抓取歌单中的歌曲列表,并提取对应歌曲的外链、歌曲名单以及作者名
  2. 测试歌曲外链,删除其中失效外链
  3. 存储不同歌单中的歌曲数据到csv中以便后续读取

二、读取并存储cookies

​ 经实验发现,若在未登录状态下查看歌单列表时,仅显示前10条歌曲信息:

为了可以稳定的获取对应的歌单列表,这里需要获取cookie,进行cookie登录,这里选择selenium框架来进行获取:

def getcookie():driver = webdriver.Chrome('chromedriver.exe')driver.get('https://music.163.com/')time.sleep(30)#在30s内通过网页进行登录cookie = driver.get_cookies()#在登陆之后直接获取cookiedriver.quit()with open('wyy_cookie.pkl', 'wb') as f:  #为了方便后续读取,保存cookie为pkl格式pickle.dump(cookie, f)return cookie

三、获取歌单列表

通过观察网页源码,歌单列表是镶嵌在iframe框架中的,直接通过通过类似于request框架和urllib框架难以获取iframe内的元素,且在加载网页时,并未发现有post请求的preview里或加载的js内包含关于歌曲列表的信息,因此只好选取selenium来获取歌单列表信息。

具体代码如下所示:

def get_list(url, cookie = None):options = webdriver.ChromeOptions()options.add_argument('--no-sandbox')  # 解决DevToolsActivePort文件不存在的报错options.add_argument('window-size=1600x900')  # 指定浏览器分辨率options.add_argument('--disable-gpu')  # 谷歌文档提到需要加上这个属性来规避bugoptions.add_argument('--hide-scrollbars')  # 隐藏滚动条, 应对一些特殊页面options.add_argument('blink-settings=imagesEnabled=false')  # 不加载图片, 提升速度options.add_argument('--headless')  # 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败driver = webdriver.Chrome(options = options, executable_path='./chromedriver')driver.get(url)#加载cookiesdriver.delete_all_cookies()for cookie_ in cookie:driver.add_cookie(cookie_)time.sleep(3)driver.refresh()#获取iframe内容iframe_elemnt = driver.find_element_by_id("g_iframe")print(iframe_elemnt)driver.switch_to.frame(iframe_elemnt)print(driver.page_source)#获取歌单名称play_list_name = driver.find_element_by_xpath('//h2[@class=\'f-ff2 f-brk\']').text#保存歌曲的id,名字,作者id = []name = []author = []list_id = driver.find_elements_by_xpath('//tbody//tr//div[@class=\'ttc\']//span/a')for i in list_id:#歌曲id转化为外链temp = i.get_attribute('href').replace('?','/media/outer/url?')temp = temp + '.mp3'print(temp)id.append(temp)list_name = driver.find_elements_by_xpath('//tbody//tr//div[@class=\'ttc\']//span//a/b')for i in list_name:name.append(i.get_attribute('title'))list_author = driver.find_elements_by_xpath('//tbody//tr//div[@class=\'text\']/span')for i in list_author:author.append(i.get_attribute('title'))#保存为csvdict = {'id': id, 'name': name, 'author': author}df = pd.DataFrame(dict, columns = ['id', 'name', 'author'])header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0'}# 验证外链的有效性for index, row in df.iterrows():data = requests.get(row['id'], headers=header)print(data.url)if "404" in data.url:df.drop(index, axis = 0,inplace = True)print(index)df.reset_index()path = play_list_name + '.csv'df.to_csv(path, index = 0)

这样便可以保存为csv格式,方便公众号接口使用。

网易云歌单歌曲实时拉取相关推荐

  1. python网易云_[Python] 网易云歌单/歌曲下载

    界面化 可以根据歌单 / 歌曲ID 下载 歌单/歌曲. eg: 歌单ID: https://music.163.com/#/playlist?id=3233380300 中的 3233380300 运 ...

  2. java爬取网易云歌单_爬虫爬取网易云歌单

    一.主题式网络爬虫设计方案 1.主题式网络爬虫名称:爬取网易云音乐歌单 2.主题式网络爬虫爬取的内容与数据特征分析 爬取网易云音乐歌单前十页歌单,轻音乐类型的歌单名称.歌单播放量.歌单链接.用户名称. ...

  3. Python爬虫-selenium爬取网易云歌单

    文章目录 (一)工欲善其事必先利其器-安装工具 Selenium 浏览器 (二)实战 (一)工欲善其事必先利其器-安装工具 Selenium Selenium是一个强大的网络数据采集工具,其最初是为网 ...

  4. Python爬虫之网易云歌单音频爬取(解决urlretrieve爬取文件不能播放问题)

    网易云歌单音频爬取 写在前面:最近学习爬虫,对小说和图片都进行过简单爬取,所以打算爬取音频,但是其中遇到点问题也解决了,写下博客记录并希望对大家也有帮助. 爬取对象:对于目前主流的几个音频播放网站,我 ...

  5. python爬网易歌单_Python爬取网易云歌单

    1. 关键点 使用单线程爬取,未登录,爬取网易云歌单主要有三个关键点: url为https://music.163.com/discover/playlist/?order=hot&cat=% ...

  6. Python爬虫爬取豆瓣TOP250和网易云歌单

    python爬虫(网易云)笔记 @(python学习) 先推荐看一下b站的视频链接如下:https://www.bilibili.com/video/BV12E411A7ZQ?from=search& ...

  7. Python爬虫实战: 爬取网易云歌单

    这篇文章,我们就来讲讲怎样爬取网易云歌单,并将歌单按播放量进行排序,下面先上效果图 1.用 requests 爬取网易云歌单 打开 网易云音乐 歌单首页,不难发现这是一个静态网页,而且格式很有规律,爬 ...

  8. 爬虫python代码网易云_爬虫实战(二) 用Python爬取网易云歌单

    最近,博主喜欢上了听歌,但是又苦于找不到好音乐,于是就打算到网易云的歌单中逛逛 本着 "用技术改变生活" 的想法,于是便想着写一个爬虫爬取网易云的歌单,并按播放量自动进行排序 这篇 ...

  9. python爬虫实例网易云-爬虫实战(二) 用Python爬取网易云歌单

    最近,博主喜欢上了听歌,但是又苦于找不到好音乐,于是就打算到网易云的歌单中逛逛 本着 "用技术改变生活" 的想法,于是便想着写一个爬虫爬取网易云的歌单,并按播放量自动进行排序 这篇 ...

最新文章

  1. 制约RFID在包装领域的规模应用的障碍盘点
  2. Spring mvc 启动配置文件加载两遍问题
  3. [Python人工智能] 二十八.Keras深度学习中文文本分类万字总结(CNN、TextCNN、LSTM、BiLSTM、BiLSTM+Attention)
  4. SAP Analytics Cloud学习笔记(一):从CSV文件导入数据到Analytics Cloud里创建模型和Story
  5. 论文阅读(4)--Part-Stacked CNN for Fine-Grained Visual Categorization
  6. 微软CRM 2011 Beta 新功能之二:不同组织不同基本语言
  7. Linux grep命令、Linux cd命令、Linux pwd命令
  8. 手机有一个时钟的标志_手机桌面时钟有这几款就够了
  9. Eclipse中JAVA项目的打包
  10. 寓情于景 —— 情与景的交融
  11. 文本输入框的两种div+css的写法
  12. 在队列同步器中,同步队列为什么是双向链表,而等待队列是单链表?
  13. XRF与ICP比较的差异
  14. 使用阿里云镜像加速器--docker
  15. 天顶角、太阳方位角和太阳高度角辨析
  16. Stata Journal 2001-2019年全部期刊目录及下载链接
  17. 【BZOJ4987】Tree(树形dp)
  18. 数据防泄密,代码类数据难在哪里?
  19. 政务云公共服务区与资源共享区数据交换的方式
  20. 鼠标光标一直在闪烁_便携有个性,功能强大,可配戴在手指上的键盘鼠标

热门文章

  1. 【毕业设计】基于单片机的自动浇花灌溉系统设计 -嵌入式 物联网 stm32 c51
  2. 手把手教你在阿里云服务器上安装Java环境(图文教程)
  3. 计算机视觉学习路线—计算机视觉入门必读的20本书
  4. 【微信小程序】点击图标跳转页面
  5. 计算机数值方法知识,计算机数值方法.pdf
  6. Android中的优化问题
  7. Nginx 502的解决方法
  8. 网站出现 502 Bad Gateway 怎么解决?
  9. Word文档如何进行拆分成多个文档?
  10. 外媒称今年iPhone XR将新增两种颜色:绿色和薰衣草色