描述

学了Python爬虫 文本分析 又看到学校上热搜 就写了个舆论监测的东西
#结果展示
首页数据总览
在这里插入图片描述
热度排行榜TOP10
在这里插入图片描述
趋势观察
在这里插入图片描述
在这里插入图片描述
词云展示
在这里插入图片描述
lda话题分析
在这里插入图片描述

项目结构

数据采集、数据分析、数据展示

信息来源都是面向公众的媒体平台,像微博、贴吧、知乎、微信这些,主要搜集关于某个主题文本信息。
爬下来的信息做了些初步的统计信息,和一些简单分析如上图。

采集数据

用python写的爬虫

爬虫结构

在这里插入图片描述

用到的库

在这里插入图片描述

这几个平台的都有相应的反扒措施,但是我爬的都是大家都能看到的不违法,而且我用一台服务器每隔四个小时爬取一次,不会造成多大影响
于是我看了其他一些反反扒的文章抓到了数据

模块介绍

download模块

通用下载模块,对网页内容下载

parser模块

请求到的信息格式微博、知乎是json格式,只需json.loads下来取某个key的values即可,微信、贴吧等是html网页源码格式,我使用的是BeautifulSoup库,soup.find_all()很顺手,使用lxml库的etree的xpath语法虽更简单,但是有时因为一个元素去改整个得到list很是麻烦

dataoutput

数据储存,我用的是mysql

1
2
3
4
5
6
7
8
9
# 数据统一格式
mdata = {
'plantform': 'weibo',
'mtimestamp': create_time,
'hotnum': hotnum,
'url': url,
'title': content,
'comments': comments
}

spidermain

调度模块,将前面三个模块综合起来

爬虫这里遇到的问题:如何设计增量爬取,如何保证数据质量

解决方案

增量爬取

每次爬取平台的信息前先查询数据库里最新的一条数据时间,作为参数只请求或保留该时间之后的数据即可

解决数据质量问题

我想要的是比如关于我们学校的人物、事件的讨论 就要对爬取的数据处理 比某些微博超话题下的微博内容就是些语气词 或是如 生气 开心这些分析价值不大的给过滤掉 一般小于三字的内容都可以过滤

时间储存统一使用时间戳,

代码量:爬虫部分大概900行代码

本地调试完成,就可上传Linux服务器,设置定时任务,每天抓取,做为数据分析的基础

数据处理分析

爬虫写好并稳定运行后 就开始处理爬取到的数据 数据如下图

原始数据

数据统计

分组统计

统计每个平台每天抓取的信息数量,web页面实时展示每个平台当天抓取的信息数量,定时每天凌晨将昨天统计数据写入mysql表,记录为每天各平台历史抓取信息数量,用于观察信息发布趋势变化

在这里插入图片描述

词云

查询一段时间内的所有数据,将title、comment字段下的内容查询先使用分词工具jieba分词、去停用词等预处理,得到每条记录的keywords将这些记录丢进模型计算每个词TFIDF值做出词云,可观察这段时间讨论的内容的关键词。
其实这个跟下面的lda差不多

情感分析

一是使用snownlp,但是结果很难让人满意。
二是使用情感词典(玻森情感词典),如下,会有11万词的评分,使用使就是遍历该词典,结果得分一般是加和计算。

珀森词典
我对比后选择了后者。

话题聚类

将信息进行主题聚类,发现讨论的话题,
这里我使用的是lda主题模型,目标是找到每一篇文档的主题分布和每一个主题中词的分布,根据每个主题词的分布,我们加以概括这个主题,该主题下的文章内容我称之为一个讨论话题。
再处理文本之前先进行文本预处理,切词、去停用词,标记文档,参数调整,再训练模型即可,过程原理大家感兴趣可以找相关文档看。

代码量

统计分析部分大概500行代码

数据展示

用Python flask 做的web,结合echarts生成一些图,更直观的查看信息发布趋势

在这里插入图片描述

代码量 该部分不算前端代码只有100行。

总记代码量 不到2000行

每一部分的东西都是之前几个学期学的东西,零零散散组了起来。