京东商品评论分析


  转自艾派森博客 《基于Python爬虫+词云图+情感分析对某东上完美日记的用户评论分析》。该项目来源于 《腾讯云 Cloud Studio 实战训练营》的参赛作品,并在腾讯云 Cloud Studio 中运行无误。

京东商品评论取

一、研究背景

  随着互联网和社交媒体的发展,用户评论成为了消费者表达自己意见和情感的主要途径之一。对于企业来说,深入了解用户对其产品或服务的看法可以帮助他们更好地了解市场需求、产品改进的方向,以及消费者的情感倾向。因此,对用户评论进行分析已经成为了市场研究和商业决策的重要手段之一。

  完美日记作为一家知名的化妆品品牌,其在社交媒体和电商平台上拥有大量的用户评论。通过对完美日记的用户评论进行分析,可以揭示出以下几个方面的信息:

  • 消费者满意度: 通过情感分析,可以了解消费者对完美日记产品的满意度。情感分析可以判断评论中的情感倾向,如正面、负面或中性,从而判断消费者对产品的态度。
  • 产品特点: 用户评论中可能提到产品的不同特点、功能和效果。通过词云图,可以直观地了解哪些特点被频繁提及,从而了解产品的优势和劣势。
  • 市场趋势: 对用户评论进行分析可以发现市场的趋势和消费者的需求。例如,如果多数评论中提到某种产品特点,说明这个特点可能是当前市场上消费者关注的焦点。
  • 品牌声誉: 用户评论不仅关注产品,还可能涉及到品牌的声誉、客服服务等方面。通过分析评论中对品牌的评价,可以了解品牌在消费者心目中的形象。
  • 竞争分析: 通过比较完美日记与竞争对手的用户评论,可以了解不同品牌的优势和劣势,为市场竞争和战略制定提供依据。

  因此,基于Python爬虫获取完美日记用户评论,结合词云图和情感分析技术,可以深入挖掘用户的情感、意见和需求,为完美日记品牌的市场营销、产品改进以及品牌管理提供有价值的信息支持。这种综合分析方法有助于企业更好地了解市场动态,优化产品策略,提升品牌价值。

二、爬取数据

2.1 完整代码

# 导包
import requests
import time
import random

# 获取评论
def get_content(page):
    # 目标网址
    url = 'https://club.jd.com/comment/productPageComments.action'
    # 参数
    params = {
    
    
        'productId': product_id,
        'score': 0,
        'sortType': 5,
        'page': page,
        'pageSize': 10,
        'isShadowSku': 0,
        'fold': 1
    }
    # 请求头
    headers = {
    
    
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.35 Safari/537.36',
        'cookie':'__jdu=16589701614111380507873; shshshfpa=4daabca1-903d-22ab-baf8-97de678e14b1-1665804114; shshshfpb=opwrgFhIfEq3uLkjOVzijtQ; areaId=27; unpl=JF8EALRnNSttWB9SBBsHGEZCSg0HW1wIH0cDZjVQU19cT1FQSAMdRhl7XlVdXhRLFx9uYBRXXlNJVA4ZBysSEXtdVV9fD0oeBm5vNWRcNks6cmQDZnBMSlxRNiE4SBczblcFU1lRQ1IEGwUbFxBLXVZXXAxKEQppZTVVbVhDUDUrMh4SEUpcXFlcD0onAl9lBFVYXEpTBBgFK1l-ShBUWVkBQxECb2AFUV1YS1YMGgYaFBlNX2RfbQs; __jdv=76161171|www.baidu.com|t_1003608409_|tuiguang|1e70142ec0ab401ea18cd63554db07e8|1667745095451; __jda=122270672.16589701614111380507873.1658970161.1667719720.1667745095.7; __jdc=122270672; jsavif=1; shshshfp=1075b1ee284c481ea605141bda519a56; token=99f32c7dafc446558ee3457c800615ba,2,926525; __tk=jpIxjze0JsA1jsBilUq1lcfTkUaxjDtxkcfTjDIxJijwkctwjphoJn,2,926525; ip_cityCode=2376; ipLoc-djd=27-2376-50232-53749; 3AB9D23F7A4B3C9B=EQ27JR2QLTE5R4TJCP4OICTNOVNYQZRPPKFT66XF32BQ3MXX2DSVKPDCEHSB2RQDRMGCGNPGC42YI7WAEXO6XEQ3HI; JSESSIONID=229855194FEAF8A1A0898F4D875A5667.s1; jwotest_product=99; shshshsID=c9d69e6764a3fcbe122cc5d8922262aa_4_1667745624837; __jdb=122270672.4.16589701614111380507873|7.1667745095',
        'referer': 'https://item.jd.com/'
    }
    # 发生请求并获取json数据
    resp = requests.get(url,params=params,headers=headers).json()
    # 获取评论内容并保存
    for comment in resp['comments']:
        # 将评论内容里的换行符剔除
        content = comment['content'].replace('\n','')
        print(content)
        f.flush()
        f.write(content)
        f.write('\n')
    print(f'============================第{
      
      page+1}页爬取完毕===============================')

if __name__ == '__main__':
    product_id = input('请输入商品的ID:')
    page_number = int(input('请输入要爬取的页数:'))
    with open(f'JD_comment_{
      
      product_id}.txt','a',encoding='utf-8')as f:
        for page in range(page_number):
            try:
                get_content(page)
                time.sleep(5+random.random())
            except:
                break
    print(f'爬虫程序已结束!评论内容请在同目录下的 JD_comment_{
      
      product_id}.txt 查看!')

2.2 使用说明

  1. 点此打开京东商品评论爬虫-python项目(先登录),点击屏幕左侧播放按钮,将在工作空间中创建该项目:
    在这里插入图片描述

  2. 找到你要爬取商品的ID,就是商品的详情页网址里的那一串数字ID:

在这里插入图片描述

在这里插入图片描述

  1. 运行JD_comment_spider.py文件(run python file in terminal),然后需要你输入要爬取的商品ID和爬取的页数(不能超过商品的最大评论页数)

在这里插入图片描述
在这里插入图片描述

  1. 程序运行完成后,评论内容在同目录下的JD_comment_ID.txt中查看

在这里插入图片描述

注:程序可能会随着时间的推移而过期,比如京东网页结构发生变化就需要重新编写代码,还有就是cookie过期,这时需要替换成你登录京东网站后的cookie。如遇解决不了的问题,可以联系我。

三、词云分析

读取我们刚爬取的完美日记评论数据

import pandas as pd
with open('JD_comment_100055983355.txt')as f:
    comment_list = []
    for comment in f.readlines():
        comment = comment.replace('\n','')
        comment_list.append(comment)
    df = pd.DataFrame(data=comment_list,columns=['comment'])
df

在这里插入图片描述
定义我们的画词云图函数:

import jieba
import collections
import re
import stylecloud
from PIL import Image
 
 
def draw_WorldCloud(df,pic_name,color='white'):
    data =  ''.join([item for item in df])
    # 文本预处理 :去除一些无用的字符只提取出中文出来
    new_data = re.findall('[\u4e00-\u9fa5]+', data, re.S)
    new_data = "".join(new_data)
    # 文本分词
    seg_list_exact = jieba.cut(new_data)
    result_list = []
    with open('停用词库.txt', encoding='utf-8') as f: #可根据需要打开停用词库,然后加上不想显示的词语
        con = f.readlines()
        stop_words = set()
        for i in con:
            i = i.replace("\n", "")   # 去掉读取每一行数据的\n
            stop_words.add(i)
 
    for word in seg_list_exact:
        if word not in stop_words and len(word) > 1:
            result_list.append(word)
    word_counts = collections.Counter(result_list)
 
    # 词频统计:获取前100最高频的词
    word_counts_top = word_counts.most_common(100)
    print(word_counts_top)
 
    # 绘制词云图
    stylecloud.gen_stylecloud(text=' '.join(result_list), # 提取500个词进行绘图
                            collocations=False, # 是否包括两个单词的搭配(二字组)
                            font_path=r'C:\Windows\Fonts\msyh.ttc', #设置字体,参考位置为  C:\Windows\Fonts\ ,根据里面的字体编号来设置
                            size=800, # stylecloud 的大小
                            palette='cartocolors.qualitative.Bold_7', # 调色板,调色网址: https://jiffyclub.github.io/palettable/
                            background_color=color, # 背景颜色
                            icon_name='fas fa-cloud', # 形状的图标名称 蒙版网址:https://fontawesome.com/icons?d=gallery&p=2&c=chat,shopping,travel&m=free
                            gradient='horizontal', # 梯度方向
                            max_words=2000, # stylecloud 可包含的最大单词数
                            max_font_size=150, # stylecloud 中的最大字号
                            stopwords=True, # 布尔值,用于筛除常见禁用词
                            output_name=f'{
      
      pic_name}.png') # 输出图片
    # 打开图片展示
    img=Image.open(f'{
      
      pic_name}.png')
    img.show()

调用词云函数作图:

draw_WorldCloud(df['comment'],'完美日记用户评论词云图')
[('喜欢', 146), ('颜色', 140), ('产品', 112), ('效果', 98), ('不错', 91), ('包装', 91), ('口红', 88), ('好看', 76), ('质感', 75), ('适合', 64), ('女朋友', 58), ('滋润', 52), ('持久', 48), ('完美', 47), ('特别', 45), ('肤色', 45), ('精致', 44), ('朋友', 42), ('礼物', 40), ('礼盒', 38), ('感觉', 37), ('日记', 36), ('满意', 32), ('物流', 30), ('值得', 28), ('超级', 26), ('送给', 26), ('京东', 26), ('特色', 26), ('质量', 25), ('购买', 22), ('快递', 20), ('速度', 20), ('推荐', 20), ('买来', 19), ('很快', 19), ('收到', 18), ('上档次', 16), ('高级', 16), ('色号', 16), ('盒子', 16), ('眼影', 15), ('高端', 15), ('性价比', 15), ('购物', 15), ('老婆', 14), ('颜值', 14), ('精美', 14), ('看着', 13), ('很漂亮', 13), ('送人', 13), ('日常', 13), ('搭配', 13), ('打开', 13), ('情人节', 13), ('整体', 12), ('价格', 12), ('设计', 11), ('希望', 11), ('质地', 11), ('合适', 11), ('下次', 11), ('卖家', 11), ('看起来', 11), ('活动', 10), ('挺不错', 10), ('客服', 10), ('大气', 10), ('漂亮', 10), ('外观', 10), ('高大', 10), ('生日礼物', 9), ('红色', 9), ('实惠', 9), ('很棒', 9), ('还会', 9), ('细腻', 9), ('掉色', 9), ('服务态度', 9), ('品牌', 9), ('发货', 9), ('宝贝', 9), ('体验', 9), ('做工', 9), ('拿到', 9), ('三种', 9), ('第二天', 8), ('信赖', 8), ('媳妇', 8), ('划算', 8), ('显白', 8), ('三个', 8), ('小巧', 8), ('节日', 8), ('来说', 8), ('一支', 8), ('粉色', 7), ('好评', 7), ('犹豫', 7), ('简直', 7)]

在这里插入图片描述
从词云图可以发现,完美日记是一款口红产品,在颜色、包装、效果上有着不错的口碑,且这款产品多为送女朋友的礼物。

四、情感分析

  情感分析我们使用到是SnowNLP模块,SnowNLP是一个用于中文文本情感分析的Python库,它可以帮助你判断中文文本的情感倾向,即判断文本是积极的、消极的还是中性的。得到的分数表示文本的情感倾向,越接近1表示积极情感,越接近0表示消极情感。

#加载情感分析模块
from snownlp import SnowNLP
import matplotlib.pyplot as plt
 
# 遍历每条评论进行预测
values=[SnowNLP(i).sentiments for i in df['comment']]
#输出积极的概率,大于0.5积极的,小于0.5消极的
#myval保存预测值
myval=[]
good=0
mid=0
bad=0
for i in values:
    if (i>=0.6):
        myval.append("积极")
        good=good+1
    elif 0.2<i<0.6:
        myval.append("中性")
        mid+=1
    else:
        myval.append("消极")
        bad=bad+1
df['预测值']=values
df['评价类别']=myval
df.head()

在这里插入图片描述
  接着做出情感分析的可视化图:

rate=good/(good+bad+mid)
print('好评率','%.f%%' % (rate * 100)) #格式化为百分比
#作图
y=values
plt.rc('font', family='SimHei', size=10)
plt.plot(y, marker='o', mec='r', mfc='w',label=u'评价分值')
plt.xlabel('用户')
plt.ylabel('评价分值')
# 让图例生效
plt.legend()
#添加标题
plt.title('评论情感分析',family='SimHei',size=14,color='blue')
plt.show()

在这里插入图片描述
  从图中可以看出绝大多数的评论情感得分都是在1附近,但是我们不知道消极、中性、积极评论的占比,于是我们做出饼图进行展示分析:

y = df['评价类别'].value_counts().values.tolist()
plt.pie(y,
        labels=['积极','中性','消极'], # 设置饼图标签
        colors=["#d5695d", "#5d8ca8", "#65a479"], # 设置饼图颜色
        autopct='%.2f%%', # 格式化输出百分比
       )
plt.show()

在这里插入图片描述
  可以看出积极评论占比95%,消极评论仅占2%,可见该款产品的口碑非常不错!

猜你喜欢

转载自blog.csdn.net/qq_56591814/article/details/132345585