练习从数据采集、分析到展示的过程
描述
学了Python爬虫 文本分析 又看到学校上热搜 就写了个舆论监测的东西
#结果展示
首页数据总览
热度排行榜TOP10
趋势观察
词云展示
lda话题分析
项目结构
数据采集、数据分析、数据展示
信息来源都是面向公众的媒体平台,像微博、贴吧、知乎、微信这些,主要搜集关于某个主题文本信息。
爬下来的信息做了些初步的统计信息,和一些简单分析如上图。
采集数据
用python写的爬虫
爬虫结构
用到的库
这几个平台的都有相应的反扒措施,但是我爬的都是大家都能看到的不违法,而且我用一台服务器每隔四个小时爬取一次,不会造成多大影响
于是我看了其他一些反反扒的文章抓到了数据
模块介绍
download模块
通用下载模块,对网页内容下载
parser模块
请求到的信息格式微博、知乎是json格式,只需json.loads下来取某个key的values即可,微信、贴吧等是html网页源码格式,我使用的是BeautifulSoup库,soup.find_all()很顺手,使用lxml库的etree的xpath语法虽更简单,但是有时因为一个元素去改整个得到list很是麻烦
dataoutput
数据储存,我用的是mysql
1 | # 数据统一格式 |
spidermain
调度模块,将前面三个模块综合起来
爬虫这里遇到的问题:如何设计增量爬取,如何保证数据质量
解决方案
增量爬取
每次爬取平台的信息前先查询数据库里最新的一条数据时间,作为参数只请求或保留该时间之后的数据即可
解决数据质量问题
我想要的是比如关于我们学校的人物、事件的讨论 就要对爬取的数据处理 比某些微博超话题下的微博内容就是些语气词 或是如 生气 开心这些分析价值不大的给过滤掉 一般小于三字的内容都可以过滤
时间储存统一使用时间戳,
代码量:爬虫部分大概900行代码
本地调试完成,就可上传Linux服务器,设置定时任务,每天抓取,做为数据分析的基础
数据处理分析
爬虫写好并稳定运行后 就开始处理爬取到的数据 数据如下图
数据统计
分组统计,
统计每个平台每天抓取的信息数量,web页面实时展示每个平台当天抓取的信息数量,定时每天凌晨将昨天统计数据写入mysql表,记录为每天各平台历史抓取信息数量,用于观察信息发布趋势变化
词云
查询一段时间内的所有数据,将title、comment字段下的内容查询先使用分词工具jieba分词、去停用词等预处理,得到每条记录的keywords将这些记录丢进模型计算每个词TFIDF值做出词云,可观察这段时间讨论的内容的关键词。
其实这个跟下面的lda差不多
情感分析
一是使用snownlp,但是结果很难让人满意。
二是使用情感词典(玻森情感词典),如下,会有11万词的评分,使用使就是遍历该词典,结果得分一般是加和计算。
我对比后选择了后者。
话题聚类
将信息进行主题聚类,发现讨论的话题,
这里我使用的是lda主题模型,目标是找到每一篇文档的主题分布和每一个主题中词的分布,根据每个主题词的分布,我们加以概括这个主题,该主题下的文章内容我称之为一个讨论话题。
再处理文本之前先进行文本预处理,切词、去停用词,标记文档,参数调整,再训练模型即可,过程原理大家感兴趣可以找相关文档看。
代码量
统计分析部分大概500行代码
数据展示
用Python flask 做的web,结合echarts生成一些图,更直观的查看信息发布趋势
代码量 该部分不算前端代码只有100行。
总记代码量 不到2000行
每一部分的东西都是之前几个学期学的东西,零零散散组了起来。