python爬取京东指定商品评论并进⾏情感分析⽬录
项⽬地址
运⾏环境
运⾏⽅法
数据爬取(jdment.py)
模型训练(train.py)
情感分析(sentiment.analysis.py)
词云轮廓图
商品评论词云
情感分析结果可视化
项⽬地址
爬取京东商城中指定商品下的⽤户评论,对数据预处理后基于SnowNLP的sentiment模块对⽂本进⾏情感分析。运⾏环境
Mac OS X
Python3.
Pycharm
运⾏⽅法
数据爬取(jdment.py)
1. 启动jd_comment.py,建议修改jd_comment.py中变量user-agent为⾃⼰浏览器⽤户代理
2. 输⼊京东商品完整URL
3. 得到京东评论词云,存放于jd_ciyun.jpg(词云轮廓形状存放于jdicon.jpg)
4. 得到京东评论数据,存放于jd_comment.csv
import os
import time
import json
import random
import csv
import re
import jieba
import requests
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
from wordcloud import WordCloud
# 词云形状图⽚
WC_MASK_IMG = 'jdicon.jpg'
# 评论数据保存⽂件
COMMENT_FILE_PATH = ''
# 词云字体
WC_FONT_PATH = '/Library/'
def spider_comment(page=0, key=0):
"""
爬取京东指定页的评价数据
:param page: 爬取第⼏,默认值为0
"""
url = 'club.jd/comment/productPageComments.action?callback=fetchJSON_comment98vv4646&productId=' + key + '' \ '&score=0&sortType=5&page=%s&pageSize=10&isShadowSku=0&fold=1' % page
kv = {'user-agent': 'Mozilla/5.0', 'Referer': 'item.jd/'+ key + '.html'}#原本key不输⼊值,默认为《三体》
try:
r = (url, headers=kv)
r.raise_for_status()
except:
print('爬取失败')
# 截取json数据字符串
r_json_str = r.text[26:-2]
# 字符串转json对象
r_json_obj = json.loads(r_json_str)
# 获取评价列表数据
r_json_comments = r_json_obj['comments']
# 遍历评论对象列表
for r_json_comment in r_json_comments:
# 以追加模式换⾏写⼊每条评价
with open(COMMENT_FILE_PATH, 'a+') as file:
file.write(r_json_comment['content'] + '\n')
# 打印评论对象中的评论内容
print(r_json_comment['content'])
def batch_spider_comment():
"""
批量爬取某东评价
"""
# 写⼊数据前先清空之前的数据
if ists(COMMENT_FILE_PATH):
key = input("Please enter the address:")
key = re.sub("\D","",key)
#通过range来设定爬取的页⾯数
for i in range(10):
spider_comment(i,key)
# 模拟⽤户浏览,设置⼀个爬⾍间隔,防⽌ip被封
time.sleep(random.random() * 5)
def cut_word():
"""
对数据分词
:return: 分词后的数据
"""
jupyter运行代码快捷键with open(COMMENT_FILE_PATH) as file:
comment_txt = ad()
wordlist = jieba.cut(comment_txt, cut_all=False)#精确模式
wl = " ".join(wordlist)
print(wl)
return wl
def create_word_cloud():
"""44144127306
⽣成词云
:return:
"""
# 设置词云形状图⽚
wc_mask = np.array(Image.open(WC_MASK_IMG))
# 设置词云的⼀些配置,如:字体,背景⾊,词云形状,⼤⼩
wc = WordCloud(background_color="white", max_words=2000, mask=wc_mask, scale=4, max_font_size=50, random_state=42, font_path=WC_FONT_PATH)
# ⽣成词云
# 在只设置mask的情况下,你将会得到⼀个拥有图⽚形状的词云
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.figure()
plt.show()
<_file("jd_ciyun.jpg")
def txt_change_to_csv():
with open('jd_comment.csv', 'w+', encoding="utf8", newline='')as c:
writer_csv = csv.writer(c, dialect="excel")
with open("", 'r', encoding='utf8')as f:
# adlines())
for line adlines():
# 去掉str左右端的空格并以空格分割成list
line_list = line.strip('\n').split(',')
print(line_list)
writer_csv.writerow(line_list)
if __name__ == '__main__':
# 爬取数据
batch_spider_comment()
#转换数据
txt_change_to_csv()
# ⽣成词云
create_word_cloud()
模型训练(train.py)
1. 准备正负语料集online_shopping_10_cats.csv,分别存⼊和
2. 启动train.py,新建⽂件sentiment.marshal,存⼊训练后的模型
3. 到外部库中snownlp中sentiment模块,将训练得到的sentiment.marshal.3⽂件覆盖sentiment模块中⾃带的
sentiment.marshal.3
# -*-coding:utf-8-*-
def train():
from snownlp import sentiment
print("开始训练数据集...")
sentiment.save('sentiment.marshal')#保存训练模型
#python2保存的是sentiment.marshal;python3保存的是sentiment.marshal.3
"训练完成后,将训练完的模型,替换sentiment中的模型"
def main():
train() # 训练正负向商品评论数据集
print("数据集训练完成!")
if __name__ == '__main__':
main()
情感分析(sentiment.analysis.py)html5游戏作弊
1. 启动sentiment.analysis.py
2. 开始对jd_comment.csv中评论进⾏数据处理,处理后⽂件存⼊processed_comment_data.csv
3. sentiment模块根据sentiment.marshal.3对评论进⾏情感评分,评分结果存⼊result.csv
4. 评分结果可视化,⽣成⽂件fig.png
from snownlp import sentiment
import pandas as pd
import snownlp
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
#from word_cloud import word_cloud_creation, word_cloud_implementation, word_cloud_settings
def read_csv():
'''读取商品评论数据⽂件'''
comment_data = pd.read_csv('jd_comment.csv', encoding='utf-8',
sep='\n', index_col=None)
#返回评论作为参数
return comment_data
def clean_data(data):
'''数据清洗'''
df = data.dropna() # 消除缺失数据 NaN为缺失数据
df = pd.DataFrame(df.iloc[:, 0].unique()) # 数据去重
return df
# print('数据清洗后:', len(df))
def clean_repeat_word(raw_str, reverse=False):
'''去除评论中的重复使⽤的词汇'''
if reverse:
raw_str = raw_str[::-1]
res_str = ''
for i in raw_str:
if i not in res_str:
res_str += i
if reverse:
res_str = res_str[::-1]
return res_str
def processed_data(filename):
'''清洗完毕的数据,并保存'''
df = clean_data(read_csv())#数据清洗
ser1 = df.iloc[:, 0].apply(clean_repeat_word)#去除重复词汇
df2 = pd.DataFrame(ser1.apply(clean_repeat_word, reverse=True))
<_csv(f'{filename}.csv', encoding='utf-8', index_label=None, index=None)
def train():
'''训练正向和负向情感数据集,并保存训练模型'''
sentiment.save('seg.marshal')#python2保存的是sentiment.marshal;python3保存的是sentiment.marshal.3 sentiment_list = []
res_list = []
def test(filename, to_filename):
'''商品评论-情感分析-测试'''
with open(f'{filename}.csv', 'r', encoding='utf-8') as fr:
for line adlines():
s = snownlp.SnowNLP(line)
#调⽤snownlp中情感评分s.sentiments
if s.sentiments > 0.6:
res = '喜欢'
res_list.append(1)
elif s.sentiments < 0.4:
res = '不喜欢'
res_list.append(-1)
else:
res = '⼀般'
res_list.append(0)
sent_dict = {
开发者助手最新版'情感分析结果': s.sentiments,
'评价倾向': res,
'商品评论': place('\n', '')
}
sentiment_list.append(sent_dict)
print(sent_dict)
df = pd.DataFrame(sentiment_list)
<_csv(f'{to_filename}.csv', index=None, encoding='utf-8',
index_label=None, mode='w')
def data_virtualization():
'''分析结果可视化,以条形图为测试样例'''
font = FontProperties(fname='/System/Library/Fonts/', size=14)
likes = len([i for i in res_list if i == 1])
common = len([i for i in res_list if i == 0])
unlikes = len([i for i in res_list if i == -1])
京东python入门教程plt.bar([1], [likes], label='喜欢')#(坐标,评论长度,名称)
plt.bar([2], [common], label='⼀般')
plt.bar([3], [unlikes], label='不喜欢')
x=[1,2,3]
label=['喜欢','⼀般','不喜欢']
plt.legend()#插⼊图例
plt.xlabel('评价种类')
plt.ylabel('评价数⽬')
plt.title(u'商品评论情感分析结果-条形图', FontProperties=font)
plt.savefig('fig.png')
mysql服务为什么启动不了plt.show()
'''
def word_cloud_show():
#将商品评论转为⾼频词汇的词云
wl = word_cloud_creation('jd_comment.csv')
wc = word_cloud_settings()
word_cloud_implementation(wl, wc)
'''
def main():
processed_data('processed_comment_data')#数据清洗
#train() # 训练正负向商品评论数据集
test('jd_comment', 'result')
print('数据可视化中...')
data_virtualization() # 数据可视化
print('python程序运⾏结束。')
if __name__ == '__main__':
main()
词云轮廓图
商品评论词云
情感分析结果可视化
numpy和pandas以上就是python 爬取京东指定商品评论并进⾏情感分析的详细内容,更多关于python 爬取京东评论并进⾏情感分析的资料请关注其它相关⽂章!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论