文章目录

  • 1、数据获取
    • 1.1爬取评论信息
    • 1.2 爬取评论标签
  • 2、数据保存策略
  • 3、数据处理
    • 3.1 基于情感词典进行情感分析,词频统计
  • 4、数据可视化
    • 4.1 TOP积极词汇
    • 4.2 TOP消极词汇
    • 4.3 词云图
    • 4.4 评论类型占比
    • 4.5界面快速访问![在这里插入图片描述](https://img-blog.csdnimg.cn/876e3169e37a434f99da994a246d5015.png)
  • 5、编写flask后端接口
  • 6、vue界面
  • 7、源码获取

之前有粉丝私信希望帮忙做一个爬虫可视化系统,能够爬取商品评论信息以及可视化展示。这里就分享下这个项目的具体思路以及完整代码。

1、数据获取

我们决定爬取的是网易严选的数据,严选的商品评论数据可以直接通过api去获取。
第一步就是获取评论数据了,直接通过如下接口就可以爬取。
api如下 https://you.163.com/xhr/comment/listByItemByTag.json?__timestamp={}&itemId={}&size=20&page={}&orderBy=0
由此看到我们需要着重关注的参数是界面访问链接中的id作为我们数据接口的itemid进行传参

1.1爬取评论信息

下面展示的功能函数中的username是我们可视化系统的用户名,并不是构造爬取请求所必须的。

def parse_comments(username, product_id, page_limit=20):"""爬取评论数据username: 用户名product_id: 产品名称page_limit: 爬取页数,这里默认最大设置为20"""comments_url = "https://you.163.com/xhr/comment/listByItemByTag.json?__timestamp={}&itemId={}&size=20&page={}&orderBy=0".format(time.time() * 1000, product_id, 1)res = requests.get(comments_url, headers=headers).json()if res:pages = res.get("data", {}).get("pagination", {}).get("totalPage", 1)# 我们这里最多只爬取page_limit页,一次爬多容易触发反爬虫机制pages = pages if pages <= page_limit else page_limitfor page in range(1, pages + 1):comments_url = "https://you.163.com/xhr/comment/listByItemByTag.json?__timestamp={}&itemId={}&size=20&page={}&orderBy=0".format(time.time() * 1000, product_id, page)res = requests.get(comments_url, headers=headers).json()for item in res.get("data", {}).get("commentList", []):try:comment = item.get("content", "")update_time = item.get("createTime", -1)sql = """insert into tb_comments(username,url,product_id,comment,update_time) values ('{}','{}','{}','{}',{});""".format(username,comments_url,product_id, comment, update_time)dbutil().insert(sql)except Exception as e:traceback.print_exc(e)

1.2 爬取评论标签

此外,在评论界面可以看到评论标签,把这部分数据获取后用以做扇形图的可视化

2、数据保存策略

为了避免数据的反复爬取,后台会将每次爬取的数据保存在数据库,每次搜索是根据id匹配,当数据库查询不到对应的数据,再进行实时爬取。

3、数据处理

数据获取之后我们需要对评论数据进行清洗。依次进行去停用词、再通过jieba进行分词。

3.1 基于情感词典进行情感分析,词频统计

分词完成后,这里我是使用的BosonNLP_sentiment_score.txt作为情感词典进行的评分。如果在情感词典中不存在的词汇,默认赋值为0。
对所有的词语评分完成后,根据评分降序排序。那么结果列表中的前10个值则作为我们的TOP10积极词汇。列表中的最后10个词语自然而然地就是我们TOP10的消极词汇了。

def get_top_positive_negative_frequency(data, top=10):"""获取top n个消极词汇与积极词汇以及词频:param data: 评论数据:param top::return:"""senti_dict = sentiment_dict(os.path.join(os.path.abspath("."),'text_analysis\\BosonNLP_sentiment_score.txt'))content_seg = movestopwords(data["comments"])scores = {}frequency = {}for word in content_seg:scores[word] = senti_dict.get(word, 0)if frequency.get(word):frequency[word] += 1else:frequency[word] = 1scores = sorted(scores.items(), key=lambda x: x[1], reverse=True)frequency = dict(sorted(frequency.items(), key=lambda x: x[1], reverse=True))positive = dict(scores[0:top])negative = dict(scores[-top:])return {"positive": positive,"negative": negative,"frequency": frequency}

4、数据可视化

数据可视化使用echarts,具体的可视化效果如下

4.1 TOP积极词汇

4.2 TOP消极词汇

4.3 词云图

4.4 评论类型占比

4.5界面快速访问

5、编写flask后端接口

由于界面的接口相对较少,一共三个接口,分别为登录login、注册regist和数据获取display。
数据获取接口每次根据url获取商品id,获得数据后进行实时处理,完毕返回给前端展示。具体逻辑如下

# encoding:utf-8
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from text_analysis.code import get_top_positive_negative_frequency
from utils import get_data,get_db_configapp = Flask(__name__)
# 连接数据库
config = get_db_config()
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://{}:{}@{}:3306/{}'.format(config["user"],config["password"],config["host"],config["database"])
# 实例化orm框架的操作对象,后续数据库操作,都要基于操作对象来完成
db = SQLAlchemy(app)# 声明模型类
class User(db.Model):__tablename__ = "tb_user"  # 设置表名id = db.Column(db.INTEGER, primary_key=True)username = db.Column(db.String(16), nullable=False)password = db.Column(db.String(16), nullable=False)@app.route('/')
def hello_world():return 'Hello World!'@app.route("/login", methods=["post"])
def login():"""登录"""code, msg = 200, "success"username = request.json.get("username")password = request.json.get("password")if not username or not password:code, msg = 500, "用户名或者密码不能为空"if not User.query.filter_by(username=username, password=password).first():code, msg = 500, "密码错误"return jsonify({"msg": msg, "code": code})@app.route("/regist", methods=["post"])
def regist():"""注册"""code, msg = 200, "success"username = request.json.get("username")password = request.json.get("password")if username and password:if User.query.filter_by(username=username).first():msg = "用户%s已存在" % usernameelse:new_user = User(username=username, password=password)db.session.add(new_user)db.session.commit()return jsonify({"msg": msg, "code": code})@app.route("/display", methods=["post"])
def display():"""获取绘图数据:return:"""code, msg = 200, "success"url = request.json.get("url","http://you.163.com/item/detail?id=4028691")username = request.json.get("username")top = request.json.get("top", 10)product_id = url.split('id=')[-1] if url.split('id=') else urldata = get_data(username, product_id)data.update(get_top_positive_negative_frequency(data, top))data.pop("comments")return jsonify({"msg": msg, "code": code, "data": data})if __name__ == '__main__':db.create_all()app.run(host="0.0.0.0")

6、vue界面

vue源码放在项目static目录下。
主要分为登录界面和数据展示界面。

7、源码获取

获取源码请在微信公众号搜索一颗程序树关注后发送关键字0100获取代码下载地址。

vue+flask制作一个网易严选商品评论爬虫可视化系统相关推荐

  1. vue+flask微博大数据舆情监控+情感分析可视化系统+爬虫

    本文最近开发的一个项目,记录下其过程以及效果 亮点功能 (1)情感分析之舆情管理:在爬取微博数据的同时,利用senta框架提供的预模型进行情感分析,统计情感分析结果来进行某个话题/文章的舆情监控.(s ...

  2. android 网易item广告,Android仿网易严选商品详情页

    仿照网易严选商品详情页面,整个页面分为两个部分,上面一部分是Native的ScrollView,下面一部分则是WebView,其目的是为了可以进行分步加载.滑动到ScrollView底部时,继续向上拖 ...

  3. 使用 Vue.js 制作一个简单的调查问卷平台

    使用 Vue.js 制作一个简单的调查问卷平台 原文  https://github.com/pramper/Demos/tree/master/Vue-Demos/Questionnaire 主题  ...

  4. 数据分析之1——淘宝文胸商品评论数据可视化

    说明:该文系转载,但相较原文添加了注释,减少新手上手难度 数据来源:chenjiandongx/cup-size 前言 对于很多只知道A/B/C的绅士们,我们在看数据之前可能先得了解点知识- 首先我们 ...

  5. JD京东爬虫-商品评论爬虫-----附源码

    JD京东爬虫-商品评论爬虫 附源码 本教程适合初学者. 分析开始--------------- 打开京东商品链接,打开抓包工具(加载网页后打开抓包工具,发现没有抓到数据包,刷新网页就行),这边直接筛选 ...

  6. 制作一个评选优秀老师和学生的系统,系统根据提示输入类别(老师或学生), 如果是老师则输入姓名和论文数,学生则输入姓名和考试成绩,输入若干人员信息后使用结束符完成输入,程序根据输入的数据列出优秀老师和优

    制作一个评选优秀老师和学生的系统,系统根据提示输入类别(老师或学生), 如果是老师则输入姓名和论文数,学生则输入姓名和考试成绩,输入若干人员信息后使用结束符完成输入,程序根据输入的数据列出优秀老师和优 ...

  7. vue全家桶+Echarts+百度地图,搭建数据可视化系统(项目)

    vue全家桶+Echarts+百度地图,搭建数据可视化系统 1. 前言 1.1 业务场景 突然接到产品说要做一个数据监控的系统.有线图.柱状图.地图,类似于数据可视化的方式. 本人之前从未接触过Ech ...

  8. 【十三香吗?】网易严选-苹果12商品评论数据可视化分析

    苹果手机评论数据可视化分析 1. 爬取数据 2. 准备工作 3. 数据预处理 4. 词云可视化 5. 词频可视化 5.1 绘制柱状图 5.2 绘制饼图 6. 评分可视化 6.1 柱状图 6.2 环形图 ...

  9. python制作一个网易音乐下载器

    你只需要在代码同级目录新建一个文件夹mp3即可.代码可复制粘贴. 第一次思路如下,该效果只能一次下载单个音乐: #coding=gbk """ 描述:传参id即可下载音乐 ...

最新文章

  1. 5G NR — 频率、频段、载波、载频、载波带宽
  2. C#IList 取区间数据
  3. Windows on Device 项目实践 4 - 智能风扇制作
  4. Java Virtual Machine报错:A Java Exception has occured
  5. 容器映像_构建微小的容器映像
  6. python菜鸟教程100例-Python 练习实例14
  7. docker images存放路径指定
  8. WPS专业版可用key
  9. Hadoop下载地址/hbase下载地址
  10. 雷电3接口能干嘛_Sonnet发布雷电3接口双卡读卡机RED MINIMAG Pro
  11. IP地址的认识(一)
  12. 苹果蓝牙耳机怎么样?与airpods媲美的无线耳机推荐
  13. Quartus II下载器件库
  14. 证明:因为矩阵A非0,所以AA'也非零
  15. 菜鸟教程Python教程100例(三)(持续更新)
  16. 解决微擎框架在升级中,模块从已安装列表变成了未安装列表(模块显示到了未安装列表)
  17. 云客Drupal源码分析之主题引述
  18. P5656 【模板】二元一次不定方程 (exgcd)
  19. Linux 的 Kill -9命令
  20. 这些天求教有感---求人不如求己

热门文章

  1. 26.分区格式化,硬盘分区,fdisk详解,mkfs格式化,mkfs.ext4,mkfs.xfs详细使用方法和示例
  2. 【LeetCode】636. 函数的独占时间
  3. 【Python学习笔记】- 04 文件操作
  4. 服务器升级中暂时不能更换头像,为什么头像更新不了
  5. (1) iphone开发,自定义Window-based Application 模板及委托运行机制
  6. 基于模板匹配的0-9数字语音识别(matlab)
  7. Ubuntu20.04 打字键盘没反应,光标处无输出
  8. NVIDIA Xavier CAN
  9. Unity工业数字孪生、汽车数字孪生、手术虚拟培训,数字孪生应用场景有哪些?
  10. Graph Decipher: A transparent dual-attention graph neural network 图解密器:一种透明的双注意图神经网络,用于理解节点分类的消息传递机制