Selenium36万条数据告诉你:网易云音乐热评究竟有什么规律?

简介: Selenium36万条数据告诉你:网易云音乐热评究竟有什么规律?

网易云音乐火不火我不知道,可是评论很火,之前也见过不少的帖子抓取网易云音乐评论,今天咱们也来试试

这篇文章主要介绍了python selenium爬取网易云音乐热评,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Selenium安装

在此之前我们首先要准备好selenium的配置和安装,如下:

selenium可以直接可以用pip安装。

pip install selenium

chromedriver安装

要注意的是chromedriver的版本一定要与Chrome的版本一致,不然就不起作用。

有两个下载地址分别如下:

1、http://chromedriver.storage.googleapis.com/index.html

2、https://npm.taobao.org/mirrors/chromedriver/

当然,你首先需要查看你的Chrome版本,在浏览器中输入

chrome://version 即可查看浏览器版本信息

目标确定

我们可以选择任意自己喜欢的音乐来采集评论,我这里就以 岁月神偷 为例来采集36万+条评论然后来做可视化分析

 

导入所需模块

以下为我们此次爬取网易云热评所需的python库

import random
from selenium import webdriver
from icecream import ic
import time
import csv

目标网址

我们要获取的网易云音乐链接如下,我们要获取的内容有该音乐下的评论作者、评论时间和评论内容

https://music.163.com/#/song?id=28285910

打开浏览器并且加载网页内容

执行如下代码之后会自动跳转到我们所要爬取的网易云音乐页面

网易云音乐相比于其他网站它的内容都嵌套在iframe中,相当于多了一个门。所以我们想要获取到内容必须先要进入到iframe中

# 驱动加载
driver = webdriver.Chrome()
 
# 打开网站
driver.get('https://music.163.com/#/song?id=28285910')
 
# 等待网页加载完成,不是死等;加载完成即可
driver.implicitly_wait(10)
 
# 定位iframe
iframe = driver.find_element_by_css_selector('.g-iframe')
 
# 先进入到iframe
driver.switch_to.frame(iframe)

我们要获取评论内容必须要拉到网页最底部才可以完全加载出div标签,这段逻辑我们交由js来实现

# 下拉页面到最底部
js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight'
driver.execute_script(js)

获取网页信息

如上分析,所有评论信息都存在网页对应的div标签之中

所以接下来我们的思路就很清晰,已经进入到了iframe中。接下俩就可以所有的div标签再去提取内部我们所需要的信息

# 获取所有评论列表 div标签
divs = driver.find_elements_by_css_selector('.itm')
print(len(divs))
 
'''
35
'''

第一页是15条热评+20条评论已经成功获取到,下一步提取我们所需要的评论内容

提取网页信息

接下来我们就在div标签中提取我们所需要的信息

咱们再提取的时候如果你会一点点js的话就可以使用id(#),class(.)的方法,

如果你不懂的话直接右键copy xpat或者selector都是可以实现的

for div in divs:
    user_name = div.find_element_by_css_selector('.cnt.f-brk a').text
    hot_cmts = div.find_element_by_css_selector('.cnt.f-brk').text.split(':')[1]
    cmts_time = div.find_element_by_css_selector('.time.s-fc4').text
 
    ic(user_name, hot_cmts, cmts_time)  
    
'''
ic| user_name: '什么事都让我分心'
    hot_cmts: '上个月你结婚了,新娘和你很般配,嗯。你从当年的小男生长成了大男孩。亲她的时候,我突然想起高二那个中午,你偷亲我,你不知道的是,其实当时我没有睡着。现在我也有了女朋友,准备明年结婚了,祝彼此幸福。'
    cmts_time: '2016年4月13日'
ic| user_name: '吴繁繁'
    hot_cmts: '枕在奶奶腿上听这首歌,奶奶七十多,像个好奇宝宝一样用手指小心地划着我的手机屏幕,看看歌词看看封面,把手机凑近耳朵听。时间是让人猝不及防的东西。'
    cmts_time: '2015年7月12日'
ic| user_name: 'jjjkkklllmmm'
    hot_cmts: '刚进大学寝室的时候,发现床板上有人用记号笔画了一张请假条,请假原因是毕业,离校时间是6.20,返校时间是永不。 其实老师唯一没骗我们的一句话就是'
    cmts_time: '2016年5月13日'
ic| user_name: '南说哦'
    hot_cmts: '大家都说我的性子很慢,其实我也可以很快 比如,后面有狗追我 或者,你在前面等我'
    cmts_time: '2017年5月21日'
ic| user_name: '_时光慢点_VI'
    hot_cmts: '听歌的时候,旋律永远是第一感觉,然后才是歌词,歌词过后才是细节。
               就像读小说,一开始只对剧情感兴趣,慢慢你开始琢磨小说中的人物,最后才发掘小说的内涵。'
    cmts_time: '2015年2月9日'
ic| user_name: '刘家鑫很蠢'
    hot_cmts: ('逛留言板上看到的一句话 "我对你这么好 你却总这样不冷不热的 可我毫无办法 谁叫一开始主动的人是我 偶尔也会想想 当我终于消失在追逐你的长途里 '
               '某个夜里你的手机微微一震 你会不会恍然地以为 还是我给你的温柔"一个恍惚瞬间戳到泪点。')
    cmts_time: '2016年4月26日'
'''

数据保存

数据成功提取接下来我们将数据保存在csv中便于后续可视化展示

f = open('suiyue.csv', mode='a', encoding='utf-8-sig', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '用户名称',
    '评论时间',
    '评论内容'
])
 
dit = {
            '用户名称': user_name,
            '评论时间': cmts_time,
            '评论内容': hot_cmts
        }
        csv_writer.writerow(dit)

多页获取

我们定个小目标,先获取300页数据

for page in range(1, 300+1):
    print(f'-------------正在抓取第{page}页-------------')
    time.sleep(random.random() * 3)  # 延时防止被反爬
    spider_page()
    # 点击翻页
    driver.find_element_by_css_selector('.znxt').click()

总共获取了3000条测试数据,如果你有时间和兴趣可以获取更多哈

数据处理

接下来就是对数据去重和去空处理了,然后随机抽取五条数据展示如下:

# 读取数据
rcv_data = pd.read_csv('./岁月神偷.csv', encoding='gbk')
 
# 删除重复记录
rcv_data = rcv_data.drop_duplicates()
# 删除缺失值
rcv_data = rcv_data.dropna()
 
# 抽样展示5条数据
print(rcv_data.sample(5))
 
'''
                 用户名称          评论时间                           评论内容
153   清风不识字何故乱翻书_2027  11月25日 22:21  时间是让人猝不及防的东西,我的青春,随着这首歌结束了。。。
1796            小花不快乐   9月21日 22:34                    对不起 是对我自己说的
610            烟非烟雨亦雨   11月9日 04:23                         [多多比耶]
1817            气氕氘氚氙   9月21日 11:02                             3Q
1048            颜颜柒柒柒  10月21日 00:38              还好嘛,现在是21年10月21日了
'''

词频展示

文章评论出现频率最高的前十个词分别如下:

# 词频设置
all_words = [word for word in result.split(' ') if len(word) > 1 and word not in stop_words]
wordcount = Counter(all_words).most_common(10)
 
'''
('我们', '时间', '一个', '喜欢', '现在', '没有', '真的', '自己', '一起', '知道')
(187, 168, 163, 156, 150, 142, 130, 115, 104, 95)
'''

接下来我们使用气泡图和饼图来直观的展示如下:

词云展示

我们使用结巴分词

最后使用stylecloud绘制漂亮的词云图展示

gen_stylecloud(text=result,
                icon_name='fas fa-comment',
                font_path='msyh.ttc',
                background_color='white',
                output_name=pic,
                custom_stopwords=stop_words
                   )
    print('词云图绘制成功!')


情感分析

我们将评论分为积极、消极和中等

由图我们可以分析出,大多数评论者的心态还是积极向上的

def anay_data():
    all_words = [word for word in result.split(' ') if len(word) > 1 and word not in stop_words]
    positibe = negtive = middle = 0
    for i in all_words:
        pingfen = SnowNLP(i)
        if pingfen.sentiments > 0.7:
            positibe += 1
        elif pingfen.sentiments < 0.3:
            negtive += 1
        else:
            middle += 1
    print(positibe, negtive, middle)
  
'''
3856 881 11122
'''

好了今天的分析到此结束啦,有问题我们评论区见~~

相关文章
|
7月前
|
Web App开发 前端开发 IDE
Airtest-Selenium实操小课①:爬取新榜数据
Airtest-Selenium实操小课①:爬取新榜数据
|
2月前
|
数据采集 存储 JavaScript
自动化数据处理:使用Selenium与Excel打造的数据爬取管道
本文介绍了一种使用Selenium和Excel结合代理IP技术从WIPO品牌数据库(branddb.wipo.int)自动化爬取专利信息的方法。通过Selenium模拟用户操作,处理JavaScript动态加载页面,利用代理IP避免IP封禁,确保数据爬取稳定性和隐私性。爬取的数据将存储在Excel中,便于后续分析。此外,文章还详细介绍了Selenium的基本设置、代理IP配置及使用技巧,并探讨了未来可能采用的更多防反爬策略,以提升爬虫效率和稳定性。
120 4
|
4月前
|
数据采集 Python
如何用Python Selenium和WebDriver抓取LinkedIn数据并保存登录状态
本文介绍了使用Python Selenium和WebDriver库抓取LinkedIn数据的方法。首先,安装Selenium库和对应的WebDriver,然后配置爬虫代理IP以避免频繁请求被检测。接下来,设置user-agent和cookies以模拟真实用户行为,实现登录并保持状态。登录后,使用WebDriver抓取目标页面数据,如用户名、年龄、性别和简历信息。最后,强调了优化代码、处理异常和遵守使用条款的重要性,以提高效率并避免账号被封禁。
107 2
如何用Python Selenium和WebDriver抓取LinkedIn数据并保存登录状态
|
6月前
|
数据采集 Web App开发 数据处理
一步步教你用Python Selenium抓取动态网页任意行数据
使用Python Selenium爬取动态网页,结合代理IP提升抓取效率。安装Selenium,配置代理(如亿牛云),设置User-Agent和Cookies以模拟用户行为。示例代码展示如何使用XPath提取表格数据,处理异常,并通过隐式等待确保页面加载完成。代理、模拟浏览器行为和正确配置增强爬虫性能和成功率。
701 3
一步步教你用Python Selenium抓取动态网页任意行数据
|
7月前
|
Web App开发 数据采集 JavaScript
【Python爬虫】<万物可爬>Selenium+自动化测试工具 获取数据
【1月更文挑战第22天】【Python爬虫】<万物可爬>Selenium+自动化测试工具 获取数据
|
7月前
|
数据采集 中间件 Python
Scrapy框架 -- 结合selenium获取动态加载数据
Scrapy框架 -- 结合selenium获取动态加载数据
52 0
|
数据采集 中间件 Python
Scrapy框架 -- 结合selenium获取动态加载数据
Scrapy框架 -- 结合selenium获取动态加载数据
66 0
|
数据采集 JavaScript 测试技术
Python爬虫通过selenium自动化抓取淘宝的商品数据
淘宝的页面大量使用了js加载数据,所以采用selenium来进行爬取更为简单,selenum作为一个测试工具,主要配合无窗口浏览器phantomjs来使用。
858 0
|
关系型数据库 MySQL 测试技术
selenium-基于unittest的yaml数据驱动
selenium-基于unittest的yaml数据驱动
138 0
|
数据采集 存储 Web App开发
如何使用Selenium Python爬取多个分页的动态表格并进行数据整合和分析
在网络爬虫的领域中,动态表格是一种常见的数据展示形式,它可以显示大量的结构化数据,并提供分页、排序、筛选等功能。动态表格的数据通常是通过JavaScript或Ajax动态加载的,这给爬虫带来了一定的挑战。本文将介绍如何使用Selenium Python这一强大的自动化测试工具来爬取多个分页的动态表格,并进行数据整合和分析。
374 0

热门文章

最新文章