网易云热歌榜歌名与热评的高频词抓取及词云制作_weixin_47049801的博客-程序员秘密

技术标签: python  

#!/usr/bin/env python3

-- coding: utf-8 --

import re
import urllib.request
import urllib.error
import urllib.parse

def get_all_hotSong(): #获取热歌榜所有歌曲名称
url=‘http://music.163.com/discover/toplist?id=3778678’ #网易云云音乐热歌榜url
header={ #请求头部
‘User-Agent’:‘Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36’
}
request=urllib.request.Request(url=url, headers=header)
html=urllib.request.urlopen(request).read().decode(‘utf8’) #打开url
html=str(html) #转换成str
pat1=r’

’ #进行第一次筛选的正则表达式
result=re.compile(pat1).findall(html) #用正则表达式进行筛选
result=result[0] #获取tuple的第一个元素

pat2=r'<li><a href="/song\?id=\d*?">(.*?)</a></li>' #进行歌名筛选的正则表达式

hot_song_name=re.compile(pat2).findall(result)    #获取所有热门歌曲名称


return hot_song_name

def get_name(hot_song_name):
fhandle=open(’./song_name.txt’,‘a’,encoding=‘utf-8’) #写入文件
fhandle.write(hot_song_name+’\n’)
fhandle.close()
hot_song_name=get_all_hotSong() #获取热歌榜所有歌曲名称

num=0
while num < 192: #保存所有热门歌名
print(‘正在抓取第%d首歌…’%(num+1))
get_name(hot_song_name[num])
print(‘第%d首歌名抓取成功’%(num+1))
num+=1

#制作网易云热歌榜歌名词云
#!/usr/bin/env python3

-- coding: utf-8 --

“”"
Created on Mon Jun 11 20:34:46 2018

@author: Frances
“”"

import jieba.posseg as pseg
import matplotlib.pyplot as plt
from os import path

from scipy.misc import imread

from wordcloud import WordCloud
def extract_words():
with open(‘song_name.txt’,‘r’,encoding=‘utf-8’) as f:
hotsong_names = f.readlines()

stop_words = set(line.strip() for line in open('StopWords.txt',encoding='utf-8'))

newslist = []

for name in hotsong_names:
    if name.isspace():
        continue
    
    # segment words line by line
    word_list = pseg.cut(name)     
    for word, flag in word_list:
        if not word in stop_words and flag == 'n':
            newslist.append(word)

d = path.dirname(__file__)
mask_image = imread(path.join(d, "adorablecat.png"))

content = ' '.join(newslist)
wordcloud = WordCloud(font_path='simhei.ttf', background_color="white", mask=mask_image, max_words=40).generate(content)

# Display the generated image:
plt.imshow(wordcloud)
plt.axis("off")
wordcloud.to_file('wordcloud1.jpg')
plt.show()

if name == “main”:
extract_words()

-- coding: utf-8 --

“”"
Created on Sun Jun 10 16:59:36 2018

@author: Frances
“”"

#!/usr/bin/env python3

-- coding: utf-8 --

import re
import urllib.request
import urllib.error
import urllib.parse
import json

def get_all_hotSong(): #获取热歌榜所有歌曲名称和id
url=‘http://music.163.com/discover/toplist?id=3778678’ #网易云云音乐热歌榜url
header={ #请求头部
‘User-Agent’:‘Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36’
}
request=urllib.request.Request(url=url, headers=header)
html=urllib.request.urlopen(request).read().decode(‘utf8’) #打开url
html=str(html) #转换成str
pat1=r’

’ #进行第一次筛选的正则表达式
result=re.compile(pat1).findall(html) #用正则表达式进行筛选
result=result[0] #获取tuple的第一个元素

pat2=r'<li><a href="/song\?id=\d*?">(.*?)</a></li>' #进行歌名筛选的正则表达式
pat3=r'<li><a href="/song\?id=(\d*?)">.*?</a></li>'  #进行歌ID筛选的正则表达式
hot_song_name=re.compile(pat2).findall(result)    #获取所有热门歌曲名称
hot_song_id=re.compile(pat3).findall(result)    #获取所有热门歌曲对应的Id

return hot_song_name,hot_song_id

def get_hotComments(hot_song_name,hot_song_id):
url=‘http://music.163.com/weapi/v1/resource/comments/R_SO_4_’ + hot_song_id + ‘?csrf_token=’ #歌评url
header={ #请求头部
‘User-Agent’:‘Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36’
}
#post请求表单数据
data={‘params’:‘zC7fzWBKxxsm6TZ3PiRjd056g9iGHtbtc8vjTpBXshKIboaPnUyAXKze+KNi9QiEz/IieyRnZfNztp7yvTFyBXOlVQP/JdYNZw2+GRQDg7grOR2ZjroqoOU2z0TNhy+qDHKSV8ZXOnxUF93w3DA51ADDQHB0IngL+v6N8KthdVZeZBe0d3EsUFS8ZJltNRUJ’,‘encSecKey’:‘4801507e42c326dfc6b50539395a4fe417594f7cf122cf3d061d1447372ba3aa804541a8ae3b3811c081eb0f2b71827850af59af411a10a1795f7a16a5189d163bc9f67b3d1907f5e6fac652f7ef66e5a1f12d6949be851fcf4f39a0c2379580a040dc53b306d5c807bf313cc0e8f39bf7d35de691c497cda1d436b808549acc’}
postdata=urllib.parse.urlencode(data).encode(‘utf8’) #进行编码
request=urllib.request.Request(url,headers=header,data=postdata)
response=urllib.request.urlopen(request).read().decode(‘utf8’)
json_dict=json.loads(response) #获取json
hot_comment=json_dict[‘hotComments’] #获取json中的热门评论

num=0
fhandle=open('./Song_Comments.txt','a',encoding='UTF-8')  #写入文件
fhandle.write(hot_song_name+':'+'\n')

for item in hot_comment:
    num+=1
    fhandle.write(str(num)+'.'+item['content']+'\n')
fhandle.write('\n==============================================\n\n')
fhandle.close()

hot_song_name,hot_song_id=get_all_hotSong() #获取热歌榜所有歌曲名称和id

num=0
while num < len(hot_song_name): #保存所有热歌榜中的热评
print(‘正在抓取第%d首歌曲热评…’%(num+1))
get_hotComments(hot_song_name[num],hot_song_id[num])
print(‘第%d首歌曲热评抓取成功’%(num+1))
num+=1

#制作网易云热歌榜热评词云

-- coding: utf-8 --

“”"
Created on Mon Jun 11 10:10:32 2018

@author: Frances
“”"

#!/usr/bin/env python3

-- coding: utf-8 --

“”"
Created on Mon Jun 11 10:01:11 2018

@author: fanzhengyi
“”"

import jieba.posseg as pseg
import matplotlib.pyplot as plt
from os import path

from scipy.misc import imread

from wordcloud import WordCloud
def extract_words():
with open(‘Song_Comments.txt’,‘r’,encoding=‘utf-8’) as f:
hotsong_comments = f.readlines()

stop_words = set(line.strip() for line in open('StopWords.txt',encoding='utf-8'))

newslist = []

for comment in hotsong_comments:
    if comment.isspace():
        continue
    
    # segment words line by line
    word_list = pseg.cut(comment)     
    for word, flag in word_list:
        if not word in stop_words and flag == 'n':
            newslist.append(word)

d = path.dirname(__file__)
mask_image = imread(path.join(d, "mickey.png"))

content = ' '.join(newslist)
wordcloud = WordCloud(font_path='simhei.ttf', background_color="white", mask=mask_image, max_words=40).generate(content)

# Display the generated image:
plt.imshow(wordcloud)
plt.axis("off")
wordcloud.to_file('wordcloud.jpg')
plt.show()

if name == “main”:
extract_words()

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_47049801/article/details/109353110

智能推荐

robotframework 自动化测试 (一)环境搭建_蘑菇ding的博客-程序员资料

最近开始接触编写自动化测试用例,要搭建 robot framework 环境,配置了将近一天,记录以备以后参考:环境:win10首先列出要下载安装的一些东西:1、安装pythonhttps://www.python.org/ 双击运行,选好路径直接安装就OK(我的路径D:\Python27)...

ffmpeg android 编译选项,FFmpeg学习—android 编译 ffmpeg 集成fdk-aac、x264 精简解码库..._哇塞5G的博客-程序员资料

#!/bin/bashNDK="/home/wh/android-ndk-r12b"SYSROOT=$NDK/platforms/android-9/arch-arm/TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64function build_one{./configure --prefix=$PR...

苹果7防水吗_苹果手机到底防不防水?_weixin_39895181的博客-程序员资料

苹果手机到底防不防水问题,分享一下自己的看法吧:迄今为止,没有一款 iPhone是真正意义的防水。苹果7代以前的机器不用说,没有任何的防水性能。7代以后屏幕四圈增加了密封胶,卡槽,按键设计了防水胶垫,但这些只能说密封性大大提高,只能防止生活水溅,小的雨水,手汗之类的,而不是能完全抵抗水龙头直接冲洗或者整个浸泡到水里那种。手机内部元器件精密复杂,进水受潮会有很大影晌,后期出问题的概率非常大,有的用户...

win10上编译flink1.10.0以运行在cdh6.3.0环境中_benpaodexiaowoniu的博客-程序员资料

在https://github.com/apache/flink/releases处点击下载flink-release-1.10.0.tar包,在win10的apache-maven-3.5.4中配置阿里源虽然阿里源https://maven.aliyun.com/mvn/view可以看到网友普遍使用的下面的库: &lt;mirror&gt; &lt;id&gt;alim...

电子计算机专业vs土木工程专业,2021工科就业前景好的专业排名_weixin_39917291的博客-程序员资料

2021工科就业前景好的专业排名2021-01-19 16:45:21文/陈宇航本文中,小编整理了工科就业前景好的专业排名,快来看看吧!工科就业前景好的专业排名1.土木工程专门培养掌握各类土木工程学科的基本理论和基本知识,能在房屋建筑、地下建筑、道路、隧道、桥梁建筑、港口及近海结构与设施工作的人员。2.机械设计制造及其自动能在机械工程领域从事机械产品研发、设计、制造、项目管理等工作的复合型工程技术...

BZOJ 4540: [Hnoi2016]序列 莫队算法_NOIAu的博客-程序员资料

Time Limit: 20 Sec Memory Limit: 512 MB Submit: 1412 Solved: 663Description给定长度为n的序列:a1,a2,…,an,记为a[1:n]。类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,…,ar-1,ar。若1≤l≤s≤t≤r≤n,则称a[s:t]是a[l:r]的子序列。现在有q个询问,每个询问给定两个数l

随便推点

DPDK2.2.0开发杂记一—— 网口抓包分片禁止及MTU配置_zangchang的博客-程序员资料

1. 禁止网口抓包分片        DPDK收发包是基础核心模块,网卡需要应用进程进行配置并启动,测试过程中发现DPDK驱动igb_uio抓包可能会出现mbuf串。当网络包比较大时,DPDK驱动会把包进行分片放到一组Mbuf中并进行链接成串,应用进程从接收队列中取出的可能就是Mbuf串,如果要进行深层解析需要应用进程自己进行重组,给应用进程造成负担。在实际应用中我们可以增大Mbuf大小禁止掉DP...

electron-vue项目 自动更新解决方案(附代码)_凉音、的博客-程序员资料

electron-vue的创建过程这里不再赘述。相信已经搜索到这篇文章的你,已经完成了这个过程,下面我们进入正题前言如果您的electron版本还是2.xx版本,需要更新electron版本,更新方式戳这里https://blog.csdn.net/weixin_43272648/article/details/104339699第一步,安装electron-updater依赖npminstallelectron-updater--save第二步,配置packa...

扒一扒国内做得比较优秀的无人机倾斜摄影公司_济南赛尔无人机的博客-程序员资料_倾斜摄影无人机

倾斜摄影技术在国内崛起说实话倾斜摄影虽然是作为一项国外引进的航空摄影技术,行业核心软件smart3D(CC)也是歪果仁出品,国内出的几款做实景三维的软件不客气的说大部分是处于又贵效果又不好的状态,毕竟软件开发是高投入高风险。言归正传,倾斜摄影技术的诞生促进了倾斜摄影硬件产品的发展,这一点,国内公司的产品研发和技术实力可以说不比国外的弱,如果能在国内找到适合的倾斜摄影产品和服务团队,就不必去...

vue-cli3 多页面 RangeError: Maximum call stack size exceeded_Ray_1234567的博客-程序员资料

昨天给项目配置vue多页面,结果一跑起来就报错: RangeError: Maximum call stack size exceeded - Array.join - loader.js:228 Function.Module._findPath internal/modules/cjs/loader.js:228:56 - loader.js:591 Funct...

【iOS-Cocos2d游戏开发之二十】精灵的基础知识点总汇(位图操作/贴图更换/重排z轴等)及制作简单遮盖层!..._weixin_33690963的博客-程序员资料

最近写了不少Cocos2d的博文了,那么由于Himi介绍的一般都是比较容易出错的问题或者比较受到关注的知识点,所以不少童鞋要求写个基础篇,那么这里Himi就举例最常用的精灵CCSprite来详细的介绍一些吧; 考虑到网上对于Cocos2d-iphone的中文教程已有很多,所以这里Himi会拿出一些教程没有提到的基础知识点来分享; 首先我们来创...

SpringBoot - 解决跨域请求问题_瞎胡扯的博客-程序员资料_allowedheaders

现在项目开发中,前后端分离越来越流行了,但在前后端分离通过 Ajax访问时会存在一个跨域的问题。即由于浏览器的安全性限制,不允许AJAX访问协议不同、域名不同、端口号不同的数据接口,否则会出报No 'Access-Control-Allow-Origin' header is present on the requested resource.错误。如下所示:强大的 Spring Boot支持通过设置CORS(跨源资源共享)来解决跨域请求问题。具体如下几种方式可以进行配置,我们选择一种...

推荐文章

热门文章

相关标签