# 大众点评评论文本挖掘
[TOC]
## 一、爬虫
### 整体思路
爬取大众点评十大热门糖水店的评论,爬取网页后从html页面中把需要的字段信息(顾客id、评论时间、评分、评论内容、口味、环境、服务、店铺ID)提取出来并存储到MYSQL数据库中。
### 网页爬取和解析
链接格式为"http://www.dianping.com/shop/" + shopID + "/review_all/" + pi,如:http://www.dianping.com/shop/518986/review_all/p1 ,一页评论有20条。我们使用for循环构造链接URL,使用requests库发起请求并把html页面爬取下来,通过BeautifulSoup和re库解析页面提取信息。
我们发现完整的评论都存储在'div','main-review'中,且部分页面口味、环境、服务并不是每一页都有,因此需要使用try...except...防止程序中断,BeautifulSoup部分代码如下:
``` python
for item in soup('div','main-review'):
cus_id = item.find('a','name').text.strip()
comment_time = item.find('span','time').text.strip()
comment_star = item.find('span',re.compile('sml-rank-stars')).get('class')[1]
cus_comment = item.find('div',"review-words").text.strip()
scores = str(item.find('span','score'))
try:
kouwei = re.findall(r'口味:([\u4e00-\u9fa5]*)',scores)[0]
huanjing = re.findall(r'环境:([\u4e00-\u9fa5]*)',scores)[0]
fuwu = re.findall(r'服务:([\u4e00-\u9fa5]*)',scores)[0]
except:
kouwei = huanjing = fuwu = '无'
```
### 数据存储
我们使用MYSQL数据库,安装教程参考[菜鸟教程](http://www.runoob.com/mysql/mysql-install.html),python连接MYSQL数据推荐使用pymysql,同样是推荐菜鸟教程[菜鸟教程](http://www.runoob.com/python3/python3-mysql.html)。我们需要先建立一个数据库和表,然后连接并定义游标,然后写对应的sql语句,最后执行事务,存储部分的代码如下:
``` python
#连接MYSQL数据库
db = pymysql.connect("localhost","root","","TESTDB" )
cursor = db.cursor()
#存储爬取到的数据
def save_data(data_dict):
sql = '''INSERT INTO DZDP(cus_id, comment_time, comment_star, cus_comment, kouwei, huanjing, fuwu, shopID) VALUES(%s,%s,%s,%s,%s,%s,%s,%s)'''
value_tup = (data_dict['cus_id']
,data_dict['comment_time']
,data_dict['comment_star']
,data_dict['cus_comment']
,data_dict['kouwei']
,data_dict['huanjing']
,data_dict['fuwu']
,data_dict['shopID']
)
try:
cursor.execute(sql,value_tup)
db.commit()
except:
print('数据库写入失败')
return
```
### 反爬虫对抗
1. **修改请求头中浏览器信息**:使用fake_useragent第三方库,修改request中的headers参数,用法如下:
``` python
from fake_useragent import UserAgent
ua = UserAgent()
headers = {'User-Agent':ua.random}
```
2. **设置跳转路径**:在访问评论时,一般的浏览行为是从某一页跳转到下一页这样的,而不是直接通过连接访问,为了更好的伪装成一个正常的访问,我们需要设置一下跳转的路径,修改headers中的Referer参数
``` python
headers = {
'User-Agent':ua.random,
'Cookie':cookie,
'Referer': 'http://www.dianping.com/shop/518986/review_all'
}
```
3. **设置Cookies**:评论数据需要登录后才能获取,下面介绍一种非常简单方便的绕过登录的方法。
- 在网页上进行登录
- 使用Chrome浏览器的开发者工具,查询当前请求的cookie
- 复制浏览器中的cookie,使用此cookie对我们的请求进行伪装
4. **使用IP代理池**:这里使用西刺代理的免费代理,构建一个爬虫爬取西刺代理的ip,然后进行验证,筛掉不可用的ip,构建出ip池供后续调用,代码来自网络。但是经过测试,大众点评对一个账号不同ip访问监控非常严格,使用IP代理池不更换账号的话,死的更快,封你账号,然而构建账号池比较麻烦,我们先暂缓。
5. **降低爬取频率**:一个简单又有效的方法就是降低爬取频率,毕竟高频率的爬取对服务器也是一个考验,如果对速度的要求不是很高的话,建议把频率放慢一点,你好我好大家好!
``` python
import random
import time
time.sleep(6*random.random() + 4)
```
6. **设置断点续传**:即使降低了爬取频率,有时还是会被美团的网络工程师抓到的,小哥哥饶命啊~。因此我们需要一个断点续传的小功能,避免每次都从头开始爬。思路是建一个文本文件,存储当前爬取的进度,每次运行程序时都出当前进度开始,详见代码~
## 二、探索性分析与文本数据预处理
### 探索性分析
1. 查看数据大小以及基础信息 ,浏览数据
![data_head](文本分析挖掘/source/data_head.png)
2. 样本分布
![data_head](文本分析挖掘/source/stars.png)
3. 各店铺评分分布
![data_head](文本分析挖掘/source/dianpu.png)
4. 点评数的的时间分布
![data_head](文本分析挖掘/source/time.png)
5. 查看评论长度对结果影响
![data_head](文本分析挖掘/source/len.png)
### 数据预处理
1. **去除非文本数据**:可以看出,爬虫获取的数据非常多类似“\xa0”的非文本数据,而且都还有一些无意义的干扰数据,如结尾的“收起评论”
``` python
#除去非文本数据和无意义文本
data['cus_comment'] = data['cus_comment'].str.replace(r'[^\u4e00-\u9fa5]','').str.replace('收起评论','')
```
2. **中文分词**:中文文本数据处理,怎么能离开中文分词呢,我们使用jieba库,简单又好用。这里我们把文本字符串处理为以空格区隔的分词字符串
``` python
#中文分词
import jieba
data['cus_comment'] = data['cus_comment'].apply(lambda x:' '.join(jieba.cut(x)))
```
3. **去除停用词**:文本中有很多无效的词,比如“着”,“和”,还有一些标点符号,这些我们不想在文本分析的时候引入,因此需要去掉,因为wordcloud和TF-IDF都支持停用词,因此就不额外处理了
### 词云展示
![wordcloud](文本分析挖掘/source/wordcloud.png)
## 三、文本的情感分析
先上结果:
| 糖水店的评论文本 | 模型预测的情感评分 |
| :------------------------------------------- | :----------------- |
| '糖水味道不错,滑而不腻,赞一个,下次还会来' | 0.91 |
| '味道一般,没啥特点' | 0.52 |
| '排队老半天,环境很差,味道一般般' | 0.05 |
模型的效果还可以的样子,yeah~接下来我们好好讲讲怎么做的哈,我们通过爬虫爬取了大众点评广州8家最热门糖水店的3W条评论信息以及评分作为训练数据,前面的分析我们得知*样本很不均衡*。接下来我们的整体思路就是:文本特征提取(TF-IDF)—机器学习建模—模型评价。
我们先不处理样本不均衡问题,直接建模后查看结果,接下来我们再按照两种方法处理样本不均衡,对比结果。
### 文本特征提取(TF-IDF)
模型不能直接处理文本数据,因此需要先把文本数据转为向量,方法有词库表示法、TF-IDF、word2vec等,推荐一篇文章,总结得不错 https://zhuanlan.zhihu.com/p/44917421。
``` python
#使用TF-IDF进行文本转向量处理
from sklearn.feature_extraction.text import TfidfVectorizer
tv = TfidfVectorizer(stop_words=stopwords, max_features=3000, ngram_range=(1,2))
tv.fit(x_train)
```
### 机器学习建模
这里我们使用文本分类的经典算法朴素贝叶斯算法,而且朴素贝叶斯算法�
没有合适的资源?快使用搜索试试~ 我知道了~
大众点评评论文本挖掘,包括点评数据爬取、数据清洗入库、数据分析、评论情感分析等的完整挖掘项目.zip
共25个文件
ipynb:6个
png:6个
txt:3个
需积分: 1 2 下载量 180 浏览量
2024-06-13
16:23:46
上传
评论
收藏 18.55MB ZIP 举报
温馨提示
数据挖掘 大众点评评论文本挖掘,包括点评数据爬取、数据清洗入库、数据分析、评论情感分析等的完整挖掘项目 爬取大众点评十大热门糖水店的评论,爬取网页后从html页面中把需要的字段信息(顾客id、评论时间、评分、评论内容、口味、环境、服务、店铺ID)提取出来并存储到MYSQL数据库中。
资源推荐
资源详情
资源评论
收起资源包目录
大众点评评论文本挖掘,包括点评数据爬取、数据清洗入库、数据分析、评论情感分析等的完整挖掘项目.zip (25个子文件)
大众点评评论文本挖掘,包括点评数据爬取、数据清洗入库、数据分析、评论情感分析等的完整挖掘项目
dianping_textmining-master
大众点评爬虫
xuchuan.txt 150B
CRAW_IP.py 3KB
main.py 5KB
mysqls.py 1KB
README.md 1022B
proxies.txt 6KB
.gitattributes 66B
文本分析挖掘
msyh.ttc 22.51MB
文本挖掘&情感分析.ipynb 27KB
source
wordcloud.png 72KB
data_head.png 84KB
time.png 48KB
dianpu.png 8KB
len.png 7KB
stars.png 4KB
data.csv 12.42MB
探索性数据分析.ipynb 205KB
.ipynb_checkpoints
Untitled-checkpoint.ipynb 21KB
探索性数据分析-checkpoint.ipynb 205KB
文本挖掘&情感分析-checkpoint.ipynb 27KB
Untitled1-checkpoint.ipynb 72B
stopwords.txt 17KB
__pycache__
mysqls.cpython-36.pyc 1KB
README.md 12KB
项目说明.zip 46KB
共 25 条
- 1
资源评论
DC头发很茂密
- 粉丝: 2293
- 资源: 717
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 各省-恩格尔系数、泰尔指数(2000-2022年).zip
- labview双按钮和三按钮计时对话框
- Dev-C++ 软件安装教程
- 理光Ricoh MP C4504打印机驱动下载
- 编译器KEIL5-STM32-KEIL5护眼模式(绿豆沙色)global.prop
- lenovo-SR650-BIOS 4.11-BMC 9.80
- 智慧医院综合管理解决方案(医院综合监控中心).docx
- Python编程入门指南:背景知识与环境搭建
- 毕业设计《Python基于Opencv和SVM机器学习算法和百度AI平台车牌识别系统》+项目源码+文档说明+演示视频
- 基于 Vue 和 SpringBoot 的大病保险管理系统源代码+数据库+文档,模拟了就医和医保报销的过程
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功