Python代码实现:对B站天问一号事件评论进行情感分析与可视化
```python import requests from bs4 import BeautifulSoup import re import jieba.analyse import matplotlib.pyplot as plt from wordcloud import WordCloud import numpy as np import pandas as pd from snownlp import SnowNLP # 爬取Bilibili网站天问一号事件评论 def get_comments(url, headers): response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') comments = soup.find_all('div', class_='card') comment_list = [] for comment in comments: content = comment.find('span', class_='card-subtitle').get_text() comment_list.append(content) return comment_list # 情感分析 def sentiment_analysis(comment_list): sentiment_scores = [] for comment in comment_list: sentiment_scores.append(SnowNLP(comment).sentiments) return sentiment_scores # 绘制不同情感类型评论的数量分布饼状图 def draw_pie_chart(sentiment_scores): sentiment_counts = {"正面": 0, "中性": 0, "负面": 0} for score in sentiment_scores: if score > 0.6: sentiment_counts["正面"] += 1 elif score < 0.4: sentiment_counts["负面"] += 1 else: sentiment_counts["中性"] += 1 labels = list(sentiment_counts.keys()) sizes = [sentiment_counts[key] for key in labels] plt.figure(figsize=(8, 8)) plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90) plt.axis('equal') plt.title("不同情感类型评论的数量分布") plt.show() # 绘制每月评论量统计曲线图 def draw_line_chart(comments): dates = [comment['date'] for comment in comments] counts = [len(comments.loc[comments['date'] == date]) for date in dates] plt.figure(figsize=(10, 6)) plt.plot(dates, counts, marker='o') plt.xlabel("日期") plt.ylabel("评论量") plt.title("每月评论量统计图") plt.xticks(rotation=45) plt.grid(True) plt.show() # 绘制评论获赞数排名前十柱状图 def draw_bar_chart(comments): sorted_comments = comments.sort_values(by='likes', ascending=False).head(10) words = [comment['content'] for comment in sorted_comments] likes = [comment['likes'] for comment in sorted_comments] plt.figure(figsize=(10, 6)) plt.barh(range(len(words)), likes, color='skyblue') plt.yticks(range(len(words)), words) plt.xlabel("获赞数") plt.title("评论获赞数排名前十") plt.show() if __name__ == '__main__': url = "https://www.bilibili.com/video/BV1zZ4y1X7JQ" # 天问一号事件相关视频的URL headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"} comment_list = get_comments(url, headers) sentiment_scores = sentiment_analysis(comment_list) draw_pie_chart(sentiment_scores) draw_line_chart(pd.DataFrame(comment_list, columns=['content'])) draw_bar_chart(pd.DataFrame(comment_list, columns=['content'])) ``` 请注意替换`url`变量为实际的Bilibili网站天问一号事件相关视频的URL。 ######[AI写代码神器 | 1044点数解答 | 2024-06-20 10:30:59]
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)494
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)378
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)449
- Python实战:学生成绩列表转字典,深拷贝与数据修改操作全解析(字节豆包 | 254点数解答 | 2024-10-29 16:01:39)440
- 工程师必看!LoadRunner 性能测试标准流程全揭秘 (百度文心 | 215点数解答 | 2023-11-09 18:25:31)392
- 手把手教你实现完整品牌列表案例:含 HTML、CSS 与 JS 代码(阿里通义 | 796点数解答 | 2024-11-18 20:40:15)303
- Python 求解序列区间总和:索引转换、边界处理与优化策略(字节豆包 | 320点数解答 | 2025-11-05 19:59:35)94
- C++ 实现序列区间查询:计算以 l 开头子区间总和及注意要点(字节豆包 | 543点数解答 | 2025-11-05 19:59:56)56
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)348
- Java调用Python接口中文乱码?设置UTF - 8编码一招解决!(讯飞星火 | 263点数解答 | 2024-06-06 17:07:59)420
- 解决Java调用Python接口中文乱码问题:设置UTF - 8编码全攻略(讯飞星火 | 160点数解答 | 2024-06-06 17:18:39)443
- Java调用Python接口中文乱码问题:字符编码统一解决方案(讯飞星火 | 344点数解答 | 2024-06-06 17:19:55)549