python爬取晋江文学城小说评论(情绪分析)

下面我将详细讲解如何用Python爬取晋江文学城小说评论并进行情绪分析,以下是完整实例教程。

1. 准备工作

首先需要安装Python的一些常用库,包括requestspandasjiebasnownlp。可以通过以下命令进行安装:

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技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • Python pathlib模块使用方法及实例解析

    Python pathlib模块使用方法及实例解析 Python的pathlib模块提供了一种面向对象的方式来操作文件系统路径。它可以帮助我们轻松地创建、访问和操作文件和目录。本文将详细讲解pathlib模块的使用方法和示例。 基本用法 首先,我们需要导入pathlib模块,并创建一个Path对象。然后,我们可以使用Path对象的方法来访问和操作文件和目录。…

    python 2023年5月15日
    00
  • Python内建属性getattribute拦截器使用详解

    Python内建属性getattribute拦截器使用详解 在Python中,__getattribute__方法是一个能够拦截对象属性访问的强大工具。在本文中,我们将介绍该方法的详细用法和示例。 什么是__getattribute__方法? __getattribute__方法是Python的一个内置方法,它在对象属性被访问时被调用。这个方法允许你拦截对于…

    python 2023年6月6日
    00
  • python+pyqt5实现24点小游戏

    一、介绍 24点小游戏是一种常见的数学游戏,要求玩家在给定的4个数字中选出任意3个数字,通过加减乘除的运算使得运算结果等于24。本文介绍如何使用Python和PyQt5框架实现24点小游戏。 二、实现步骤 安装PyQt5 在开始编写代码之前,需要安装PyQt5框架以便使用Qt Designer设计PyQt5窗口。安装方法: pip install PyQt5…

    python 2023年6月3日
    00
  • 详解Python 函数式复合和PyMonad*运算符

    Python函数式复合 函数式编程允许使用函数组合,将多个函数连接起来,实现更加复杂的功能。在Python中,可以使用lambda函数和reduce函数实现函数式复合。 lambda函数的格式为:lambda arguments: expression。其中,arguments为函数的参数,expression为函数的返回值。使用lambda函数可以定义匿名…

    python-answer 2023年3月25日
    00
  • python 字典修改键(key)的几种方法

    关于Python字典修改键(key)的几种方法,我们可以从以下几个方面来说明: 通过赋值的方式修改键 通过pop和update方法修改键 通过字典推导式修改键 通过赋值的方式修改键 在Python中,我们可以通过赋值的方式来修改字典中一个键的值。示例如下: dict = {‘name’: ‘Tom’, ‘age’: 18} dict[‘name’] = ‘J…

    python 2023年5月13日
    00
  • Python算法之栈(stack)的实现

    下面是详细讲解“Python算法之栈(stack)的实现”的完整攻略,包括栈的基本概念、Python实现和两个示例。 栈的基本概念 栈(stack)是一种线性数据结构,具有后进先出(IFO)的特点,即最进入的元素最先被访问。栈有两个基本操作:入栈(push)和出栈(pop)。入栈操作将元素添加到栈顶,出栈操作将栈顶元素移除并返回。栈还有一个重要的操作:看栈元…

    python 2023年5月14日
    00
  • python requests模块的使用示例

    以下是关于Python requests模块的使用示例: Python requests模块的使用示例 requests是Python中一个流行的HTTP库,可以用于向Web服务器发送HTTP请求和接收响应。以下是Python requests模块的使用示例: 发送GET请求 以下是使用requests发送GET请求的示例: import requests …

    python 2023年5月14日
    00
  • Python使用scrapy采集数据时为每个请求随机分配user-agent的方法

    Python使用scrapy采集数据时,为了防止被网站识别为爬虫而被封禁,需要经常更换请求头中的user-agent字段,使得数据请求看起来像是来自真实的浏览器。本文将介绍如何使用scrapy实现为每个请求随机分配user-agent的方法。 前置知识 在了解方法之前,需要掌握基础的scrapy知识,包括scrapy的基本用法、pipeline的作用、Scr…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部