【优秀python毕设案例】基于python django的新媒体网络舆情数据爬取与分析

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 本文介绍了一个基于Python Django框架开发的新媒体网络舆情数据爬取与分析系统,该系统利用Scrapy框架抓取微博热搜数据,通过SnowNLP进行情感分析,jieba库进行中文分词处理,并以图表和词云图等形式进行数据可视化展示,以实现对微博热点话题的舆情监控和分析。

摘要

如今在互联网时代下,微博成为了一种新的流行社交形式,是体现网络舆情的媒介之一。现如今微博舆论多带有虚假不实、恶意造谣等负面舆论,为了营造更好的网络环境,本设计提出了基于新媒体的网络舆情数据爬取与分析,主要对微博热点话题进行处理。

本设计首先以Python为环境基础,系统前后端采用前后端分离开发,后端处理请求返回json数据,前端负责页面开发,前端页面框架为layui,数据库MySQL,后端flask。基于 scrapy 框架,对微博热搜数据进行抓取。其次通过使用SnowNLP对数据进行情感分析,利用jieba库对待分析的数据进行中分词处理,最后通过可视化展示出来。此系统的实现使对微博热搜话题榜数据更加直观,更好地了解当下的舆情,挖取其中的价值信息。

1 引言

1.1 系统开发的背景和意义

在当今大数据时代,各种社交软件层出不穷,信息呈爆炸式增长,人们能够在各种社交媒体上参与话题讨论。微博作为当下流行的社交媒体之一,公众关注的事件话题很容易在其上面掀起舆论的风波,因此收集一些网民关注的热点话题进行研究,具有很高的参考价值1。

网络舆情是网民在互联网上对社会问题不同看法的网络舆论,是通过互联网传播的公众对现实生活中的某些热点话题、焦点事件所持的较有影响力的、倾向性的言论及观点。在发展迅速的互联网中,网络舆情具有突发性、爆炸性及片面性的特点,如若故意散布不实信息,很容易误导大众,从而引导负面舆论,对社会造成威胁。互联网时代的信息繁多冗杂,舆情发展速度之快,负面影响之大,社会各界也同时要引起相应的重视。

热点事件在微博上的传播速度很快,能够迅速引起大量网友的关注和评论,从而与其相关的话题就会产生。这些话题都是影响力巨大的事件,经过网友的转发、评论,形成热点话题。这些话题犹如一把锋利的双刃剑,既能够带动社会发展,又能造成社会紊乱。因此,对微博热点话题进行数据采集分析,通过直观的数据,以及引导正确的网络舆情方向,维护网络秩序,营造良好的网络环境。

1.2 国内外目前的研究现状

目前互联网处于飞速发展的时代,相比于其他国家,我国在网络舆情方面相对于落后其它欧美日等发达国家,行业达不到统一标准,由此也导致了我国在网络舆情方面上的质量成果良莠掺杂。虽然如此,但仍然有不少机构在处理网络舆情方面做得非常优秀。如:人民日报、澎湃新闻、新京报等。

虽然我国在网络舆情方面的研究相对国外来说起步较晚,但自中共十六届四中全会公报中首次提出重视网络舆情对社会的影响要求后,网络舆情的研究和实践开始慢慢增多2。对于网络舆情,其中已出现的大量事件,以及表达出来的立场、态度、突发出的舆情危机、民众的情感表现,目前还存在许多不足。大多数对某些热点话题或事件的研究结果也是不具备详细性的,因此也无法对突发的微博网络舆情做更好的引导。

在这个崭新的新媒体时代,大家对各种数据都十分关注,人们也更加注重数据所带来的价值。在多个专家学者的共同努力之下,目前我国在网络舆情方面虽然已经取得了巨大的进步,但面对浩如瀚海的数据信息,仍有公众在网络上散布不实言论,错误引导网络舆情方向,对社会造成不良影响。

2 相关技术介绍

2.1 网络爬虫简介

网络爬虫又称为网页蜘蛛3、网络机器人或网页追逐者。网络爬虫是一种按照一定规则,自动提取网络信息的程序或脚本。它在本质上是一些程序,能够自动按要求提取Web文本、获取万维网信息。在爬虫过程中,可能会遇到开发者对此进行的保护和限制,因此通常会遇到反爬虫机制。网络爬虫按照系统结构和实现技术,通常分为以下四种类型:

(1)通用网络爬虫,又称为全网爬虫,其爬虫对象从一些种子URL扩充到整个Web,主要为门户站点搜索引擎(如百度、谷歌等)和大型Web服务提供采集数据。其主要目的是尽可能的将互联网上的所有网页下载下来,放在本地服务器中形成镜像备份,并对这些网页进行处理,再提供给用户检索使用4。这种网络爬虫的范围和数量极大,对于爬虫的速度和存储空间要求也偏高。这种爬虫方式存在一定的缺陷,它有较多待刷新的页面,花费的时间较长。尽管如此,这种爬虫方式用于搜索引擎搜索广泛的主题,应用价值较大。

(2)聚焦网络爬虫,又称为主题网络爬虫,是指有选择地爬取那些与主题相关的页面信息。它可以对某个特定内容进行聚焦,从而对其进行数据采集,将信息进行过滤和筛选进而使信息无限接近需求。相比于通用网络爬虫,聚焦爬虫添加了链接评价和内容评价模块。此种爬虫方式的关键点是页面评价内容及链接的重要性,由此导致的访问链接的顺序也不同。

(3) 增量式网络爬虫是指使用爬虫程序监察某个网站的数据更新情况,由此可以方便爬取到其网站更新出来的新的数据。它的爬取工作方式是:先判断URL在发送请求前是否已经爬取过,其次判断在解析内容后的这部分内容是否再此爬取过。不难发现,增量式网络爬虫的核心实质上是去重。

(4)Deep Web网络爬虫,Web网页按照存在方式可以分为表层网页和深层网页两种。Deep Web是指大多数内容不可以使用静态链接获取、仅仅是用户提交的关键词才可以获得的Web页面。此种方法通过预先定义的知识库来识别页面内容,同时可以通过来自Web站点的导航模式识别并自主填写表单时要进行的路径导航。

2.2 Scrapy爬虫框架简介

Scrapy是一套快捷有效的Web页面抓取框架,其用途广泛,大部分用于数据挖取、监测以及自动化测试等场景5。Scrapy通过利用twisted异步网络库来解决网络通讯问题,它有着清晰的框架结构,模块与模块间的耦合度相对较低,并且它包含了各种各样的中间件接口,灵活度极强。Scrapy使用的异步处理是非堵塞的,速度极快,它是一个Python事件驱动网络框架。它能够自主利用调节机制来自行规定爬取速度,同时对于构建大规模的项目抓取也是十分方便的。Scrapy的导出格式有:JSON、CSV、XML。Scrapy通过Xpath或Css选择器来抓取数据,可以自动从网页中获取数据。其架构组成如下图2.2所示:

图2.2 Scrapy架构图

Figure 2.2 the architecture of Scrapy

  1. Scrapy Engine(引擎):作为解决整个系统的数据流处理流程、触发性事件的中心部分。
  2. Item(项目):对爬取出的数据结构进行定义,并会被赋值为该对象。
  3. Scheduler(调度器):负责接收请求并将其加入队列,同时将引擎再次发出请求时能够提供给引擎。
  4. Item Pipeline(项目管道):它是负责清洗数据、验证数据以及存储数据,主要解决从蜘蛛网页中提取的项目。
  5. Downloader(下载器):主要是对网页的内容部分进行下载,并将其内容回馈给Spiders。
  6. Spiders(蜘蛛):是指对网页的规则进行解析以及对爬取的逻辑进行定义,主要是解决解析响应并负责产生提取结果及新的请求。

Scrapy有它的专属数据流机制:

  1. Engine在打开一个网页时,会首先找到Spiders并向它发出第一个要爬取的URL,在此之后会利用Scheduler以Requests的形式调度,并向Scheduler发出请求下一个要获取的URL。
  2. Scheduler会在爬取下一个URL时返回给Engine,Engine在通过利用Downloader Middlewares将URL转发给Downloader,供其下载。
  3. 当页面下载完成时,Downloader会生成一个Response,在利用Downloader Middlewares发送给Engine。Engine在接收后,会利用Spider Middlewares发送给Spider,让其处理。
  4. Spiders在处理后会返回到Item和新的Request发送给Engine。Engine再将返回的Item传递给Item Pipeline,并且将新的Request传递给Scheduler。

第二步重复到最后一步,当Scheduler中没有过多Request时,Engine将此网站关闭,爬虫结束。

由于Scrapy的功能极强,有关的扩展组件居多,因此它的爬取效益就高。在Python中,它是使用最频繁的爬虫框架,应用广泛。

2.3 MySQL数据库

数据库即以某种方式存储互相有关数据的集合,也是用来对数据进行存储的仓库。MySQL是关系型数据库管理系统,最初是由瑞典公司MySQL AB公司开发6,并于2009年被Oracle收购。MySQL是当下使用频率最高数据库管理系统。

MySQL最大的特点是它是个开放源代码的数据库管理系统,用户可以依据自己的需求修改DBMS。MySQL可以在多个操作系统下运行,如:Windows、UNIX及Linux系统等。它采用多线程编程技术,是轻量级进程,在为用户提供服务时,不会占用较多的资源。故MySQL在对数据进行处理时,更快、更高效。

2.4 Django框架

Django基于Python编程的驱动之下,是个免费开放源代码的Web开发框架7,它能够方便快捷的建造出高机能的网站。Django采用模型M(Model)、模板(Template)和视图V(Views)框架模式,即MTV设计模式,如图2.4所示:

python-1.png

图2.4 MTV设计模式

Figure 2.4MTV设计模式

在Django框架中,控制器允许框架自主解决用户输入的部分,因此Django更关注MTV设计模式,它们各自的模式有以下几个方面:

  1. 模型M(Model),负责解决与数据有关的事务,怎样进行存取、检验有效性、包括具体某些行为及数据间的关系等。
  2. 模板T(Template),负责解决与表现有关的决定,怎样显示页面或其他类型的文档。
  3. 视图V(Views),负责对模型进行存储以及对相应的模板进行调用,它是模型与模板之间的桥梁。

2.5 中文分词技术

中文分词技术就是指利用一些方法将连续的诸多中文文本序列,根据一定的规则进行切割划分,在根据现实中的规范进行组合,最终形成的分词序列8。中文分词技术可以分为三类:规则分词、统计分词和混合分词。规则分词是指根据某种方式将词库进行分配,简单方便,实现起来非常高效。但它也有一定的缺陷,它对新的词难以实现处理。统计分词是指对新词发现的特殊场景进行较好的处理,它的缺陷是对语料的质量过于依赖。而二者的结合,即规则分词加统计分词就是混合分词,在实践中也大多利用的是混合分词。中文分词是处理语言的第一步骤,只有经过中文分词,才能够进行短语的划分、提取关键词、情感的分析和主题的分析。现如今,中文分词算法可归纳为五类:词典分词算法、规则分词算法、统计分词算法、人工智能技术算法及字标注的分词算法五类。中文分词的常见分词算法如图2.5所示:

图2.5 中文分词算法分类图

Figure 2.5 the algorithms classification diagram of Chinese word segmentation

现如今经常使用的分词工具有以下几个:Jieba分词、SnowNLP、NLPIR以及百度自然语言处理分词系统。

在本系统中,主要用到的是Jieba分词,目前Jieba是Python中使用频率最高、最好的中文组件。Jieba分词有四种分词模式分别是:

  1. 将句子准确分开的精确模式,这种模式适用于对文本进行分析时使用;
  2. 全模式,这个模式会把能够成词的词语都给扫描出来,它的速度很快。但它有个缺陷,不能对有歧义的问题进行处理,即使是有歧义的词语,也能够把它扫描出来。
  3. 搜索引擎模式,这种模式是以精确模式为基础,将长词再次切分开来,使切分后的词语更精短。在这个模式中,即使输入很短的一部分词语,也能够检索到整个词语的有关文档,此模式晕用起来十分方便。
  4. Paddle模式,此模式是通过PaddlePaddle框架,并对网络模型进行序列标注,以此来实现分词,同时这种模式也支持词性标注。此模式是在jieba分词的4.0以及以上版本才能使用,并且需要安装paddlepaddle模块。

在Python中使用jieba分词,可以利用cut()函数来进行切分,同时jieba分词有七个步骤,具体的流程如图2.5-1所示:

图2.5-1 jieba分词流程图

Figure 2.5-1 thejieba word segmentation

jieba分词的过程为首先加载语料库及jieba自带的dict.txt字典,生成trie树。然后输入带分词的长中文字符串,使用正则表达式获取到连续的字符,切分成短语列表,接着用动态规划,得到最大概率路径。对那些语料库中没有的字组合成一个新的片段短语,使用HMM模型进行分词。最后使用Python的yield语法生成一个词语生成器,获得分好的词组[7]。

Jieba是并不是自带的,它属于第三方库。它可以对词典进行自定义,同时也支持繁体分词。Jieba的算法是:它能够根据前缀词典对词图进行高效率的扫描,对生成的一切成词情况构成有向无环图即DAG。采取动态规则方法,寻找最大路径,从而找出最大切分词频的组合。当然,对于未登录的词来说,jieba通过HMM模型,采用Viterbi算法。Jieba的主要功能是分词和添加自定义词典。

2.6 SnowNLP情感分析

SnowNLP是常见的Python文本分析库,它的功能有很多,例如:对关键词进行提取、情感分析、词性标注等等。SnowNLP情感分析的思想:基于分词后的文本数据,根据积极词库和消极词库,基于贝叶斯模型训练预测10。

SnowNLP情感分析一般通过情感字典来完成,它将文本分为消极和积极两类,返回值为情感的几率,当无限接近1时为积极,无限接近0时为消极,如图2.6所示:

图2.6 SnowNLP情感分析公式

Figure 2.6 SnowNLP Emotional Analysis Formula

2.7 本章小结

本章主要对基于新媒体下的网络舆情数据爬取与分析所涉及到的关键技术:网络爬虫、Scrapy爬虫框架、MySQL数据库、Django框架、中文分词技术、SnowNLP情感分析等技术做了详细的探讨。本章为网络舆情的的爬取与分析的实现提供了可靠的基础。

3 系统需求分析

3.1 功能性需求分析

由于当下网络繁衍速度飞快,微博是个开放性的信息平台载体,它承载着诸多信息,各类网民都可以对当下热点话题进行畅所欲言,因此导致微博网络舆论的信息质量良莠不齐。有些网民的基于热点话题的反馈确实是有效评论,但有些网民所提供的信息毫无意义甚至会被作为负面情绪的吐槽墙。微博热点话题是当下网络舆情的重要来源之一,不可忽视,因此要在诸多话题信息中抓取出有质量的数据,来帮助分析改善网络舆情现状。故该系统主要用于爬取微博热点话题并对其进行数据分析并进行结果展示。所以,该系统包括以下几个方面的功能需求:

  1. 数据提取。此功能需要HTTP库向微博指定的url发出请求,将其网页的代码获取出来,并通过Scrapy框架解析出微博的热点话题、评论、网民ID等内容的链接。在爬虫过程中可能会出现重复爬取的现象,需要对此情况进行处理,避免造成数据冗杂。
  2. 数据清洗。此功能数据预处理将所需的数据从种类杂多的数据中拆分出来,使用split方法将数据进行拆分。所得数据包含很多复杂且用不上的数据,且包含很多空值数据等。因此数据清洗的主要包括步骤:数据字段提取和去除空值。目的是在众多杂多的数据中拆分出系统所需要的数据,对字段进行拆分提取,使系统所需要的数据更加明显,方便系统后期的数据分析使用以及调用。
  3. 数据分析。此功能需要对抓取的数据进行有效分析,通过关键词、分词等信息对抓取的数据信息进行价值的评分,计算出能够满足的在不同筛选条件下的高频词汇。当然也需要对意义价值不大的出现频度高的词汇进行剔除,最后在进行进一步的评分。
  4. 数据存储。此功能对于数据处理完成的数据以及采集完成的数据使用MySQL进行存储,MySQL数据库可以实现高性能和高可用性,同时MySQL数据库具有更好的扩展性和灵活性,可以适应不同的应用场景,适合在微博热点舆情监控领域的使用。
  5. 对分析结果进行展示。高频词汇展示是指要在不同筛选条件的情况下,将高频词汇生成词云。并且需要展示出对话题的情感分析。词云图能够将关键部分的信息内容直观的展现出来,情感分析也能展示出观众的观影状态,从多个角度把控热点话题的舆论风向。

3.2 非功能性需求分析

系统除了要满足功能性需求以外,还要满足非功能性需求。具体包括以下几个方面:

  1. 可靠性。网络世界信息繁多而又复杂,会有许多预测不到的状况发生,因此在爬虫时,要考虑到有可能遇到的突发情况。例如:网页或服务器不存在、找不到标签等。从而影响整个系统。如果系统不可靠,会导致工作效率大大降低,并且无法获取到数据。
  2. 易用性。该系统要操作简单,保证良好的交互性,能够及时准确地抓取到所需要的信息内容。
  3. 高效性。在此系统中,由于抓取的是微博热点话题的信息内容,在获取数据量时所需要抓取的话题数是巨大的,所以在这过程中要尽量减少其它不相关页面内容的抓取,并选择适合的网页进行数据的解析,去掉无关信息,进而节省网页内容所占的内存和时间,提高其效率。
  4. 容错性。在此系统进行过程中,大概率会出现难以预料或难以掌控的情况。此时就需要系统具备一定的容错性,能够对操作者的错误行为进行提示,避免系统出现崩溃或者不响应的现象。

4 系统总体设计与实现

4.1 开发环境以及工具介绍

操作系统:Windows 10操作系统

开发语言:Python

系统内存:16GB

系统环境:Python3.11、Pycharm Community Edition2022.3.2

主框架:Django、Scrapy

运行环境:MySQL

浏览器:Microsoft Edge

4.2 系统总体架构设计

整体架构设计分为三个层面即数据层、逻辑层和表示层,如图4.2所示:

图4.2 系统争议架构图

Figure 4.2 Overall System Architecture Diagram

数据层主要是将从网页中爬取出来的具有分析意义价值的数据进行存储,在页面中提取出详细内容的URL链接,并对其链接内容进行信息处理、中文分词处理以及关键词提取等,用以进行词云图分析、情感分析以及可视化分析。表示层负责对逻辑层的结果进行表示,主要包括情感对比展示和高频词汇展示。

4.3 数据库设计

(1)数据库概念设计

数据库概念模型是系统设计的重要部分,该模型需要对系统中存储数据的结构和关系进行建模,以便系统能够高效地对数据进行管理和处理。

该系统的数据库概念模型设计主要包括以下6个实体:用户实体、微博榜单实体、博文信息实体、采集设置实体、关键词检测实体、关键词实体等多个实体,每个实体需要定义其属性、主键和关系等信息。

榜单实体包括属性如ID、榜单热度、标题等;用户实体包括属性如用户名、邮箱、密码、地址、电话等;博文信息实体包括属性如微博账号、转发内容、转发数、评论数、点赞数等;关键词检测实体包括评论内容、用户名、评分、点赞数、评论数等;关键词实体包括博文信息、评论内容、用户名、评分、点赞数、评论数等;采集设置实体包括采集频率、榜单、要闻、文娱等。系统数据库实体如图4.3所示:

图4.3 系统数据库实体图

Figure 4.3 System Database Entity Diagram

(2)数据库物理设计

根据上诉的逻辑模型设计,下面给出物理模型的设计,如下表:

表1 微博榜单表

Table 1 Weibo List

字段名称

类型

长度

字段说明

主键

默认值

bd_name

varchar

主键

bd_number

varchar

bd_theme

varchar

bd_other

varchar

表2 博文信息表

Table 2 Blog Information Table

字段名称

类型

长度

字段说明

主键

默认值

bd_name

varchar

bd_number

varchar

bd_theme

varchar

bd_other

varchar

comments_count

varchar

reposts_count

varchar

attitudes_count

varchar

mid

varchar

created_at

varchar

表3 关键词检测表

Table 3 Keyword Detection Table

字段名称

类型

长度

字段说明

主键

默认值

bd_name

varchar

bd_number

varchar

bd_theme

varchar

bd_other

varchar

comments_count

varchar

reposts_count

varchar

attitudes_count

varchar

mid

varchar

created_at

varchar

source

varchar

status_city

varchar

status_province

varchar

user

varchar

表4 关键词表

Table 4 Keyword Table

字段名称

类型

长度

字段说明

主键

默认值

id

int

主键

keyword

varchar

create_at

varchar

表5 用户表

Table 5 User Table

字段名称

类型

长度

字段说明

主键

默认值

id

int

主键

username

varchar

password

varchar

email

text

content

text

address

text

phone

text

表6 采集设置实体表

Table 6 Collection Setting Entity Table

字段名称

类型

长度

字段说明

主键

默认值

blog_id

varchar

主键

keyword

varchar

content

varchar

dianzan

varchar

zhuangfa

varchar

pingl

varchar

create_at

varchar

4.4 系统功能模块实现

 (1)微博信息采集模块实现

此模块主要是基于微博网络爬虫对微博有关页面内容进行爬取,点击“采集”按钮,采集出数据的结果就会在页面中显示出来,包含标题、微博内容等等。爬取出的数据能够存放在数据库表的微博信息表中,方便后续对其进行解析处理。微博信息采集模块设置如图4.4所示:

图4.4 微博信息采集模块设置

Figure 4.4 Settings of Weibo Information Collection Module

微博信息采集主要基于Scrapy爬虫框架是完成,此模块主要是利用Catch(user_id)来实行的,首先对user_id(个人微博主页)进行访问,其次对有关元素进行定位,然后对微博用户的昵称、微博数、内容等数据进行获取。最后完成微博信息的数据采集部分。此模块的主要代码部分如图4.4-0所示:

图4.4-0 微博信息采集模块设置代码

Figure 4.4-0 Weibo Information Collection Module Setting Code

(2)数据清洗与分析模块实现

此模块是将爬取出的微博信息将所需的数据从种类杂多的数据中拆分出来,使用split方法将数据进行拆分。所得数据包含很多复杂且用不上的数据,且包含很多空值数据等。因此数据清洗的主要包括步骤:数据字段提取和去除空值。清洗完数据后将数据存储到MySQL中,通过数据库查询并使用jieba库进行分词处理,计算出能够满足的在不同筛选条件下的高频词汇。当然也需要对意义价值不大的出现频度高的词汇进行剔除,最后在进行SnowNLP情感分析的评分,把显示出的结果给用户表现出来。数据清洗与分析模块如图4.4-1所示险情情绪分析页面:

图4.4-1 险情情绪分析页面中关键词提取部分

Figure 4.4-1 Keyword extraction section on the danger sentiment analysis page

此模块的主要代码部分如图4.4-2所示:

图4.4-2 关键词提取部分代码

Figure 4.4-2 Keyword Extraction Part Code

(3)对分析结果进行展示模块实现

     此模块在不同筛选条件的情况下,将微博险情分析数据进行展示,展示内容包括整体数据看板、热搜概况、爆文概况、热度分析、情感分析、其他、险情监控设置、险情博文、险情情绪分析险情监控看板。   

    其中数据看版页面在该页面通过layui图表布局,左边主要呈现爬取的微博数据指标,包括总微博文章数量,总点赞数量、总转发数量、总评论数量,以及折线图呈现时间序列中的微博数据指标,可以根据选择显示某一个指标或者全部指标。右边页面主要呈现热门话题以及发布的时间等。数据看版页面如图4.4-3所示:

图4.4-3 数据看版页面

Figure 4.4-3 Data Viewing Page

数据看版页面主要代码部分如图4.4-4所示:

图4.4-4 数据看版页面主要代码

Figure 4.4-4 Main Code of Data Viewing Page

热搜概况页面在该页面通过layui图表布局,页面呈现爬取的微博热搜数据,包括微博榜单,对应排序、微博内容、热度,可以根据选择输入关键词进行查询。通过前端页面发起请求获取后端django响应,返回一个json数据,通过layui前端生成表单,清晰呈现微博榜单热搜数据。热搜概况页面如图4.4-5所示:

图4.4-5 热搜概况页面

Figure 4.4-5 Hot Search Overview Page

热搜概况页面主要代码部分如图4.4-6所示:

图4.4-6 热搜概况页面主要代码

Figure 4.4-6 Main Codes of the Hot Search Overview Page

爆文概况页面在该页面通过layui图表布局,页面呈现爬取的微博博文内容,包括微博榜单,微博主题、评论数、点赞数、作者、博文内容、创建时间等,可以根据选择输入关键词进行查询博文内容。通过前端页面发起请求获取后端django响应,路由收到请求信息就查询数据库操作,返回一个json数据,通过layui前端生成表单,清晰呈现微博爆文数据。爆文概况页面如图4.4-7所示:

图4.4-7 爆文概况页面

Figure 4.4-7 Overview page of explosive articles

爆文概况页面的主要代码部分如图4.4-8所示:

图4.4-8 爆文概况页面主要代码

Figure 4.4-8 Main Code of the Overview Page of Explosive Articles

热度分析页面在该页面通过layui图表布局,通过前端页面发起请求获取后端django响应,路由收到请求信息就查询数据库操作,对博文热度划分成不同的区间,返回一个json数据,通过layui前端的echart渲染后生成热度分析的柱形图,清晰呈现微博热度博文情况。热度分析页面如图4.4-9所示:

图4.4-9 热度分析页面

Figure 4.4-9 Heat Analysis Page

热度分析页面的主要代码部分如图4.4-10所示:

图4.4-10 热度分析页面主要代码

Figure 4.4-10 Main Code of Heat Analysis Page

情感分析页面通过layui图表布局,通过前端页面发起请求获取后端django响应,路由收到请求信息就查询数据库操作,对博文进行情感分析,按照分值划分成消极和积极两种情感,通过responsejson方法返回一个json数据,通过layui前端的echart渲染后生成情感分析的树状图和饼图,从而了解不同情感的博文数量分布。情感分析页面如图4.4-11所示:

图4.4-11 情感分析页面

Figure 4.4-11 Emotional Analysis Page

情感分析页面的主要代码部分如图4.4-12所示:

图4.4-12 情感分析页面主要代码

Figure 4.4-12 Main Code of Emotional Analysis Page

进入其它分析页面在该页面以树形图的方式呈现微博地域分布情况,主要通过前端layui页面发送请求get获取django设置的对应路由进行响应,从数据库中查询出不同地域的微博,然后对其进行统计,输出json格式。前端获得json数据,就通过echart渲染,生成不同地域分布分树形图,其他分析页面如图4.4-13所示,由图可知,北京广州上海这几个地方最多:

图4.4-13 其他分析页面

Figure 4.4-13 Other Analysis Pages

其他分析页面的主要代码部分如图4.4-14所示:

图4.4-14 其他分析页面主要代码

Figure 4.4-14 Main Codes for Other Analysis Pages

险情监控设置页面,在该页面用户或者管理员可以自己设置监控的关键字,点击确认保存后,页面返回一个请求给数据库进行匹配,从关键词表中找出匹配的关键词的信息,然后通过json格式传递到前端页面,通过layui框架生成表单,能够直观的展示结果,达到险情监控的目的。险情监控设置如图4.4-15所示:

图4.4-15 险情监控设置页面

Figure 4.4-15 Danger Monitoring Settings Page

险情监控设置页面的主要代码部分如图4.4-16所示:

图4.4-16 险情监控设置页面主要代码

Figure 4.4-16 Main Codes of the Dangerous Situation Monitoring Settings Page

险情博文页面,在该页面可以对可能存在险情的博文关键词进行检索操作,输入关键词后,点击搜索,页面返回一个请求给数据库进行匹配,从关键词表中找出匹配的关键词的信息,然后通过json格式传递到前端页面,通过layui框架生成表单,能够直观的展示险情的话题等其它信息结果,如果发现有不合格的博文或者违规的博文,可以直接点击举报,就会从后台数据库中删除该博文,达到遏制险情的目的。险情博文页面如图4.4-17所示:

图4.4-17 险情博文页面

Figure 4.4-17 Danger Blog Page

险情博文页面的主要代码部分如图4.4-18所示:

图4.4-18 险情博文页面主要代码

Figure 4.4-18 Main Codes of the Danger Blog Page

险情监控看板页面,在该页面可以对已搜索的险情的博文关键词进行可视化。首先前端页面返回一个请求给数据库进行,根据django框架路由绑定的函数,从数据库中调出多个关键词的匹配信息,对这两个关键词进行进行统计,统计包括相关的博文总数,举报删除的数量,举报涉及的地区和词频等,然后通过json格式传递到前端页面,通过layui框架通过echart渲染,生成柱形图和玫瑰图、词云图等,能够直观的展示险情的话题等其它信息结果,达到监控的目的。险情监控看板页面如图4.4-19所示:

图4.4-19 险情监控看板页面

Figure 4.4-19 Danger Monitoring Dashboard Page

险情监控看板页面的主要代码部分如图4.4-20所示:

图4.4-20 险情监控看板页面主要代码

Figure 4.4-20 Main codes of the danger monitoring dashboard page

运行爬虫后,会产生缓存文件,并会将爬取出来的数据进行储存:

5 测试

5.1 测试目的

系统测试的基本目的是测试系统是否存在 bug,以此来保证系统的可靠性。

5.2 测试环境

本系统采用 Python语言进行开发,Python 的版本为 3.11。软件是Pycharm2022.3.2。爬虫主要框架是Django,在Django中执行Scrapy框架提取数据。基于SnowNLP模型对数据进行情感分析。系统测试硬件为戴尔笔记本,操作系统为 Windows 10 普通版,操作位数 64bit,系统内存 16G。测试浏览器为Microsoft Edge 。

5.3 测试内容

基于新媒体下的网络舆情数据爬取与分析主要是微博转发和评论数据的展示和交互,所以我们主要测试用户的操作与系统的交互是否正常。所以选择通过人工执行测试用例的方式进行。以下是对基于新媒体下的网络舆情数据爬取与分析系统进行的测试详细说明。基于新媒体下的网络舆情数据爬取与分析系统测试用例,如表7所示。

表7 基于新媒体下的网络舆情数据爬取与分析测试用例

Table 7 Test Cases for Crawling and Analyzing Network Public Opinion Data Based on New Media

测试名称:基于新媒体下的网络舆情数据爬取与分析系统测试

测试目的:看用户点击相应操作是否正确显示可视化数据,可视化列表数据是否能正常显示,舆情监控功能中输入相关信息是否能显示相关数据。

前置测试:成功连接数据库,并可视化展示微博转发数据信息。

主要参与者:用户

功能模块

测试目的

测试步骤

预期结果

数据看板功能

输入关键词能否显示正确信息

输入关键词

出现了相关信息,没有其他信息

微博热点话题展示功能

输入关键词能否显示正确信息

输入关键词

出现了相关信息,没有其他信息

险情监控看板

点击该功能是否呈现正确的可视化图表

点击功能页面

出现了相关信息,没有其他信息

险情情感分析功能

输入关键词能否显示正确信息

输入关键词

出现了相关信息,没有其他信息

险情博文功能

输入关键词能否显示正确信息,点击举报是否能成功举报

输入关键词

出现了相关信息,没有其他信息

5.4 测试结果

本系统使用黑盒测试,不去查看系统所使用的具体代码,只是从通过系统界面对功能进行测试,不考虑系统后台代码的实现细节。看检测是否达到要求,测试结果通过后,在对其进行完善。具体步骤如下:

微博热点话题展示如图5.3所示:

图5.3 微博热点话题

Figure 5.3 Weibo Hot Topics

(2)爬取出的数据看板如图5.3-1所示。

图5.3-1 数据看板图

Figure 5.3-1 Data Kanban Diagram

情感分析展示如图5.3-2所示。

图5.3-2 情感分析展示

Figure 5.3-2 Emotional Analysis Display

险情监控展示如图5.3-3所示

图5.3-3 险情监控展示

Figure 5.3-3 Hazard Monitoring Display

险情博文展示如图5.3-4所示

图5.3-4 险情博文展示

Figure 5.3-4 Display of Danger Blog Articles

5.5 测试结论

系统测试结果表明,本系统基于Python、Django、Scrapy、SnowNLP、pycharm实现,具有很可靠的数据性,功能基础较实用,能够为当下新媒体提供较好的基于网络舆情方面的数据分析,基本满足新媒体方面对网络舆情方面的分析。

6 结论与展望

本系统基于Python、Django、Scrapy、SnowNLP、pycharm等技术开发,实现了对微博网络舆情数据的采集、处理、分析和可视化展示。在数据采集方面,系统采用了Scrapy框架进行爬取,能够高效地获取微博数据。在数据处理和分析方面,系统使用了SnowNLP进行中文文本情感分析和主题分析,以及其他Python库进行数据清洗和处理,实现了对微博网络舆情的深度挖掘和分析。在可视化展示方面,系统采用了Django框架进行开发,通过图表、词云图等可视化方式,直观地展示了微博网络舆情的分析结果,为用户提供了更加全面、深入的视角。

通过本系统的开发实践,我深刻认识到了Python作为一种高效、灵活的编程语言,在数据处理、分析和可视化方面的优势。同时,我也意识到了Django和Scrapy等框架的强大功能和易用性,对于快速构建高效、可靠的Web应用和数据采集系统具有重要的意义。从现实应用角度出发,本系统可以应用于政府、企业、媒体等领域的网络舆情监测和分析,为决策者提供重要的参考依据。

在未来的发展中,我将进一步优化和完善系统的功能和性能,提高数据采集、处理、分析和展示的效率和准确度。同时,我也将不断探索和应用新的技术,如深度学习、大数据等,以更好地满足用户的需求,并为社会的发展做出更大的贡献。

相关文章
|
7天前
|
数据采集 缓存 定位技术
网络延迟对Python爬虫速度的影响分析
网络延迟对Python爬虫速度的影响分析
|
15天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
101 44
|
9天前
|
数据采集 存储 JSON
Python爬虫开发中的分析与方案制定
Python爬虫开发中的分析与方案制定
|
16天前
|
数据可视化 开发者 Python
Python GUI开发:Tkinter与PyQt的实战应用与对比分析
【10月更文挑战第26天】本文介绍了Python中两种常用的GUI工具包——Tkinter和PyQt。Tkinter内置于Python标准库,适合初学者快速上手,提供基本的GUI组件和方法。PyQt基于Qt库,功能强大且灵活,适用于创建复杂的GUI应用程序。通过实战示例和对比分析,帮助开发者选择合适的工具包以满足项目需求。
59 7
|
15天前
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
25 3
|
16天前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
29 2
|
16天前
|
存储 机器学习/深度学习 算法
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第26天】NumPy和SciPy是Python科学计算领域的两大核心库。NumPy提供高效的多维数组对象和丰富的数学函数,而SciPy则在此基础上提供了更多高级的科学计算功能,如数值积分、优化和统计等。两者结合使Python在科学计算中具有极高的效率和广泛的应用。
31 2
|
19天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
28 1
|
21天前
|
数据采集 机器学习/深度学习 搜索推荐
Python自动化:关键词密度分析与搜索引擎优化
Python自动化:关键词密度分析与搜索引擎优化
|
3月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
77 2