NetCloud——一个网易云音乐评论抓取和分析的Python库
qq华夏命运的抉择,dy天堂,能飞英语网
在17的四月份,我曾经写了一篇关于网易云音乐爬虫的文章,还写了一篇关于评论数据可视化的文章。在这大半年的时间里,有时会有一些朋友给我发私信询问一些关于代码方面的问题。所以我最近抽空干脆将原来的代码整理了一下,做成了一个Python模块NetCloud放在Pypi上了。目前只是对原来的代码做了一些整理与重构,功能还很不完善,后续打算抽空继续完善,如果有人用的话可能会长期维护下去。
目前只需要使用命令pip install NetCloud 即可以完成模块的安装,支持Windows与Linux系统,以前代码是基于python2的,现在支持Python3(我简单测试了一下python3.6应该也没问题了),python2下运行应该也基本没问题,但是考虑到编码问题,以及Python社区即将在2020年不再支持2.x的版本,所以强烈建议使用Python3.x运行模块。代码github的地址是Netcloud
关于实现功能以及一些主要接口的说明:
1.主要实现了:
- 对于一首歌曲全部评论的抓取,保存为csv文件格式
- 对于一个歌手全部热门评论的抓取,存为csv文件
- 对于一首歌曲下全部评论用户基本信息的抓取,包括:用户主页url,用户年龄,听歌次数,动态次数,用户所在地区,用户动态总数等,这些信息也存为csv文件格式
- 利用全部评论以及热门评论分词生成词云,统计关键词的频率
- 利用一首歌曲全部评论用户的信息,基于pyecharts可视化,包括:用户所在地区分布使用geo表示(地图),用户年龄的分布,用户听歌数目的分布,用户动态的数目分布,歌曲评论数量关于时间的分布等等。以前是基于matplotlib来做的,但是只能生成静态的图片,而pyecharts可以产生基于网页的交互式的显示效果,我感觉效果可能会更好一点。
- 以前抓取是单线程的,效率较低,现在支持多线程了,可以极大地提高抓取效率
2.还需要去完善的(Todolist)
- 如何很好的应对反爬。我实验发现,在开启多线程的情况下,抓取一段时间服务器可能会限制抓取(封ip),目前应对的措施主要是开启代理ip,不过如何找到较高质量的代理ip地址,就只能自己去想办法了
-目前还不支持模拟登录网易云音乐,查看个人信息,听歌记录等,不过Python里应该已经有其他模块做到了这一点,而且这个应该也不是特别难,后面有空会加上。
-目前还不支持对于歌单的批量抓取,以及获取用户听歌的详细记录,后续考虑增加。如果有这部分数据,可以深挖更多东西,比如预测用户听歌风格,对用户按听歌洗喜好分类,以及做推荐等等。
-目前的分析仅限于简单的分析统计等等,后续考虑加入更深入的NLP分析。
3.安装以及主要的函数接口
- 安装很简单,只需要 pip install NetCloud,因为模块以来于一些第三方库,所以在安装这些第三方库的时候可能会出现问题,可以参考4的说明
- 快速使用,一个简单的例子如下:
from NetCloud.NetCloudCrawler import NetCloudCrawl
from NetCloud.NetCloudAnalyse import NetCloudAnalyse
if __name__ == '__main__':
song_name = "敢爱"
song_id = 186888
singer_name = "张国荣"
singer_id = 6457
crawler = NetCloudCrawl(song_name,song_id,singer_name,singer_id)
crawler.generate_all_necessary_files(threads=10)
analyse = NetCloudAnalyse(song_name,singer_name,song_id,singer_id)
analyse.generate_all_analyse_files(threads=20)
3.1 上面的10行左右的代码就完成了对于张国荣的《敢爱》这首歌的全部评论的抓取,张国荣歌曲热门评论的抓取,以及歌曲用户基本信息的抓取,并生成了相应的词云图片,以及一些基本的可视化分析。产生的文件结构如下图所示:
首先生成文件全部都会在songs这个文件夹下,然后对于每一首歌曲会产生以歌手名字命名的文件夹,然后是歌曲名字的文件夹,最后是相应的抓取文件,比如敢爱.csv就是《敢爱》的全部评论文件,敢爱.jpg就是歌曲评论的词云图片,hot_comments.csv是歌手的热门评论文件,最后所有的可视化结果都存放在plots文件夹下,可视化文件为html文件需要在浏览器打开查看可视化结果。
3.2 模块主要是两个类,一个是NetCloudCrawl,用于数据抓取;另一个是 NetCloudAnalyse用于数据的分析。NetCloudCrawl 的 generate_all_necessary_files函数会生成必要的全部评论文件,热门评论文件,支持多线程,默认是开启10个线程抓取。NetCloudAnalyse的 generate_all_analyse_files 顾名思义会产生全部的可视化文件,首先它会抓取用户的全部信息存入文件,然后产生一系列的可视化分析文件(html格式),最后会产生评论的词云文件。基本上调用这两个函数就可以轻松使用NetCloud的主要功能了。
3.3 如果你想自定义抓取,或者不想使用提供的可视化函数接口,也可以使用模块的其他基本函数完成抓取和分析,模块的主要函数接口调用格式说明如下:
NetCloudCrawl类
- AES_encrypt(text,key,iv) 这个函数用于网易云API的解密,基本用不到,不用管
- get_params(page) 获得必要的解密参数
- get_json(url,params, encSecKey) 获取网易API json文件
- get_singer_hot_songs_ids(singer_url) 得到歌手全部热门歌曲id列表,singer_url为歌手信息页url
- generate_all_necessary_files(threads = 10) 生成全部必要的文件,包括歌手的全部热门评论文件,以及歌曲的全部评论文件
- _test 开头的均为测试函数,请不要调用
NetCloudAnalyse类
- save_users_info_to_file() 保存歌曲评论下全部用户(已去重)的信息到文件(单线程)
- threading_save_users_info_to_file(threads = 10) 采用多线程保存用户信息到文件,默认是10个线程
- save_users_info(users_url,total) 供 threading_save_users_info_to_file调用的中间函数,不用管
- load_users_url() 返回全部评论用户主页url列表,用于后续用户信息抓取
- load_users_info_csv() 从用户信息csv文件加载用户信息dataframe
- core_visual_analyse() 核心的对于评论用户信息的可视化分析,产生的html文件有12个,说明如下:
1. age_count_bar.html 年龄分布(bar 为 柱状图表示,下同)
2. agree_count_bar.html 赞同数分布
6. description_keywords_bar.html 用户简介关键词分布
7. events_count_bar.html 用户动态数目分布
8. fans_count_bar.html 用户粉丝数量分布
9. follow_count_bar.html 用户关注者数量分布
10. listening_songs_count_bar.html 用户听歌数量分布
11. users_city_geo.html 用户所在地区分布,使用地图可视化表示
12. users_location_bar.html 用户所在地区分布,使用柱状图表示
一些可视化实际的效果图如下:
- load_stopwords() 加载停用词列表
- load_all_cities() 加载中国全部城市名称列表
- generate_all_analyse_files(threads = 10) 生成全部的分析文件,包括评论关键字词云以及评论用户信息的可视化,默认线程数为10
- _test 开头的为测试文件,请不要调用
4. 一些可能会出现的问题
4.1 在pip install NetCloud 的过程中,如果是在Windows下,wordcloud 以及 pycrypto 模块也许会安装失败,此时可以去python非官方第三方库下载下载对应pyhton版本的预编译wheel文件,然后手动pip安装即可。另外,numpy 需要 numpy+mkl形式的库,也可以在这个网站下载。
4.2 由于我没有测试完全,而且代码水平有限,因此代码肯定存在一些意想不到的bug,如果您对这个模块感兴趣,在使用的过程中出现任何问题或者有任何建议,欢迎给我留言,当然最好的方式是去github提issue,地址是NetCloud,同时欢迎star 和fork,谢谢支持。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!!
点击进行留言回复
相关文章:
-
-
python如何查看网页代码
用python查看网页代码的方法:1、使用“import”导入requests包import requests2、使用requests包的get()函数通过网页...
[阅读全文]
-
-
python如何保存文本文件
python保存文本文件的方法:使用python内置的open()类可以打开文本文件,向文件里面写入数据可以用write()函数,写完之后,使用close()函...
[阅读全文]
-
python如何编写win程序
python可以编写win程序。win程序的格式是exe,下面我们就来看一下使用python编写exe程序的方法。编写好python程序后py2exe模块即可将...
[阅读全文]
-
-
-
-
-
-
网友评论