采用词云对邓紫棋的热门前50歌曲进行可视化展示。

本次可视化步骤需要掌握的内容有:了解爬虫的原理

掌握xpath的用法

掌握词云工具wordcloud的使用

了解分词根据jieba的使用

首先,需要找到网易云音乐的音乐人的网页链接,再根据热门歌曲获取每一首热门歌曲的歌词。获取每首歌的歌曲ID,歌曲名称

获取每首歌的歌词,汇总成一个歌词文本

创建词云模型,进行展示。

下面是一些进行项目时候的一些小错误,直接用pycharm的debug功能仔细查看哪一个步骤出错了,需要细心去写代码,爬虫很容易出现一些非语法方面的错误。

获取指定歌手页面的xpath的时候,少打了一个@ ,导致没有获取到相应歌曲的网页链接的ID。

获取网易云音乐歌词的时候,打错了关键字,将歌词 'lrc'错打成了 'lyc',导致没有歌词输出,同时正则表达式少打了一个 ]

# -*- coding:utf-8 -*-

# 网易云音乐 通过歌手ID,生成该歌手的词云

import requests

import os

import re

import sys

from wordcloud import WordCloud

import matplotlib.pyplot as plt

from PIL import Image

import numpy as np

import jieba

from lxml import etree

headers = {

'Referer': 'http://music.163.com',

'Host': 'music.163.com',

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

'User-Agent': 'Chrome/10'

}

# 得到某首歌的歌词

def get_song_lyric(headers,lyric_url):

res = requests.request('GET',lyric_url,headers=headers)

if 'lrc' in res.json():

# lyric = res.json()['lyc']['lyric'] # 根据页面获取歌词文件

lyric = res.json()['lrc']['lyric'] # 根据页面获取歌词文件

# new_lyric = re.sub(r'[\d:.[\]','',lyric) # 对歌词里面的时间等进行正则表达式替换

new_lyric = re.sub(r'[\d:.[\]]','', lyric) # 对歌词里面的时间等进行正则表达式替换

return new_lyric

else:

return ''

# print(res.json())

# 去掉停用词

def remove_stop_words(f):

stop_words = ['作词', '作曲', '编曲', 'Arranger', '录音', '混音', '人声', 'Vocal', '弦乐', 'Keyboard', '键盘', '编辑', '助理',

'Assistants', 'Mixing', 'Editing', 'Recording', '音乐', '制作', 'Producer', '发行', 'produced', 'and',

'distributed']

for stop_word in stop_words:

f = f.replace(stop_word,"")

return f

# 得到指定歌手页面 热门前50的歌曲ID,歌曲名

def get_songs(artist_id):

page_url = 'https://music.163.com/artist?id=' + artist_id

# 获取网页 HTML

res = requests.request('GET',page_url,headers=headers)

# 用xpath 解析热门前50的歌曲信息

html = etree.HTML(res.text)

href_xpath = "//*[@id='hotsong-list']//a/@href"

name_xpath = "//*[@id='hotsong-list']//a/text()"

# href_xpath = "//*[@id='hotsong-list']//a/@href"

# name_xpath = "//*[@id='hotsong-list']//a/text()"

hrefs = html.xpath(href_xpath)

names = html.xpath(name_xpath)

# 设置热门歌曲的ID,歌曲名称

song_ids = []

song_names = []

for href,name in zip(hrefs,names):

song_ids.append(href[9:])

song_names.append(name)

print(href,' ',name)

return song_ids,song_names

# 生成词云

def creat_word_cloud(f):

print("根据词频,开始生成词云!")

f = remove_stop_words(f)

cut_text = " ".join(jieba.cut(f,cut_all=False,HMM=True))

wc = WordCloud(

font_path="./wc.ttf",

max_words=100,

width = 2000,

height = 1200,

)

print(cut_text)

wordcloud = wc.generate(cut_text)

# 写词云文件

wordcloud.to_file("artist_wordcloud.jpg")

# 展示词云文件

plt.imshow(wordcloud)

plt.axis("off")

plt.show()

# 设置歌手 ID,邓紫棋为 7763

artist_id = '7763'

[song_ids,song_names] = get_songs(artist_id)

# 所有歌词

all_words = ''

# 获取每首歌歌词

for (song_id,song_name) in zip(song_ids,song_names):

# 歌词api url

lybric_url = 'http://music.163.com/api/song/lyric?os=pc&id=' + song_id + '&lv=-1&kv=-1&tv=-1'

lyric = get_song_lyric(headers,lybric_url)

all_words = all_words + " " + lyric

print(song_name)

# 根据词频生成词云

creat_word_cloud(all_words)

python歌词统计单词词频_Python爬虫网易云歌词及词频统计相关推荐

  1. Python爬虫网易云歌词及词频统计--(周杰伦top50)

    本篇博客是利用Python爬虫网易云音乐,并利用jieba分词,对歌词进行分词,然后分析周杰伦top50中最常出现的词语. 我们先尝试获取一首歌的歌词吧,比如等你下课这首歌 上面的id就是等你下课这首 ...

  2. python爬虫网易云_Python爬虫网易云音乐Top50热门歌单

    周末,打开手机听听音乐放松下,发现手机里的音乐好久没换了,想听点其他歌却不知道换什么歌,你们有没有遇到这样的听歌慌,今天就用 python 爬虫来爬取网易云音乐里不同类型歌手的 top 50 热门歌曲 ...

  3. python网络爬虫网易云音乐_一篇文章带你用Python网络爬虫实现网易云音乐歌词抓取...

    标签下,如下图所示: 接下来我们利用美丽的汤来获取目标信息,直接上代码,如下图: 此处要注意获取ID的时候需要对link进行切片处理,得到的数字便是歌曲的ID:另外,歌曲名是通过get_text()方 ...

  4. 小猿圈分享利用python网络爬虫获取网易云歌词

    今天小猿圈给大家分享网易云音乐歌词爬取方法. 本文的总体思路如下: 找到正确的URL,获取源码: 利用bs4解析源码,获取歌曲名和歌曲ID: 调用网易云歌曲API,获取歌词: 将歌词写入文件,并存入本 ...

  5. python网易云爬虫——实现网易云歌词的爬取(输入歌手的id,即可实现歌词的爬取)

    Python网易云爬虫--实现网易云歌词的爬取(输入歌手的id,即可实现歌词的爬取) 开始动手 打开网易云音乐,找到任意一位歌手的歌曲界面(我们以邓紫棋的<来自天堂的魔鬼>为例). 第一步 ...

  6. python3爬取网易云歌单数据清洗_利用Python网络爬虫抓取网易云歌词

    今天小编给大家分享网易云音乐歌词爬取方法. 本文的总体思路如下:找到正确的URL,获取源码: 利用bs4解析源码,获取歌曲名和歌曲ID: 调用网易云歌曲API,获取歌词: 将歌词写入文件,并存入本地. ...

  7. 浅谈动感歌词:网易云歌词分析

    1引言 HPLyrics歌词解析库虽然是乐乐音乐播放器中的一个歌词模块,但是目前已经支持lrc.ksc.krc.hrc等歌词格式的动感显示.最近有读者反映该开源库能否支持网易云歌词,如果要支持网易云歌 ...

  8. java 歌词_网易云歌词爬取(java)

    网上也有很多人写过的,但感觉可能都不是很细,特此写了一份,不足之处请大家多多包涵 就以这首为例,给大家分享一下网易云歌词的获取 F12找到歌词的请求地址 0 通过观察可以发现就是这params和enc ...

  9. js网易云歌词解析处理,

    网易云歌词解析之显示 废话不多说,直接上代码,请仔细亲手跟着写一遍, 如果你看懂了,记得点赞 <!DOCTYPE html> <html><head><met ...

最新文章

  1. 缓存成神路:Redis读写分离难以理解?一文解析Redis读写分离技术
  2. 实战 Spring Cloud Gateway 之限流篇
  3. TAB(Nav)导航菜单
  4. MySQL 规范及优化
  5. linux screen 配置(下标高亮)
  6. 第十一讲 二阶齐次线性ODE相关理论
  7. bzoj3589 动态树
  8. mysql主从复制、基于GTID的主从、半同步
  9. 在AIX上编译Samba
  10. win7和mysql乱码,win7 mysql中文乱码怎么处理
  11. TCP的带宽估计和丢包恢复
  12. cmd mysql出现乱码怎么解决方法_cmd如何解决mysql乱码
  13. 【问题解决:死锁】Lock wait timeout exceeded; try restarting transaction的问题
  14. 在数据库WSEDSQLDB中检测到一个可能的数据库一致性问题。|解决方法
  15. PROTEL技术大全
  16. routeros dns_从RouterOS在FreeDNS上进行动态DNS更新
  17. 第16集 生成BOM清单标签导出
  18. 基于ASP.NET小微企业人力资源管理系统
  19. 增强现实(AR)的前世今生...
  20. python3 规则引擎_Ilog、Drools、Jess规则引擎的Rule Language 对比

热门文章

  1. C语言文件操作 fopen, fclose, mkdir(打开关闭文件,建文件夹,判断文件是否存在可读或可写)
  2. linux文件创建、查看、编辑命令
  3. 当分区数量与reducer task数量不一致时,会怎么样。
  4. spring——使用xml声明式事务整合jdbc——GRUD
  5. 分布式ID业界解决方案
  6. java并发中ExecutorService的使用
  7. 安卓学习 之 碎片(四)
  8. ActiveMQ的消息存储(八)
  9. 题意解读+详细题解-Leecode 319. 灯泡开关——Leecode每日一题系列
  10. Web前端开发笔记——第二章 HTML语言 第五节 图像标签