网易云音乐评论爬虫:爬取全部热门歌曲及其对应的id号(附全部代码)
今天我给大家介绍一下用Python爬取网易云音乐全部歌手的热门歌曲.
由于歌手个人主页的网页源代码中还嵌入了一个子网页(框架源代码里面包含了我们需要的信息),因此我们不能使用requests库来爬取,而使用selenium。
接下来,让我详细讲解整个爬取过程.
一,构造歌手个人主页的URL
前段时间我们获取了网易云音乐全部歌手的id号
今天我们就利用全部歌手的id号来构造歌手个人主页的URL,从而实现用爬取全部歌手的热门歌曲及其id号的目的
以歌手薛之谦的个人主页 为例,来看一下他的主页的URL为:
https://music.163.com/#/artist?id=5781
因此只需要根据歌手对应的id就可以构造出歌手的个人主页,在歌手的个人主页我们能看到热门作品这一栏网易云音乐全部歌手id号点击获取(csv文件)
二,分析网页源代码
现在我们就要用Python爬虫去爬取这些内容.如果你用requests库去爬取的话,返回的网页源代码中根本就没有这些信息
这时我们打开薛之谦的个人主页鼠标右键分别查看网页的源代码和查看框架的源代码
你会发现网页源代码和用requests库请求返回的源代码一摸一样(里面没有我们要爬取的信息),而在框架源代码中有我们要爬取的热门作品的信息
因此我们只需要将框架源代码爬取下来
然后再解析即可得到我们需要的歌手的热门作品的信息.
三,网页源代码和框架源代码的区别
网页源代码是指父级网页的源代码.另外网页中还有一种节点叫iframe,也就是子Frame,相当于网页的子页面
它的结构和外部网页的结构完全一致,框架源代码就是这个子网页的源代码.
四,获取框架源代码
这里我们使用selenium库来爬取,在selenium打开页面后
默认是在父级frame里面进行操作,而此时页面中还有子frame,它是不能获取到子frame里面的节点的,因此这时我们需要使用swith_to.frame()方法来切换到子frame中去
这时请求得到的代码就从网页源代码切换到了框架源代码
于是我们便能够提取我们需要的热门作品的信息了
通过歌手的个人主页的URL来爬取其框架源代码,具体爬取框架源代码的函数:
def get_html_src(url):# 可以任意选择浏览器,前提是要配置好相关环境,更多请参考selenium官方文档driver = webdriver.Chrome()driver.get(url)# 切换成framedriver.switch_to_frame("g_iframe")# 休眠3秒,等待加载完成!time.sleep(3)page_src = driver.page_sourcedriver.close()return page_src
返回结果为歌手个人主页的框架源代码,里面包含了我们需要的信息.
五,解析源代码
我们使用bs4库进行解析,需要的信息包含在HTML5的下面代码片段中:
<span class="txt"><a href="/song?id=(\d*)"><b title="(.*?)">
因此可定义下面函数对其进行解析:
def parse_html_page(html):# pattern = '<span class="txt"><a href="/song?id=(\d*)"><b title="(.*?)">'# 这里是使用lxml解析器进行解析,lxml速度快,文档容错能力强,也能使用html5libsoup = BeautifulSoup(html, 'lxml')items = soup.find_all('span', 'txt')return items
六,写入csv文件
def write_to_csv(items, artist_name):
with open("music163_songs.csv", "a") as csvfile:writer = csv.writer(csvfile)writer.writerow(["歌手名字", artist_name])for item in items:writer.writerow([item.a['href'].replace('/song?id=', ''), item.b['title']])print('歌曲id:', item.a['href'].replace('/song?id=', ''))song_name = item.b['title']print('歌曲名字:', song_name)csvfile.close()
七,读取csv文件,构造全部歌手的个人主页
# 获取歌手id和歌手姓名
def read_csv():with open("music163_artists.csv", "r", encoding="utf-8") as csvfile:reader = csv.reader(csvfile)for row in reader:artist_id, artist_name = rowif str(artist_id) is "artist_id":continueelse:yield artist_id, artist_name# 当程序的控制流程离开with语句块后, 文件将自动关闭
八,程序主函数
# 主函数
def main():for readcsv in read_csv():artist_id, artist_name = readcsvurl = "https://music.163.com/#/artist?id=" + str(artist_id)print("正在获取{}的热门歌曲...".format(artist_name))html = get_html_src(url)items = parse_html_page(html)print("{}的热门歌曲获取完成!".format(artist_name))print("开始将{}的热门歌曲写入文件".format(artist_name))write_to_csv(items, artist_name)print("{}的热门歌曲写入到本地成功!".format(artist_name))
九,总结
获取全部代码请上github,爬取过程中有任何问题欢迎留言!
小编整理的一整套系统的Py thon学习教程从最基础的到框架再到项目实战的学习资料都有整理,送给每一位小伙伴, 有想学Py thon编程的,或是转行,或是大学生,还有工作中想提升自己能力的,正在学习的小伙伴欢迎加入学习。点击加入企鹅群
---原文地址---
网易云音乐评论爬虫:爬取全部热门歌曲及其对应的id号(附全部代码)相关推荐
- 网易云音乐评论爬虫(2):歌曲的全部评论
用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条.现在我就来分享一下如何爬取网易云音乐歌曲的全部评论,由于网易云音乐的评论都做了混淆加密处 ...
- Python 网易云音乐评论爬虫
引言 之前网易云音乐和农夫山泉合作,将热门评论印在农夫山泉上引爆了朋友圈.于是想爬取一下网易云的评论.网上搜了一下,对于网易云评论的爬虫不少,主要参考这篇文章:对网易云音乐参数(params,encS ...
- Python网易云音乐单曲爬取
Python网易云音乐单曲爬取 代码: import requests import osdef develop(path,url):song_url = urlsong_id = song_url[ ...
- python爬虫网易云音乐评论最多的歌_Python网易云音乐评论爬虫,歌曲的全部评论...
用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条.现在我就来分享一下如何爬取网易云音乐歌曲的全部评论,由于网易云音乐的评论都做了混淆加密处 ...
- 网易云音乐用户信息爬取以及可视化
选的课程方向是爬取网易云音乐某首歌曲的用户评论内容和评论时间,观察每天哪个时间段的评论信息最多,每周哪天的评论信息最多.然后分析该歌曲的用户性别分布和年龄分布.所以首先需要通过爬虫来爬取评论信息和用户 ...
- java爬取网易云歌单_GitHub - th720309/163music_spider: 网易云音乐歌单爬取
今天花了一点时间抓取了网易云音乐的热门民谣歌单,共1500热门民谣歌单,后续有时间会爬取其他分类. 下面记录一下java爬取过程.见下: 爬虫过程 1.首先抓取各个歌单的url与标题 public s ...
- 网易云音乐评论爬虫 params encSecKey逆向分析!
网易云评论接口加密破解仅用于研究和学习使用 首先通过抓包分析评论是通过js动态加载的 接口链接为:https://music.163.com/weapi/comment/resource/commen ...
- python爬取网易云音乐热评,爬取网易云音乐热评[附上音乐下载]
[Python] 纯文本查看 复制代码import requests import time,os from bs4 import BeautifulSoup class Music_down: de ...
- Python爬取网易云音乐评论,反爬算啥啊!
兴趣点: 这个网易云音乐的评论我早就想爬了,可惜技术不行,研究了两天的时间我终于用最简单的方法实现了网易云音乐评论的爬取,我以毛不易的<像我这样的人>为例来介绍一下 爬取网站: 虚假的爬取 ...
最新文章
- Asp.Net Core写个共享磁盘文件Web查看器
- [转帖]爬过这 6 个坡,你就能对 Linux 操作系统了如指掌
- Linux arp相关命令(地址解析协议)
- NX界面中获取线、面、体、特征的tag值
- C++处理一个动态规划的问题
- HDFS文件和HIVE表的一些操作
- 特斯拉部分车型将逐渐搭载磷酸铁锂电池,比亚迪有望成为其电池供应商
- 详解TCP和UDP数据段的首部格式
- VC++2012编程演练数据结构《36》磁盘文件进行排序
- 青灯教育python免费公开课_如何使用Python爬取抖音APP视频
- 陈纪修老师《数学分析》 第08章:反常积分 笔记
- 读书笔记-《 我的成功可以复制》四
- 【毕业设计】stm32智能车牌识别系统 - 单片机 嵌入式
- web网页设计期末课程大作业:美食餐饮文化主题网站设计——中华美德6页面html css javascript
- 【Python】base64解码报错 Incorrect padding
- 一部《再忆王家沱》讲述百年重庆历史,堪称中国版《百年孤独》
- 新浪sae部署微信订阅号
- idea类存在找不到解决办法
- string头文件函数
- STM32C8T6之按键检测
热门文章
- Sublime text3 打开txt文本文件时出现乱码问题解决
- 大白菜装机教程win10_微软认错!win10存在多个bug已承诺修复,可你还敢更新吗...
- 使用 C# 读取 zip 压缩包解压文件的方法及注意事项
- mysql unixtime 毫秒_MySQL的FROM_UNIXTIME()和UNIX_TIMESTAMP()函数的区别
- 【vue3+ts后台管理】首页完成
- vue3+ts+elementPlus 后台管理系统
- 向程序发送命令时出现错误 解决办法
- 微软计算器的用法 英文单词
- 后端返回压缩包的问题获取里面的文件并解析
- Centos7.2下面解压.tar.gz 和.gz文件解压的方式