一、构造歌手个人主页的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)

# 切换成frame

driver.switch_to_frame("g_iframe")

# 休眠3秒,等待加载完成!

time.sleep(3)

page_src = driver.page_source

driver.close()

return page_src

返回结果为歌手个人主页的框架源代码,里面包含了我们需要的信息.

五、解析源代码

我们使用bs4库进行解析,需要的信息包含在HTML5的下面代码片段中:

因此可定义下面函数对其进行解析:

def parse_html_page(html):

# pattern = ''

# 这里是使用lxml解析器进行解析,lxml速度快,文档容错能力强,也能使用html5lib

soup = 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 = row

if str(artist_id) is "artist_id":

continue

else:

yield artist_id, artist_name

# 当程序的控制流程离开with语句块后, 文件将自动关闭

八、程序主函数

# 主函数  def main():

for readcsv in read_csv():

artist_id, artist_name = readcsv

url = "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,爬取过程中有任何问题欢迎留言!

作者简介:志颖,一个狂热的 python 爬虫爱好者。

用python爬取网易云评论10w+的歌曲名_Python爬取网易云音乐评论热门歌曲和ID相关推荐

  1. 用python爬取网易云评论10w+的歌曲名_Python3爬取网易云音乐评论

    |下载W3Cschool手机App,0基础随时随地学编程>>戳此了解| 导语 利用Python为自己喜欢的音乐制作专属词云.至于词的来源嘛,当然是对应歌曲的所有评论或者热门评论啦!!!毕竟 ...

  2. python爬取音乐歌曲大全_Python爬取网易云音乐歌单歌曲

    # 从网易云音乐下载歌单歌曲 # 参考了这些网址 # https://blog.csdn.net/Ciiiiiing/article/details/62434438 # https://github ...

  3. python大众点评网实训报告中的参考文献_python爬取大众点评网商家信息以及评价,并将数据存储到excel表中(源码及注释)...

    import requests from bs4 import BeautifulSoup import traceback # 异常处理 import xlwt # 写入xls表 # Cookie记 ...

  4. python电影评论的情感分析流浪地球_python爬取豆瓣流浪地球影评,生成词云

    代码很简单,一看就懂. (没有模拟点击,所以都是未展开的) 地址: https://movie.douban.com/subject/26266893/reviews?rating=&star ...

  5. 用python爬取网页数据并存入数据库中源代码_Python爬取51cto数据并存入MySQL方法详解...

    [] 实验环境 1.安装Python 3.7 2.安装requests, bs4,pymysql 模块 实验步骤1.安装环境及模块 可参考https://www.jb51.net/article/19 ...

  6. python爬取微博热搜显示到折线图_Python爬取新浪微博热搜榜-Go语言中文社区

    我们如何爬取这50条热搜呢?今天写一个简单的方法供感兴趣的朋友们参考! 引用库: requests json lxml.etree bs4.BeautifulSoup引用方法如下: 如果没有下载的需要 ...

  7. python爬取拉勾网给定关键词职位信息存入数据库_Python 爬取拉勾网python职位信息...

    今天的任务是爬取拉勾网的职位信息. 首先,我们进入拉勾网,然后在职位搜索栏搜索Python 的同时,打开控制面板F12,来查看网页构成. 在XHR里,可以清楚的看见Ajax请求,所以需要使用sessi ...

  8. python爬虫豆瓣电影我不是药神的评价_Python | 爬取《我不是药神》电影热门短评...

    1.目标数据: 数据来源: 目标描述: 建立一个爬虫项目,抓取豆瓣上对电影<我不是药神>的热门短评,采集字段包括: 用户昵称 评论时间 觉得有用的人数 短评内容 2.开始爬虫 采集策略: ...

  9. python快递费用计算用包裹重量和目的地计算_Python爬取指定重量的快递价格

    目录 背景:现在这个时代,快递横飞.我们想寄一个快递,给出的选择也是多种多样的(根据快递的大小.送达的时间.寄送的距离及价格.公司服务质量,来选择不同的快递[物流]公司).往往合适的事情选择合适的方式 ...

最新文章

  1. 深度学习debug沉思录
  2. SVN更新提示内容被锁定
  3. redis 集合操作
  4. SVN数据代码迁移Windows2012ServerR2
  5. 扫帚:我天天都能立起来,看把你们闲的
  6. AHU_OJ 434
  7. 有趣的JS 一行代码 偷取所有图片
  8. java中什么是底层数据结构_JavaScript 对象的底层数据结构是什么
  9. linux系统u盘安装7.2,U盘安装CentOS 7系统的方法
  10. 莫烦---Tensorflow学习
  11. Data Center TCP (DCTCP)学习笔记
  12. 【OS笔记 4】操作系统的组织结构(层次结构、微内核结构)虚拟机的概念
  13. Autosar CPU core trust/Nontrust配置
  14. continue在c语言中什么作用,continue在c语言中什么意思?
  15. 淘宝API接口:获取sku详细信息
  16. 蓝桥杯评分标准_蓝桥杯软件设计大赛自测评分标准
  17. pg_stat_database 视图 tup_returned、tup_fetched 的含义
  18. ipv6审核被拒绝的解决方案
  19. 数据结构-中序遍历二叉树(基于C++)
  20. 推荐语、学生和网友留言——《逆袭大学》连载

热门文章

  1. swfupload组件图片上传失败问题分析与总结
  2. 温度梯度作用下水分迁移研究
  3. 论文学习--Resource allocation for multi-user downlink MISO OFDMA-URLLC systems
  4. PopupWindow实现屏幕底部弹出
  5. Springboot+Mybatis+Druid+Maven多模块项目搭建遇到的各种吭
  6. STM32F407-高级定时器PWM输入功能
  7. 连发Cell,Nature顶级期刊,揭示脊髓和脑干在触摸中令人惊讶的新作用
  8. jumpserver详解(八)——jumpserver用户设置
  9. 即便是SQL Guy, 也无法逃离UML
  10. [深度学习论文笔记]Modality-aware Mutual Learning for Multi-modal Medical Image Segmentation