一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python 爬取京東指定商品評論并進行情感分析

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

2021-11-15 10:42DA1YAYUAN Python

本文主要講述了利用Python網絡爬蟲對指定京東商城中指定商品下的用戶評論進行爬取,對數據預處理操作后進行文本情感分析,感興趣的朋友可以了解下

項目地址

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

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

運行環境

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

運行方法

數據爬取(jd.comment.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 = "jd_comment.txt"
# 詞云字體
WC_FONT_PATH = "/Library/Fonts/Songti.ttc"


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

    url = "https://club.jd.com/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": "https://item.jd.com/"+ key + ".html"}#原本key不輸入值,默認為《三體》

    try:
        r = requests.get(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"] + "
")
        # 打印評論對象中的評論內容
        print(r_json_comment["content"])


def batch_spider_comment():
    """
        批量爬取某東評價
        """
    # 寫入數據前先清空之前的數據
    if os.path.exists(COMMENT_FILE_PATH):
        os.remove(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: 分詞后的數據
    """
    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:
    """
    # 設置詞云形狀圖片
    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)
    # 生成詞云
    wc.generate(cut_word())
    # 在只設置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("
").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,分別存入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("開始訓練數據集...")
    sentiment.train("negative.txt", "positive.txt")#自己準備數據集
    sentiment.save("sentiment.marshal")#保存訓練模型
    #python2保存的是sentiment.marshal;python3保存的是sentiment.marshal.3
    "訓練完成后,將訓練完的模型,替換sentiment中的模型"

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

if __name__ == "__main__":
    main()

情感分析(sentiment.analysis.py)

  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="
", 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))
    df2.to_csv(f"{filename}.csv", encoding="utf-8", index_label=None, index=None)


def train():
    """訓練正向和負向情感數據集,并保存訓練模型"""
    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)
            #調用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,
                "商品評論": line.replace("
", "")
            }
            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():
    """分析結果可視化,以條形圖為測試樣例"""
    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("評價數目")
    plt.title(u"商品評論情感分析結果-條形圖", FontProperties=font)
    plt.savefig("fig.png")
    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()

 

詞云輪廓圖

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

商品評論詞云

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

情感分析結果可視化

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

以上就是python 爬取京東指定商品評論并進行情感分析的詳細內容,更多關于python 爬取京東評論并進行情感分析的資料請關注服務器之家其它相關文章!

原文鏈接:https://github.com/DA1YAYUAN/JD-comments-sentiment-analysis

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 色人阁图片 | 免费一级毛片在级播放 | 日韩视频一区二区三区 | 国产精品每日在线观看男人的天堂 | 97色伦在线观看 | 99久久精品国产免看国产一区 | 色五夜婷婷 | sao虎在线精品永久在线 | 日韩美毛片 | 国精品午夜dy8888狼人 | 四虎成人免费大片在线 | 啊哈~嗯哼~用力cao我小说 | juliaann大战七个黑人 | 国产高清在线精品一区二区 | 天天操天天干天天舔 | 国产美女极品免费视频 | 母乳在线播放 | 成全动漫视频在线观看 | 午夜精品久久久久久中宇 | 7个黑人玩北条麻妃 | 隔壁的漂亮邻居hd中文 | 午夜小福利 | 精品亚洲一区二区三区在线播放 | 全黄h全肉细节修仙玄幻文 全彩调教侵犯h本子全彩妖气he | 国产一卡2卡3卡4卡公司科普 | 被老外操 | 娇妻与公陈峰姚瑶小说在线阅读 | 国产一区二区视频免费 | 日本xxxx18vr69| 人与动人物人a级特片 | 亚洲国产精品综合久久网络 | 日本免费v片一二三区 | 色哟哟哟 | 国产成人免费高清激情明星 | 色综合久久中文字幕综合网 | 国内精品免费一区二区三区 | 欧美大美bbb和大白屁股 | 日本免费在线播放 | 放荡警察巨r麻麻出轨小说 范冰冰特黄xx大片 饭冈加奈子在线播放观看 法国老妇性xx在线播放 | 欧美xxxxx性| 爸爸干女儿小说 |