👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。
【python】python手机评论抓取+情感分析(python代码+报告)
0. 需求分析
1)抓取评论数据
2)情感分析,统计词频
3)分析内容:https://item.jd.com/100011172363.html
1. 代码分析
该代码是一个简单的数据获取和分析程序。它包含以下几个部分:
1.1 导入必要的库
代码开始导入了一些必要的库,包括pymysql用于数据库连接,re用于正则表达式匹配,requests用于发送HTTP请求,collections用于计数,textblob用于文本情感分析,matplotlib用于绘图。
import pymysql
import re
import requests
from collections import Counter
from textblob import TextBlob
import matplotlib.pyplot as plt
1.2 write_data函数
该函数用于将文本数据写入数据库。它首先使用pymysql库建立与数据库的连接,然后执行插入语句将文本数据写入数据库表中。
def write_data(text):# 连接数据库cnx = pymysql.connect(host='127.0.0.1', user='root', password='root', db='huawei')# 创建游标对象cursor = cnx.cursor()# # 执行查询insert_sql = "INSERT INTO customers (content) VALUES (%s)"cursor.execute(insert_sql, (text,))# 提交事务cnx.commit()# 关闭游标和连接cursor.close()cnx.close()
1.3 DataFetcher类
该类用于从指定URL获取数据。它通过发送HTTP请求到指定的URL,并使用requests库获取响应。如果响应的状态码为200,表示请求成功,然后从响应内容中使用正则表达式提取文本数据。将提取的文本数据写入到common.txt文件中,并调用write_data函数将数据写入数据库。
class DataFetcher:def fetch_data(self):url = 'https://xxx.xxx.com/'params = {'appid': 'item-v3','functionId': 'pc_club_productPageComments','client': 'pc',# 省略...}response = requests.get(url, params=params)if response.status_code == 200:content = response.textcommon = re.findall('"content":"(.*?)"', content)with open('common.txt', 'a', encoding='utf-8') as f:for text in common:f.write(text + '\n')write_data(text)return "\n".join(common)else:return '请求失败,状态码:' + str(response.status_code)
1.4 save_data函数
该函数用于将数据保存到common.txt文件中。它使用’w’模式打开文件,将数据写入文件。
def save_data(data):with open('common.txt', 'w', encoding='utf-8') as f:f.write(data)
1.5 show_image函数
该函数用于对数据进行情感分析和关键词提取,并绘制词频统计图表。它首先使用textblob库对数据进行情感分析,计算情感得分。然后使用正则表达式提取关键词,并使用collections库进行计数,找出出现频率最高的前5个关键词。最后使用matplotlib库绘制词频统计图表。
# 情感分析blob = TextBlob(data)sentiment_score = blob.sentiment.polarity# 关键词提取keywords = re.findall(r'\b\w+\b', data)keyword_counts = Counter(keywords).most_common(5)# 绘制词频统计图表keywords, counts = zip(*keyword_counts)plt.figure(figsize=(8, 6))plt.bar(keywords, counts)plt.title('Top 5 Keywords')plt.xlabel('Keywords')plt.ylabel('Count')plt.xticks(rotation=45)plt.show()
提取关键词: