
在社交媒体成为舆论主阵地的当下,爬取并分析社交网络评论数据已成为企业舆情监控、用户需求挖掘、品牌口碑分析的核心手段。本文将以实战视角,完整讲解如何使用 Python 爬取社交网络评论数据,并基于自然语言处理技术完成情感分析,从数据采集到结果可视化形成全流程闭环,帮助你快速掌握这一核心技能。
本次实战围绕 “数据爬取 - 数据清洗 - 情感分析 - 结果可视化” 四大环节展开,核心依赖的 Python 库及作用如下:
首先通过 pip 安装所需依赖库,
以某社交平台商品评论区为例(本文以公开测试页面为例,避免爬取受限数据),演示评论数据的爬取过程。
爬取的核心步骤为:模拟浏览器请求 → 解析 HTML 提取评论内容 → 处理分页 → 数据存储。以下是完整爬取代码:
python
运行
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
# 配置请求头,模拟浏览器访问(避免被反爬识别)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Accept-Language": "zh-CN,zh;q=0.9",
"Referer": "https://www.example.com/" # 替换为目标网站
}
# 定义爬取函数
def crawl_comments(base_url, page_num):
"""
爬取指定页数的评论数据
:param base_url: 评论页面基础URL
:param page_num: 要爬取的页数
:return: 评论列表
"""
comments_list = []
for page in range(1, page_num + 1):
try:
# 构造分页URL(不同网站分页参数不同,需根据实际调整)
url = f"{base_url}?page={page}"
response = requests.get(url, headers=headers, timeout=10)
response.encoding = "utf-8" # 统一编码,避免乱码
# 解析页面
soup = BeautifulSoup(response.text, "html.parser")
# 定位评论节点(需根据目标网站HTML结构调整class/id)
comment_nodes = soup.find_all("div", class_="comment-content")
# 提取评论内容
for node in comment_nodes:
comment = node.get_text(strip=True)
if comment: # 过滤空评论
comments_list.append({"page": page, "comment": comment})
print(f"第{page}页爬取完成,共获取{len(comment_nodes)}条评论")
time.sleep(1) # 加延迟,避免请求过快被封IP
except Exception as e:
print(f"第{page}页爬取失败:{str(e)}")
continue
return comments_list
# 执行爬取(替换为实际目标URL,此处为示例)
if __name__ == "__main__":
target_url = "https://www.example.com/product/comments" # 替换为真实评论页URL
total_pages = 5 # 爬取5页评论
comments_data = crawl_comments(target_url, total_pages)
# 转为DataFrame,便于后续处理
df = pd.DataFrame(comments_data)
# 保存为CSV文件,避免重复爬取
df.to_csv("social_comments.csv", index=False, encoding="utf-8-sig")
print(f"爬取完成!共获取{len(df)}条评论,已保存至social_comments.csv")find_all 的参数(class_/id)需通过浏览器 F12 分析目标网站 HTML 结构调整,这是爬虫开发的核心;utf-8 编码,避免中文评论乱码;爬取数据后,使用 snownlp 完成情感分析,该库专为中文优化,无需额外训练即可输出情感得分(0-1,越接近 1 越正面,越接近 0 越负面)。
python
运行
import pandas as pd
from snownlp import SnowNLP
import matplotlib.pyplot as plt
# 设置中文字体,避免图表乱码
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# 读取爬取的评论数据
df = pd.read_csv("social_comments.csv", encoding="utf-8-sig")
# 定义情感分析函数
def analyze_sentiment(comment):
"""
计算单条评论的情感得分
:param comment: 评论文本
:return: 情感得分、情感标签
"""
try:
s = SnowNLP(comment)
score = s.sentiments # 情感得分(0-1)
# 根据得分划分标签
if score >= 0.7:
label = "正面"
elif score <= 0.3:
label = "负面"
else:
label = "中性"
return score, label
except Exception as e:
print(f"情感分析失败:{comment} | 错误:{str(e)}")
return 0.5, "中性" # 异常评论标记为中性
# 批量处理评论
df["sentiment_score"] = df["comment"].apply(lambda x: analyze_sentiment(x)[0])
df["sentiment_label"] = df["comment"].apply(lambda x: analyze_sentiment(x)[1])
# 保存分析结果
df.to_csv("comments_sentiment.csv", index=False, encoding="utf-8-sig")
print("情感分析完成!结果已保存至comments_sentiment.csv")
# 统计情感分布
sentiment_count = df["sentiment_label"].value_counts()
print("\n情感分布统计:")
print(sentiment_count)
# 可视化情感分布
plt.figure(figsize=(8, 6))
sentiment_count.plot(kind="pie", autopct="%1.1f%%", colors=["#66b3ff", "#ff9999", "#99ff99"])
plt.title("社交网络评论情感分布")
plt.ylabel("") # 隐藏y轴标签
plt.savefig("sentiment_distribution.png", dpi=300, bbox_inches="tight")
plt.show()plt.rcParams 配置中文字体,解决 matplotlib 中文显示方块的问题;SnowNLP(comment).sentiments 输出 0-1 的情感得分,得分越高代表情感越正面;snownlp 是通用型情感分析库,若需适配特定行业(如电商、美妆),可通过以下方式优化:
snownlp 的内置词典,添加行业专属词汇(如 “性价比高”“物流慢”);若目标社交平台为动态渲染页面(如基于 Vue/React 的评论区),需替换爬虫方案:
Selenium/Playwright 模拟浏览器渲染,获取动态加载的评论;爬取社交网络数据时需遵守《网络安全法》《个人信息保护法》:
本文完整实现了 “Python 爬取社交网络评论 + 情感分析” 的全流程,从环境搭建、数据爬取,到情感计算、结果可视化,覆盖了核心代码与关键技巧。通过这套方案,你可以快速落地社交网络评论分析场景:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。