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

责任编辑

张艳硕