2024年6月14日发(作者:)
第
28
卷第
3
期
Vol.28No.3
北京电子科技学院学报
JournalofBeijingElectronicScienceandTechnologyInstitute
2020
年
9
月
Sept.2020
基于爬虫和文本处理的微博舆情分析系统
刘子谦
1
**
*
王志强
1,2
1.
北京电子科技学院
,
北京市
2.
国家信息中心
,
北京市
100070
100045
摘要
:
近年来
,
随着社交网络的兴起
,
微博自媒体对舆情演变发挥着越来越重要的作用
,
也给公众舆
论管理带来了新的挑战
。
本文针对微博舆情监控的实际需求
,
结合自然语言处理技术
,
设计并实现了
基于爬虫和文本处理的微博舆情分析系统
,
实现多线程爬虫
、
多维度数据分析
,
并进行可视化展示
。
该
系统可定向搜索某一社会热点话题
,
帮助用户全面了解网民情感态度
,
把握舆情发展动态
。
关键词
:
网络爬虫
;
自然语言处理
;
舆情监控
;
数据可视化
中图分类号
:TP311.56
文献标识码
:A
文章编号
:1672
-
464X(2020)3
-
31
-
09
上两个问题并针对现有舆情监控平台的缺陷进
从博文抓取
、
情感分析
、
数据处理
、
可行了改进
,
视化展示四个方面出发
,
设计了一个基于网络爬
虫和文本处理的微博舆情分析系统
。
1
引言
随着互联网的发展
,
大量网民通过自媒体平
台发表个人声音
,
也给舆情监控带来了新的挑
战
。
微博上大量碎片化信息蕴含着潜在价值
,
通
过分析可以了解民众所关心的社会热点话题
,
有
效监控舆情动态
。
政府
、
企业也能及时引导失实
言论
,
防止舆情进一步恶化
,
维护其社会公信力
。
然而
,
一方面
,
微博制定的反爬虫策略限制
用户访问频率
,
数据获取难度大
;
另一方面
,
微博
语言具有碎片化
、
多样性
、
凝练性等特点
[1]
2
架构设计
本文程序包括四部分
:
数据抓取模块
,
文本
处理模块
,
数据分析模块和数据可视化模块
。
程
序架构如图
1
所示
。
,
增
大了情感分析的难度
。
同时由于我国互联网发
展较晚
,
网络舆情监控方面的研究也较晚
,
且成
果参差不齐
[2]
。
以影响力较大的
“
微热点
”
网站
其关键词搜索功能有明显缺陷
,
不能自定为例
,
义时间段搜索数据
,
并且无法导出博文
,
不支持
智能情感分析
,
用户只能查看该关键词对应的热
度
,
却无法得知网友的情感动态
。
文章解决了以
*
图
1
程序架构
基金项目
:
信息网络安全公安部重点实验室开放课题项目资助
(No.C19614);
中国博士后科学基金面上项目
(2019M650606)
**作者简介
:
刘子谦
(2001—),
男
,
北京电子科技学院本科学生
;
王志强
(1985—),
男
,
讲师
,
博士
,
研究方向为网络与系统安全
。
(
通讯作者
:
王志强
)
·32·
2.1
数据抓取模块
北京电子科技学院学报
2020
年
因此本文选择
Python
作为爬虫语言
。
根虫库
,
程序提供了多种数据微博网站的高级搜索功能
,
据筛选模式
,
用户可以根据内容
、
时间
、
地点
、
博
主类型等进行定向搜索
,
提升数据价值和获取效
率
。
高级搜索设置界面和数据抓取整体程序框
架如图
2、
图
3
所示
。
网络爬虫技数据抓取采用了网络爬虫技术
,
术
(Webcrawler)
是指自动化获取网页数据程序
或脚本
。
它从给定的网页出发
,
分析目标网页结
构
,
进而获取指向其他网页的
URL,
再继续选择
并搜索下一个站点
[3]
。
由于
Python
语法结构简
selenium
等出色的第三方爬洁
,
并拥有
requests、
图
2
数据抓取流程图
图
3
数据抓取流程图
然而微博设计了反爬机制
,
用户只有登录后才能浏览微博信息
。
微博服务器会向登录用户
第
28
卷基于爬虫和文本处理的微博舆情分析系统
·33·
发送一个
Cookies,
当他继续访问微博其他网页
时
,Cookies
将被浏览器添加到请求头并发送到
服务器
,
服务器可以通过
Cookies
识别用户身
份
。
因此
,
获取有效
Cookies
成为突破微博反爬
虫策略的关键
。
由于微博
Cookies
的有效时间较短
(
通常为
几天
),
直接复制浏览器请求头效率低并会影响
用户使用体验
。
针对此问题
,
本系统设计了账号
密码登录
、
二维码登录
、
读取本地
Cookies
三种
模拟登录机制
。
微博对账号密码登录和二维码登录接口都
设计了较强的反爬
,
前者使用算法对数据进行加
密传输
;
后者只有用户点击
“
二维码登录
”
按钮
后
,
才会加载二维码
。
本文选择了
Selenium
爬
虫框架
。Selenium
是一个开源的浏览器自动化
测试框架
,
安装对应的驱动程序后
,
可以操控包
括
Chrome、Firefox
在内的主流浏览器
。
其特点
是能模拟用户真实操作
,
难以被服务器判识为爬
虫
。
同时
Selenium
支持多种交互模式
,
比如模
拟鼠标点击
,
填充网页输入框等
;
也支持多种元
素定位方法
,
如
XPath、CSS、Selector
等
,
因此能
实现模拟真实用户输入密码
、
点击登录按钮或点
击二维码登录按钮
。
程序只需要时刻判断当前
链接变化
,
即可判断用户是否登录成功
。
若登录
成功则抓取当前
Cookies。
并询问用户是否存储
到本地
,
方便下一次直接调用
。
具体流程图如图
4
所示
。
为了提高抓取效率
,
本文使用
Python
的
thread
库实现多线程数据抓取
,
并在确定
URL
后
,
根据用户设置的线程数
,
将任务平均分配到
每个线程
。
微博对每个
IP
设置了访问频率限
制
,
多线程访问速度过快易触发微博反爬
,
因此
每次抓取时程序会自动设置到
89
免费代理网
(http://www.89ip.cn/)
抓取代理
IP
列表
,
每个
线程使用不同的代理
IP,
从而有效绕开反爬
,
提
高程序稳定性和抓取效率
。
Selenium
模块会调用浏览器引擎
,
因此访问
图
4
模拟登录流程图
网页时会和真实用户一样加载图片等无用数据
,
导致数据抓取速度过慢
,
因此程序采用了更加高
效的
requests
库
。Requests
是
Python
出色的爬
虫库之一
,
基于
urllib
标准库编写
,
拥有比
urllib
库更简洁的语法
,
极大提高编程效率
。
使用
re-
quests
库访问事先确定的
URL,
并发送包含
User-Agent
和
Cookies
的请求头
,
即可绕开微博
反爬并获取网页信息
。
根据微博网页的类型
,
程序的网页解析模块
使用了
BeautifulSoup
库和
re
库
(
正则表达式
)。
BeautifulSoup
库拥有
lxml、html5lib、html.parser
等多种解析器
,
可以解析
HTML
格式或
XML
格
式的数据
,
使之结构化格式化
,
进而从中提取目
标信息
[4]
。
经
BeautifulSoup
库解析获取的网页
数据往往夹杂乱码
,
而
Re
库可以对字符串进行
多种自定义处理
,
进一步清洗数据
。
在获得包括
微博内容
、
发布时间
、
点赞量
、
评论量等信息的同
时
,
程序还会抓取每条博文对应的博主
ID,
进而
构造出博主主页链接
。
为了进一步提高数据价
·34·
北京电子科技学院学报
2020
年
值
,
分析关注该微博热点的发布者情况
,
每抓取
程序会自动遍历博主链接列表
,
完一页博文后
,
抓取所有博主的个人信息
。
同时
,
系统设计了数据存储模块
,
通过创建
SQLAlchemy
库中的
create_engine
对象根据用户
配置连接到
MySQL
数据库
,
实现数据存储
。
为
程序会自动在本地保存上了提升用户使用体验
,
一次的数据库用户密码配置
,
并创建连接
。
用户
设置界面如图
5
所示
,
未安装数据库的用户也可
选择导出到
Excel。
图
5
数据抓取流程图
2.2
文本处理模块
文本情感分析
(
又称为倾向性分析
)
是对有
删除连续字符
、
表情
、
链接等
。
并根据博文的情
感色彩
,
人工剔除情感不鲜明的数据
,
并分成两
组
,
每两条微博间用回车隔开
,
分别命名为
neg.
txt
和
pos.txt,
每个文件约有
60000
条微博
。
利用
SnowNLP
库提供的训练接口
,
可方便地训练模型
。
只需要
fromsnownlpimportsentiment
sentiment.train('neg.txt.','pos.txt')
情感色彩的主观性文本进行分析
、
处理
、
归纳和
推理预测的过程
[5]
。SnowNLP
是基于深度学习
的
Python
第三方库
,
可以方便处理中文文本
,
支
持中文分词
、
词性标注
、
情感分析
、
文本分类等
。
其情感分析模块利用贝叶斯模型统计文本中特
征词词频
,
进行训练和预测
。
由于该库的默认模
型训练集是某电商评论数据
,
其语言特征和微博
博文有很大差距
,
会导致程序预测结果误差较
大
,
因此需要使用微博数据重新训练模型再进行
情感分析
。
为了使模型更精确
,
本文使用系统的
“
高级
搜索
”
功能
,
抓取了
2020
年
4
月到
7
月的十二万
余条微博博文
,
覆盖国际
、
科技
、
娱乐
、
社会等热
点话题
,
也包含了最近的网络流行语
。
之后
,
使
用
re
库
(
正则表达式
)
对博文中数据进行处理
,
调用
save
方法即可保存模型后
,
修改
SnowNLP
库
__init__.py
文件中的
data_path
的
值
,
使之指向刚刚训练生成的文件
,
即可实现默
认情感分析模型的更改
。
经过测试
,
新模型的预
测效果明显优于原先默认的模型
。
每爬取完一张网页后
,
程序会循环遍历博文
列表
,
清洗博文
,
去除微博特有的停用词
(
如
“
回
”,“
转发
”
复等
),
再调用
SnowNLP
的
sentiment
方法
,
根据训练好的模型给出情感评分
,
评分越
第
28
卷基于爬虫和文本处理的微博舆情分析系统
·35·
高说明该文本情感
“
越积极
”。
最后将该情感评
分存储到列表
。
2.3
数据分析模块
除了丰富的爬虫库
,Python
还有众多出色的
数据处理库
,Pandas
就是其中之一
。Pandas
经
常被用于科学计算和数据分析
,
同时可以快速读
取数据库或
Excel
中的数据并转换为
DataFrame
类型
;DataFrame
是
Pandas
中的一个表结构的数
据结构
,
包括三部分信息
,
表头
,
表的内容
(
二维
矩阵
),
索引
,
这与程序中需要表示的数据结构
非常契合
,
而且比起
EXCEL
和数据库中的表
,
Pandas
提供了大量基于
DataFrame
的数据分析
方法以及众多与外部数据进行交换的方式
[6]
。
在处理时间方面也有独特的数据结构
:“
时间序
列
”,
能智能识别多种时间格式
,
从而对微博发
布时间进行重采样运算
,
实现对博文发布量的时
间统计
;
使用分类汇总算法可以对某一省份微博
发布量进行汇总
,
统计微博发布的全国分布
;
同
时
Pandas
核心使用
Cython
编写
,
能将列表
、
字典
等数据类型转换为对应的
C
语言数据类型
,
有
效解决
Python
运算速度慢的问题
。
因此
,
使用
Pandas
可以快速统计千万条博文的博主性别比
例
、
博文的时间发布量等
,
根据博主性别分类汇
总情感评分
,
并分别计算出男女博主的情感平
均值
。
2.4
数据可视化模块
使用词云图实现文本数据可视化
。
通过词
云图展示微博博文能让关键词一目了然
,
用户可
以快速了解该关键词对应社会热点的相关信息
。
生成词云图的关键是提取关键词
,
主要通过分
词
、
去停用词和词频统计实现
。
分词技术是将文
本中连续的字按预先设计的算法分隔为不连续
的词的过程
[8]
。
由于中文词之间没有天然的分
隔符
,
词边界相对模糊
,
甚至同一文本有多种不
同的分词方式
,
处理难度远大于英文
[9]
。
在众
多分词库中
,jieba
分词效果最好
,
功能最为强
大
。
拥有精准模式
(
无冗余
)、
全模式
(
返回全部
可能的分词情况
)、
搜索引擎模式
(
在精准模式
基础上对长词进行二次切分
)
三种分词模式
,
可
以满足多种场合分词需求
。
由于微博多采用网
络语言
,
无意义的停用词较多
,
本文程序将读取
事先整理的停用词词典
:ChineseStopWord.txt
对
jieba
返回的分词列表进行清洗
,
仅保留关键词
。
Wordcloud
是
Python
的一个词云图库
,
可以
自动统计词频
,
开发者只需将关键词数据以字符
串格式
(
关键词之间用空格隔开
)
传入
Wordcloud
函数
,
即可生成词云图
。
同时该库允
许用户自定义词云图形状
、
文字色调
、
文字大
小等
。
其他数据通过图表方式展示
。Pandas
自带
了基于
Matplotlib
的可视化接口
,
支持多种图表
格式
,
但风格单调
。Echarts
是一个免费的可视
化库
,
基于
Javascript
开发
,
可以生成动态交互式
图表
,
并支持个性化风格设计
[7]
。
第三方库
Py-
echarts
能直接使用
Python
语言生成
Echarts
图
表并支持
pip
安装
。
Pyecharts
生成的可交互图表为
HTML
格
式
,
同时
pyqt5
提供了谷歌内核的
QwebEngine
控件
,
可以将本地
HTML
文件加载到
UI
界面
,
最
终实现动态图表展示
。
3
实验及结果评估
本文以
“
许可馨事件
”
为关键词
,
抓取
3
月
30
日到
8
月
17
日一万余条微博数据
,
分析博文
的情感和发布量的时间变化规律
,
并对博主信息
进行了统计
。
数据抓取结果如图
6
所示
。
3.1
绘制时间变化曲线
对每条博文的发布时间使用
resample
方法
按天进行重采样
,
得到微博
-
时间统计图
,
如图
7
所示
。
从图中可以直观看出
“
许可馨事件
”
的热
度和公众情感走向
,
六月份以后热度明显降低
,
而博文情感始终维持在较低水平
。
对微博发布时间按小时重采样
,
可以得到微
博发布的小时分布规律和情感变化规律
。
如图
8
·36·
北京电子科技学院学报
2020
年
图
6
数据抓取结果
图
7
微博日发布规律
图
8
微博小时发布规律
所示
。
对
“
许可馨事件
”
较为关注的人群大多在
夜间
(20:00—0:00)
发布微博
。
日间情感略好于
夜间
。
3.2
统计热点平均情感和博主性别比例
分别计算所有博主
、
男性博主
、
女性博主的
情感评分均值和博主性别比例并绘制水球图和
饼图
,
可以粗略反映不同网民对热点事件的情感
态度
。
生成的图表分别如图
9、
图
10
所示
。
从
网友情感比较消极
,
并且男性中可以明显看出
,
情感明显低于女性
,
且发文博主中超过
70%
为
“
许可馨事件
”
男性
,
男性对的关注度更高
。
3.3
绘制博主分布地图
根据所在地对博主进行分类汇总并计数
,
即
可得到该热点话题的省份关注规律
。Pyecharts
提供了多种地理空间图表接口
,
包括世界地图
、
中国地图以及中国全部省份和部分城市地图
,
可
以轻松绘制博主分布热力图
。
具体效果如图
11
所示
。
第
28
卷
基于爬虫和文本处理的微博舆情分析系统
·37·
图
9
(b)
女性博主情感评分均值
,(c)
所有博主情感评分均值
。
平均情感
。(a)
男性博主情感评分均值
,
图
10
博主性别比例和国内外比例
图
11
博主地区分布
3.4
绘制词云图
去除所有博文停用词后
,
绘制的词云图如图
3.5UI
设计
UI
设计
(UserInterfaceDesign)
指面向电子
[10]
12
所示
。
从中可以直观看出博文的关键词
。
产品的界面设计
,
用户使用体验是
UI
设计的
·38·
北京电子科技学院学报
2020
年
图
12
词云图
4
总结
面对复杂多变的网络舆情形势
,
快速准确分
析舆情动态变得尤为重要
。
本文使用
Python
爬
虫和数据处理库
,
设计了一套多线程舆情监控方
法
:
将
selenium
框架和
requests
库同时使用
,
既
能突破微博反爬
、
也保证了数据抓取的高效
;
使
用
snowNLP
训练模型对博文进行情感分析
;
使
用运算速度更快的
pandas
进行数据处理
;
通过
pyecharts
能为用户进行可视化展示
。
与此同时
,
本程序情感分析模型准确率
、
程序稳定性
、
数据
起点和终点
。
优秀的
UI
设计能让用户使用习惯
的交互方式进行操作
[11]
,
为用户带来可靠和愉
悦的交互体验
。
对此
,
本程序设计了简单易用
、
美观简洁的用户操作界面
,
合理布局按钮
,
添加
多个容错机制和等待交互机制
,
同时提高程序稳
定性
,
解决了多种因素导致的
“
闪退
”
问题
。
同
时
,
本文对图表进行了美化处理
,
并将他们放到
同一个页面上
,
直观展示各个数据特征
。
抓取速度等有待提高
,
未来将优化深度学习算
法
,
完善容错机制
,
进一步提升用户体验和程序
实用性
。
参考文献
1]
王雨烟
.
浅谈微博语言的特征
[J].
新闻研
究导刊
,2019,10(22):87
-
89.
2]
唐勇
.
互联网舆情监控系统的设计与实现
[D].
北京
:
北京邮电大学
,2013.
3]
孙易冰
,
赵子东
,
刘洪波
.
一种基于网络爬
虫技术的价格指数计算模型
[J].
统计研
[
[
[
第
28
卷基于爬虫和文本处理的微博舆情分析系统
·39·
2014,31(10):74
-
80.
究
,
[4]
沈承放
,
莫达隆
.BeautifulSoup
库在网络爬
J].
电脑知识与技虫中的使用技巧及应用
[
2019,15(28):13
-
16.
术
,
[5]
曾小芹
,
余宏
.
基于
Python
的商品评论文本
.
电脑知识与技术
,2020,16
情感分析
[J]
(8):181
-
183.
[6]
刘雨珂
,
王平
.
基于
Python
+
Pandas
+
Matplotlib
的学生成绩数据统计与图形输出
J].
福建电脑
,2017(11):140
-
142.
实现
[
[7]
刘原铭
.
基于
Python
的中小学云课堂平台
.
北京
:
北京交通大设计与实现
[D]
2018.
学
,
[8]
潘亚星
.
基于
Python
的词云生成研究
———
J].
电脑知识与技以柴静的
《
看见
》
为例
[
2019,15(24):8
-
10.
术
,
[9]
黎曦
.
基于网络爬虫的论坛数据分析系统
.
武汉
:
华中科技大的设计与实现
[D]
2018.
学
,
[10]
缪梦玉
.
以用户体验为中心的
UI
设计视觉
D].
天津
:
天津理工大学
,2015.
表现研究
[
[11]
王晓菲
.
社交
APP
界面的交互设计
———
以
J].
戏剧之家
,2019
手机微信
UI
设计为例
[
(35):125.
WeiboPublicOpinionAnalysisSystemBasedonCrawler
andTextProcessing
LIUZiqian
12
WANGZhiqiang
1,
1.BeijingElectronicScienceandTechnologyInstitute,Beijing
2.StateInformationCenter,Beijing
100070,P.R.China
100045,P.R.China
Abstract:Inrecentyears,withtheriseofsocialnetworking,We-MediabasedontheWeiboplatform
playsanincreasinglyimportantroleintheevolutionofpublicopinion,bringingnewchallengestopublic
opinionmanagement.AccordingtothepracticaldemandsofWeibopublicopinionmonitoring,aWeibo
publicopinionanalysissystembasedoncrawlerandtextprocessingisdesignedandimplementedby
combiningnaturallanguageprocessingtechnology,wheremulti-threadedcrawler,multi-dimensional
dataanalysisandvisualdisplayareachieved.Withthissystem,acertainsocialfocuscouldbesearched
orientationally,whichhelpscustomerscomprehensivelycapturethesentimentattitudesofonlineusers
andgraspthetendencyofpublicopinion.
Keywords:webcrawler;naturallanguageprocessing;publicopinionmonitoring;datavisualization
(
责任编辑
:
张艳硕
)


发布评论