校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > python 爬取京東指定商品評論并進行情感分析

python 爬取京東指定商品評論并進行情感分析

熱門標簽:應(yīng)電話機器人打電話違法嗎 電銷機器人的風險 河北防封卡電銷卡 地圖標注線上如何操作 天津電話機器人公司 400電話辦理哪種 開封語音外呼系統(tǒng)代理商 手機網(wǎng)頁嵌入地圖標注位置 開封自動外呼系統(tǒng)怎么收費

項目地址

https://github.com/DA1YAYUAN/JD-comments-sentiment-analysis

爬取京東商城中指定商品下的用戶評論,對數(shù)據(jù)預(yù)處理后基于SnowNLP的sentiment模塊對文本進行情感分析。

運行環(huán)境

  • Mac OS X
  • Python3.7 requirements.txt
  • Pycharm

運行方法

數(shù)據(jù)爬取(jd.comment.py)

  1. 啟動jd_comment.py,建議修改jd_comment.py中變量user-agent為自己瀏覽器用戶代理
  2. 輸入京東商品完整URL
  3. 得到京東評論詞云,存放于jd_ciyun.jpg(詞云輪廓形狀存放于jdicon.jpg)
  4. 得到京東評論數(shù)據(jù),存放于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'
# 評論數(shù)據(jù)保存文件
COMMENT_FILE_PATH = 'jd_comment.txt'
# 詞云字體
WC_FONT_PATH = '/Library/Fonts/Songti.ttc'


def spider_comment(page=0, key=0):
    """
    爬取京東指定頁的評價數(shù)據(jù)
    :param page: 爬取第幾,默認值為0
    """

    url = 'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv4646productId=' + key + '' \

          'score=0sortType=5page=%spageSize=10isShadowSku=0fold=1' % page
    kv = {'user-agent': 'Mozilla/5.0', 'Referer': 'https://item.jd.com/'+ key + '.html'}#原本key不輸入值,默認為《三體》

    try:
        r = requests.get(url, headers=kv)
        r.raise_for_status()
    except:
        print('爬取失敗')
    # 截取json數(shù)據(jù)字符串
    r_json_str = r.text[26:-2]
    # 字符串轉(zhuǎn)json對象
    r_json_obj = json.loads(r_json_str)
    # 獲取評價列表數(shù)據(jù)
    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')
        # 打印評論對象中的評論內(nèi)容
        print(r_json_comment['content'])


def batch_spider_comment():
    """
        批量爬取某東評價
        """
    # 寫入數(shù)據(jù)前先清空之前的數(shù)據(jù)
    if os.path.exists(COMMENT_FILE_PATH):
        os.remove(COMMENT_FILE_PATH)
    key = input("Please enter the address:")
    key = re.sub("\D","",key)
    #通過range來設(shè)定爬取的頁面數(shù)
    for i in range(10):
        spider_comment(i,key)
        # 模擬用戶瀏覽,設(shè)置一個爬蟲間隔,防止ip被封
        time.sleep(random.random() * 5)


def cut_word():
    """
    對數(shù)據(jù)分詞
    :return: 分詞后的數(shù)據(jù)
    """
    with open(COMMENT_FILE_PATH) as file:
        comment_txt = file.read()
        wordlist = jieba.cut(comment_txt, cut_all=False)#精確模式
        wl = " ".join(wordlist)
        print(wl)
        return wl


def create_word_cloud():
    """44144127306
    生成詞云
    :return:
    """
    # 設(shè)置詞云形狀圖片
    wc_mask = np.array(Image.open(WC_MASK_IMG))
    # 設(shè)置詞云的一些配置,如:字體,背景色,詞云形狀,大小
    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)
    # 生成詞云
    wc.generate(cut_word())
    # 在只設(shè)置mask的情況下,你將會得到一個擁有圖片形狀的詞云
    plt.imshow(wc, interpolation="bilinear")
    plt.axis("off")
    plt.figure()
    plt.show()
    wc.to_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("jd_comment.txt", 'r', encoding='utf8')as f:
            # print(f.readlines())
            for line in f.readlines():
                # 去掉str左右端的空格并以空格分割成list
                line_list = line.strip('\n').split(',')
                print(line_list)
                writer_csv.writerow(line_list)

if __name__ == '__main__':
    # 爬取數(shù)據(jù)
    batch_spider_comment()

    #轉(zhuǎn)換數(shù)據(jù)
    txt_change_to_csv()

    # 生成詞云
    create_word_cloud()

模型訓練(train.py)

  1. 準備正負語料集online_shopping_10_cats.csv,分別存入negative.txt和positive.txt
  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("開始訓練數(shù)據(jù)集...")
    sentiment.train('negative.txt', 'positive.txt')#自己準備數(shù)據(jù)集
    sentiment.save('sentiment.marshal')#保存訓練模型
    #python2保存的是sentiment.marshal;python3保存的是sentiment.marshal.3
    "訓練完成后,將訓練完的模型,替換sentiment中的模型"

def main():
    train()  # 訓練正負向商品評論數(shù)據(jù)集
    print("數(shù)據(jù)集訓練完成!")

if __name__ == '__main__':
    main()

情感分析(sentiment.analysis.py)

  1. 啟動sentiment.analysis.py
  2. 開始對jd_comment.csv中評論進行數(shù)據(jù)處理,處理后文件存入processed_comment_data.csv
  3. sentiment模塊根據(jù)sentiment.marshal.3對評論進行情感評分,評分結(jié)果存入result.csv
  4. 評分結(jié)果可視化,生成文件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():
    '''讀取商品評論數(shù)據(jù)文件'''
    comment_data = pd.read_csv('jd_comment.csv', encoding='utf-8',
                               sep='\n', index_col=None)
    #返回評論作為參數(shù)
    return comment_data


def clean_data(data):
    '''數(shù)據(jù)清洗'''
    df = data.dropna()  # 消除缺失數(shù)據(jù) NaN為缺失數(shù)據(jù)
    df = pd.DataFrame(df.iloc[:, 0].unique())  # 數(shù)據(jù)去重
    return df
    # print('數(shù)據(jù)清洗后:', len(df))


def clean_repeat_word(raw_str, reverse=False):
    '''去除評論中的重復(fù)使用的詞匯'''
    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):
    '''清洗完畢的數(shù)據(jù),并保存'''
    df = clean_data(read_csv())#數(shù)據(jù)清洗
    ser1 = df.iloc[:, 0].apply(clean_repeat_word)#去除重復(fù)詞匯
    df2 = pd.DataFrame(ser1.apply(clean_repeat_word, reverse=True))
    df2.to_csv(f'{filename}.csv', encoding='utf-8', index_label=None, index=None)


def train():
    '''訓練正向和負向情感數(shù)據(jù)集,并保存訓練模型'''
    sentiment.train('negative.txt', 'positive.txt')
    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 in fr.readlines():
            s = snownlp.SnowNLP(line)
            #調(diào)用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 = {
                '情感分析結(jié)果': s.sentiments,
                '評價傾向': res,
                '商品評論': line.replace('\n', '')
            }
            sentiment_list.append(sent_dict)
            print(sent_dict)
        df = pd.DataFrame(sentiment_list)
        df.to_csv(f'{to_filename}.csv', index=None, encoding='utf-8',
                  index_label=None, mode='w')


def data_virtualization():
    '''分析結(jié)果可視化,以條形圖為測試樣例'''
    font = FontProperties(fname='/System/Library/Fonts/Supplemental/Songti.ttc', 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])

    plt.bar([1], [likes], label='喜歡')#(坐標,評論長度,名稱)
    plt.bar([2], [common], label='一般')
    plt.bar([3], [unlikes], label='不喜歡')

    x=[1,2,3]
    label=['喜歡','一般','不喜歡']
    plt.xticks(x, label)

    plt.legend()#插入圖例
    plt.xlabel('評價種類')
    plt.ylabel('評價數(shù)目')
    plt.title(u'商品評論情感分析結(jié)果-條形圖', FontProperties=font)
    plt.savefig('fig.png')
    plt.show()
'''
def word_cloud_show():
    #將商品評論轉(zhuǎn)為高頻詞匯的詞云
    wl = word_cloud_creation('jd_comment.csv')
    wc = word_cloud_settings()
    word_cloud_implementation(wl, wc)
'''

def main():
     processed_data('processed_comment_data')#數(shù)據(jù)清洗
     #train()  # 訓練正負向商品評論數(shù)據(jù)集

     test('jd_comment', 'result')

     print('數(shù)據(jù)可視化中...')
     data_virtualization()  # 數(shù)據(jù)可視化

     print('python程序運行結(jié)束。')

if __name__ == '__main__':
    main()

詞云輪廓圖

商品評論詞云

情感分析結(jié)果可視化

以上就是python 爬取京東指定商品評論并進行情感分析的詳細內(nèi)容,更多關(guān)于python 爬取京東評論并進行情感分析的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • python 爬取吉首大學網(wǎng)站成績單
  • python趣味挑戰(zhàn)之爬取天氣與微博熱搜并自動發(fā)給微信好友
  • python 爬取影視網(wǎng)站下載鏈接
  • Python爬蟲之爬取我愛我家二手房數(shù)據(jù)
  • python結(jié)合多線程爬取英雄聯(lián)盟皮膚(原理分析)
  • python爬取豆瓣電影TOP250數(shù)據(jù)
  • python爬取鏈家二手房的數(shù)據(jù)
  • 教你怎么用python爬取愛奇藝熱門電影
  • Python爬蟲之爬取最新更新的小說網(wǎng)站
  • Python爬蟲實戰(zhàn)之爬取攜程評論

標簽:駐馬店 宿遷 六盤水 常州 山東 江蘇 蘭州 成都

巨人網(wǎng)絡(luò)通訊聲明:本文標題《python 爬取京東指定商品評論并進行情感分析》,本文關(guān)鍵詞  python,爬取,京東,指定,商品,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python 爬取京東指定商品評論并進行情感分析》相關(guān)的同類信息!
  • 本頁收集關(guān)于python 爬取京東指定商品評論并進行情感分析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    极品少妇xxxx精品少妇| 综合欧美一区二区三区| 在线成人免费视频| 欧美亚洲综合另类| 欧美图区在线视频| 5566中文字幕一区二区电影 | 国产精品久久久久久久久晋中 | 972aa.com艺术欧美| 丁香激情综合国产| a亚洲天堂av| 91在线观看视频| 日本丶国产丶欧美色综合| 欧美视频中文字幕| 3atv一区二区三区| 欧美成人bangbros| 日本一区二区三区dvd视频在线| 中文字幕第一区| 亚洲视频一区二区在线| 亚洲综合一二三区| 日本不卡在线视频| 国产精品一二三在| 色哟哟欧美精品| 制服丝袜av成人在线看| 精品动漫一区二区三区在线观看| 国产精品久久久久久久浪潮网站 | 国产精品自拍一区| 91性感美女视频| 制服丝袜一区二区三区| 国产欧美日韩综合| 香蕉成人伊视频在线观看| 国产曰批免费观看久久久| 不卡的电视剧免费网站有什么| 91麻豆国产精品久久| 6080午夜不卡| 亚洲女人****多毛耸耸8| 美女脱光内衣内裤视频久久网站| 国产成人av电影在线| 欧美性高清videossexo| 久久久www成人免费毛片麻豆| 亚洲一区二区三区自拍| 国产成人综合在线| 欧美一区二区三区视频| 亚洲女女做受ⅹxx高潮| 韩国女主播一区| 777午夜精品视频在线播放| 欧美韩日一区二区三区| 日本成人超碰在线观看| 色欧美日韩亚洲| 久久精子c满五个校花| 视频一区二区三区中文字幕| 成人美女视频在线观看| 久久亚洲春色中文字幕久久久| 亚洲精品五月天| 成人亚洲一区二区一| 精品sm在线观看| 亚洲高清在线精品| 欧美综合一区二区| 亚洲国产精品精华液2区45| 久久99久久久欧美国产| 欧美丰满美乳xxx高潮www| 国产精品久久久久影院| 成人av小说网| 国产精品人成在线观看免费| 精品中文字幕一区二区| 欧美一区二区三区播放老司机 | 日韩三级免费观看| 午夜精品久久久久| 欧美日韩视频在线观看一区二区三区 | 日本福利一区二区| 亚洲免费观看在线观看| 色悠悠亚洲一区二区| 亚洲精品欧美二区三区中文字幕| 91伊人久久大香线蕉| 中文字幕中文字幕中文字幕亚洲无线| 国产乱码字幕精品高清av| 久久亚洲免费视频| 国产超碰在线一区| 国产精品理伦片| 99久久婷婷国产综合精品电影| 国产精品久久久一本精品| 97久久精品人人做人人爽50路| 国产精品超碰97尤物18| 91免费观看视频| 亚洲老妇xxxxxx| 91精品国产aⅴ一区二区| 美女脱光内衣内裤视频久久网站| 欧美大片一区二区| 国产高清在线精品| 国产精品久久久久久一区二区三区| 99精品欧美一区二区三区小说| 综合激情成人伊人| 精品视频一区三区九区| 日韩va亚洲va欧美va久久| 精品国精品自拍自在线| 99国产精品久| 亚洲成av人片一区二区三区| 欧美成人aa大片| aaa国产一区| 丝袜a∨在线一区二区三区不卡| 日韩欧美国产1| 成人一二三区视频| 亚洲国产cao| 久久精品这里都是精品| 91精品福利在线| 六月丁香综合在线视频| 中文字幕一区在线观看| 欧美精品久久99久久在免费线 | 99久久99久久免费精品蜜臀| 亚洲午夜精品一区二区三区他趣| 欧美va天堂va视频va在线| 成人影视亚洲图片在线| 亚洲成人动漫精品| 国产精品久久久久婷婷二区次| jiyouzz国产精品久久| 日韩精品五月天| 国产精品国产三级国产普通话99| 欧美日韩国产高清一区二区 | 欧美色中文字幕| 国产91精品一区二区| 亚洲国产成人高清精品| 亚洲国产精品国自产拍av| 欧美一级黄色录像| 色综合久久中文综合久久97| 精品亚洲成av人在线观看| 亚洲激情自拍视频| 亚洲国产成人私人影院tom| 欧美夫妻性生活| 日本高清成人免费播放| 高清不卡在线观看| 国内精品伊人久久久久av影院| 一区二区三区欧美激情| 亚洲国产精品v| 337p日本欧洲亚洲大胆精品 | 国产成人超碰人人澡人人澡| 亚洲色图色小说| 久久麻豆一区二区| 精品美女在线播放| 欧美人妖巨大在线| 91在线精品秘密一区二区| 国产精品1024| 狠狠色丁香久久婷婷综合丁香| 石原莉奈一区二区三区在线观看| 亚洲美女免费在线| 综合欧美亚洲日本| 亚洲丝袜美腿综合| 国产精品卡一卡二卡三| 久久蜜桃一区二区| 久久久午夜精品理论片中文字幕| 日韩精品中文字幕在线一区| 91精品在线免费| 制服丝袜成人动漫| 91精品国产高清一区二区三区蜜臀 | 激情综合色综合久久| 免费成人av在线| 久久电影网站中文字幕| 毛片av一区二区| 国产真实乱偷精品视频免| 狠狠色丁香久久婷婷综| 国产成人日日夜夜| 99免费精品视频| 91福利精品视频| 欧美日本韩国一区| 欧美成人一区二区三区片免费 | 一本色道亚洲精品aⅴ| 色综合中文字幕国产 | 蜜臀久久久99精品久久久久久| 日本麻豆一区二区三区视频| 美女视频一区在线观看| 国产一区二区三区不卡在线观看 | 成人黄色片在线观看| 99精品久久只有精品| 欧美婷婷六月丁香综合色| 欧美一级欧美三级在线观看| 精品日产卡一卡二卡麻豆| 精品福利视频一区二区三区| 中文子幕无线码一区tr| 亚洲精品乱码久久久久久黑人| 午夜影视日本亚洲欧洲精品| 麻豆91免费观看| 成人不卡免费av| 91福利视频在线| 日韩欧美一卡二卡| 国产精品成人免费精品自在线观看| 亚洲福利一二三区| 黑人巨大精品欧美一区| 91网页版在线| 欧美一级国产精品| 亚洲欧洲日韩av| 久久99久久99精品免视看婷婷 | 国产精品一区二区免费不卡| 91在线观看一区二区| 日韩三级在线免费观看| 中文字幕日本不卡| 毛片基地黄久久久久久天堂| 99国产精品久久久久久久久久 | 亚洲四区在线观看| 久久99久久久久| 91香蕉国产在线观看软件| 欧美日韩免费观看一区三区| www久久久久|