日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python歌词统计单词词频_Python爬虫网易云歌词及词频统计

發布時間:2024/1/23 python 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python歌词统计单词词频_Python爬虫网易云歌词及词频统计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

采用詞云對鄧紫棋的熱門前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)

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的python歌词统计单词词频_Python爬虫网易云歌词及词频统计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。