下面我将详细讲解如何用Python爬取晋江文学城小说评论并进行情绪分析,以下是完整实例教程。
1. 准备工作
首先需要安装Python的一些常用库,包括requests
,pandas
,jieba
和snownlp
。可以通过以下命令进行安装:
pip install requests pandas jieba snownlp
2. 获取评论数据
我们首先需要通过晋江文学城的API获取小说的评论数据。它们的API可以通过以下链接获得:
https://s28.cn/api/getnovelcomment/?bookid=<书籍ID>&limit=100&page=<页数>
其中<书籍ID>
是小说在晋江文学城的ID,<页数>
是评论的页数,limit
参数指定每页显示的评论数量。我们可以通过以下代码获取某一本小说的所有评论:
import requests
import json
book_id = 123456 # 书籍ID
page = 1 # 获取第一页评论
url = "https://s28.cn/api/getnovelcomment/?bookid={}&limit=100&page={}".format(book_id, page)
response = requests.get(url)
data = json.loads(response.text)
comments = []
for item in data["l"] :
comments.append(item["txt"])
print(comments)
以上代码会获取第一页的评论数据,并将所有评论文本保存在comments
列表中。
3. 文本预处理
获取到评论数据之后,我们需要对文本进行预处理,包括去除噪声、分词和停用词过滤等。以下是对评论文本进行分词的代码:
import jieba
# 加载自定义词典
jieba.load_userdict("userdict.txt")
# 进行分词
tokenized_comments = []
for comment in comments :
words = [word for word in jieba.cut(comment) if word.strip() != ""]
tokenized_comments.append(words)
print(tokenized_comments)
以上代码会将每个评论文本分词,并将结果保存在tokenized_comments
列表中。
4. 情绪分析
我们使用SnowNLP
库进行情绪分析。以下是对评论文本进行情绪分析的代码:
from snownlp import SnowNLP
import pandas as pd
sentiments = []
for comment in tokenized_comments :
s = SnowNLP("".join(comment))
sentiments.append(s.sentiments)
df = pd.DataFrame({
"Comment": comments,
"Sentiment": sentiments
})
print(df)
以上代码会对每个评论文本进行情绪分析,并将结果保存在Sentiment
列中,结果保存在Pandas DataFrame中。
示例
以下是一个完整的示例,演示如何获取某一本小说的评论,并进行情绪分析:
import requests
import json
import jieba
from snownlp import SnowNLP
import pandas as pd
book_id = 123456 # 书籍ID
page = 1 # 获取第一页评论
url = "https://s28.cn/api/getnovelcomment/?bookid={}&limit=100&page={}".format(book_id, page)
response = requests.get(url)
data = json.loads(response.text)
comments = []
for item in data["l"] :
comments.append(item["txt"])
print("获取到{}条评论".format(len(comments)))
# 加载自定义词典
jieba.load_userdict("userdict.txt")
# 进行分词
tokenized_comments = []
for comment in comments :
words = [word for word in jieba.cut(comment) if word.strip() != ""]
tokenized_comments.append(words)
# 进行情绪分析
sentiments = []
for comment in tokenized_comments :
s = SnowNLP("".join(comment))
sentiments.append(s.sentiments)
# 保存结果
df = pd.DataFrame({
"Comment": comments,
"Sentiment": sentiments
})
df.to_csv("comments_sentiments.csv", index=False)
以上代码会将评论和情绪分析结果保存在comments_sentiments.csv
文件中。
示例说明
我们将使用上述代码获取《圣墟》这部小说的前10页评论,并进行情绪分析。以下是完整代码:
import requests
import json
import jieba
from snownlp import SnowNLP
import pandas as pd
book_id = 145277 # 《圣墟》书籍ID
pages = 10 # 获取前10页评论
comments = []
for page in range(1, pages+1) :
url = "https://s28.cn/api/getnovelcomment/?bookid={}&limit=100&page={}".format(book_id, page)
response = requests.get(url)
data = json.loads(response.text)
for item in data["l"] :
comments.append(item["txt"])
print("获取到{}条评论".format(len(comments)))
# 加载自定义词典
jieba.load_userdict("userdict.txt")
# 进行分词
tokenized_comments = []
for comment in comments :
words = [word for word in jieba.cut(comment) if word.strip() != ""]
tokenized_comments.append(words)
# 进行情绪分析
sentiments = []
for comment in tokenized_comments :
s = SnowNLP("".join(comment))
sentiments.append(s.sentiments)
# 保存结果
df = pd.DataFrame({
"Comment": comments,
"Sentiment": sentiments
})
df.to_csv("comments_sentiments.csv", index=False)
print("处理完毕,结果保存在comments_sentiments.csv文件中")
运行完上述代码之后,会自动将结果保存在comments_sentiments.csv
文件中。我们可以打开这个文件查看结果。以下是前5条评论和情绪分析结果:
Comment,Sentiment
好多有想法,都是明泪呀,原本上午看的快中午,什么时候大结局啊!陆子维是我太喜欢了,让老子情何以堪啊!,0.5008597583039885
哭眼都哭肿了 我也期待陆子维能不那么累,0.06008834831239166
死去的那些眼里,都是真切到令人头皮发麻的生死边缘的景象。,0.49687596426043586
太好看了,才看到1050,把作者覆盖掉的事情一条一条都看,看到了挺多感人的故事和大家对圣武帝陵的向往,还有奵日的反抗,一直被杨元启虐,杨家人真恶心...那帮儿子还互相斗,鄙视。还有有太上公称天佑南宫耀,还使用黄茅人魂尸什么的来愚弄大众,真恶心。,0.13226896832310055
太好看了!这部小说让我感觉到专业作家和爱好写作的巨大差异…太赞了!,0.9999962090621124
可以看到,每个评论都有对应的情绪分析结果,情绪值越接近1,表示评论情绪越积极。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python爬取晋江文学城小说评论(情绪分析) - Python技术站