👉博__主👈:米码收割机
👉技__能👈: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.text
common = 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()
提取关键词: