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实现读取并显示图片的两种方法

    Python实现读取并显示图片的两种方法 在Python中,我们可以使用多种库来读取和显示图片,其中最常用的是Pillow和OpenCV库。本攻略将介绍如何使用这两个库来读取和显示图片。 方法一:使用Pillow库 Pillow是Python中最常用的图像处理库之一,它可以用于读取、处理和显示各种类型的图像。以下是一个示例代码,演示如何使用Pillow库读取…

    python 2023年5月15日
    00
  • IronPython连接MySQL的方法步骤

    以下是”IronPython连接MySQL的方法步骤”的详细讲解。 环境准备 在开始之前,您需要事先准备以下环境: 安装 IronPython 运行环境,IronPython 支持 .NET Framework 4.0 或更高版本。 安装 MySQL 数据库,并创建测试表(例如 employee)和数据(例如 id=1, name=’Alice’)。 步骤 …

    python 2023年5月31日
    00
  • Python爬虫之网页图片抓取的方法

    Python爬虫之网页图片抓取的方法 在Python爬虫中,网页图片的抓取是一项基本任务。下面介绍网页图片抓取的方法和实例。 1. 查找图片链接 在抓取图片前,需要先找到图片对应的链接。可以通过BeautifulSoup库和正则表达式进行图片链接的查找。 1.1 使用BeautifulSoup库查找图片链接 使用BeautifulSoup库可以方便地在网页中…

    python 2023年5月14日
    00
  • python 动态调用函数实例解析

    Python动态调用函数实例解析 在Python中,我们可以使用动态调用函数的方式来实现更加灵活的编程。本文将介绍Python动态调用函数的实现方式,包括使用函数名字符串、使用getattr函数、使用字典等方式,并提供两个示例。 使用函数名字符串 在Python中,我们可以使用函数名字符串来动态调用函数。以下是一个示例: def add(x, y): ret…

    python 2023年5月15日
    00
  • Python 简单数值递归

    首先需要理解“递归”的概念:递归是一种解决问题的方法,它把一个问题分解为越来越小的子问题,直到问题的规模小到可以被很简单直接求解的地步。复杂问题分解成的多个子问题,不断调用自身函数,最终将所有结果合并在一起得到最终答案,就是递归。 Python中我们可以使用函数自身的调用来实现递归。在进行数值递归时,常常需要传入一个参数作为递归过程中进行计算的变量来实现递归…

    python-answer 2023年3月25日
    00
  • python基础之基本运算符

    在Python中,基本运算符是用于执行基本数学运算的符号。本文将详细介绍Python中的基本运算符,包括算术运算符、比较运算符、逻辑运算符、位运算符和赋值运算符等。 算术运算符 Python中的算术运算符包括加法、减法、乘法、除法、取模和幂运算。以下是算术运算符的示例: a = 10 b = 3 print(a + b) # 加法 print(a – b) …

    python 2023年5月14日
    00
  • Python基础之元编程知识总结

    Python基础之元编程知识总结 元编程指的是通过编写代码来操作其他代码,Python提供了一些元编程的工具和技术,本文将对这些内容进行总结。 1. 装饰器 装饰器是一种使函数或类等对象作为参数,返回修改后的对象的函数,通常用于增强或修改函数的功能。下面是一个计时器装饰器的示例: import time def timer(func): def wrappe…

    python 2023年5月14日
    00
  • Python常见数字运算操作实例小结

    下面是详细讲解“Python常见数字运算操作实例小结”的完整攻略。 Python常见数字运算操作 Python是一种强大的编程语言,提供了丰富的数字运算操作。下面介绍Python常见的数字运算操作。 加法、减法、乘法和除法 加法、减法、乘法和除法是Python中最基本的数字运算操作,可以使用加号、减号、乘号和除号来实现。 下面是一个Python实现加法、减法…

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