选题背景

在互联网时代,各种各样社交媒体的出现让人们获取和交流信息的成本变得越来越低。借助一些平台,国家时事,明星八卦和社情民意都能快速有效地传播并能引起民众的积极讨论,庞大的用户基数产生了数量巨大的网络数据,如何从这些庞大的数据中收集分析出目前整个社会的关注点是信息内容安全的研究领域之一。
如今的新浪微博是多年前微博在国内刚刚兴起时多方争斗的几乎唯一幸存者,新浪微博2020年第一季度财报显示,其月活跃用户已达5.5亿,可以说新浪是微博平台的唯一寡头,各大官方账号入驻使得海量信息在该平台上能快速扩散并引起社会的广泛关注。如今的微博系统已经相当完善,涉及领域也相当广泛,作为资本的舆论发布和控制平台,新浪微博在舆情监测上具有先天优势,但是其热搜存在一些问题。比如微博热搜主题失衡,明星化严重。明星们换着花样占据热搜榜单,而那些为国争光的科研团队,运动健儿却没有得到应有的关注。这不仅对为国家奋斗的人不公平,对明星生活关注的扩大也压缩了他们的个人隐私空间。
本次课程设计旨在针对新浪微博的热搜榜构建出小型舆情分析系统,主要目的是让用户可以有选择地过滤如娱乐新闻等内容,并根据热搜情况生成舆情图来帮助用户直观了解社会动态。

方案设计


主要步骤分为五步:

  1. 实时从热搜榜获取文本内容。
  2. 对获取的热搜内容分词处理。
  3. 根据自己构建的类型库对热搜进行分类。
  4. 将热搜按照类型划分归属,并统计热搜榜内用户关注方向。
  5. 根据用户的输入筛选用户想看的热搜,并根据统计出的关注点分析舆情。
    #系统实现
  6. 获取热搜内容:
    采用python requests库构建http请求,美丽汤beautiful soup库解析获取的网页内容,可用lmxl将获取到的内容转换为可识别的字符串类型再对信息进行筛选查找。
    热搜具体内容都在class=data下名为tr的标签内,如图

    其中td01标签存储热搜排行序号,td02存储热搜具体内容,本次实验取出热搜排行序号和热搜内容合并存储进列表即可。
    此步主要运用爬虫知识,这还是学了python之后第一次应用爬虫相关知识,在http协议中要学会模仿浏览器操作,比如user-Agent头等,这样才能使爬虫在网页的一些反爬手段下存活下来。
  7. 分词处理:
    分词原理有正向匹配逆向匹配和双向匹配,但是最重要的还是匹配词库,这个功能python有第三方库可以实现,实验中使用的是jieba库,初次实验需求不高,就采用了jieba这种简单易用的分词库,随着方向的深入,以后可以使用pkuseg来追求准确度和专业性。
    Jieba分词有三种模式,1.精确模式,最精确地分割文本。2.完全模式:把文本内包含的所有词全分割出来,容易产生歧义和冗余。3.搜索引擎模式:本实验用不到就没有研究。
    实验是要将热搜分词再与类型词库匹配,如果完全分词的话可能会造成一条数据产生多种不同的类型,产生歧义,所以实验中选择了精确模式,这样实验的准确性在一定程度上依赖于jieba第三方库的分词准确性。不过据实验来看,分词的正确性还是比较可观的,分词实验如图
  8. 类型匹配
    这一步是将分词结果与规定的类型库进行匹配,判断分词结果是否有在设置的类型库内,在的话就给记录打上相应标签。但是分词库有第三方,匹配库就要靠自己了,实验过程建立的类型匹配词如下:

    只尝试分了五类,政务,娱乐,政治,疫情和科技,暂时在实验中还没遇到有一条热搜同时符合多条类型匹配的情况,可以说类型匹配的效果也是比较可观的。
    主界面显示热搜及分类类型如下:

    可以识别一些,但是还有很多没有识别的是因为匹配词库的不完善。
    热搜类型筛选示例如下:
  9. 舆情分析
    查了一些资料,对于舆情分析到底分析些啥也语焉不详,而由于课程设计只是对舆情分析的一次尝试,就只对获取的数据进行简单的统计处理。在匹配过程中引入了变量对每个类型匹配的热搜数量进行记录,根据用户关注方向绘制出饼状图,示例如下:

    这一步的类型匹配库决定了分类的准确性和丰富度,而且此系统设计的初衷是过滤娱乐信息,但是娱乐圈的人名确实很复杂,我个人是难以全部认识,更不用说我的程序了,所以如果能引入已有的词库是极好的。在网上查了之后发现确实有一些,比如下图的明星词库,虽然只要四毛三,但是由于要花钱下载就没有尝试了。而且识别人名时还有一点需要注意,jieba分词库也不认识这些明星,就算比较出名的比如刘德华周杰伦也不认识,所以需要将匹配的人名添加进jieba的词库才能正常使用此系统。

总结

在设计开始前搜了一下相关的文献,发现还是有一些人在做这个事情的,说明基于微博热搜的分析也是可行的。就系统的完整性来说肯定比不了其他人的研究或者毕业设计啥的,这只是在课程设计中的一个小尝试,所以界面粗糙和信息匮乏还请老师谅解。
信息内容安全课程在其内容稍微理解时,我就觉得其应用的一大方向就是舆论分析,话题检测,内容分析这都是现有很多网络平台在做的事情,而且跟垃圾邮件过滤这类工作来比,过滤器显得那么渺小又无聊。
虽然本舆情分析小系统还略显稚嫩,但应该是所有舆情分析系统开始都要做的工作—爬取信息和信息分类。而这第一步的工作我觉得也没那么轻松,最简单却也最难的一步就是词库的构建和维护,分词有很多现成第三方库可以用,但是分类依据词库则多数需要自己构建,而以后词库内的信息变动,比如原本在娱乐圈的人物参与了一次人民代表大会,该把他界定在娱乐还是政治内呢?就词库本身就有无穷的工作需要做。而对于系统的其他部分也有很多改进空间,本次设计后期阶段想尝试一下对每个热搜话题的评论进行整理分类,这样才真正的从舆情监测进阶到舆情分析阶段。获取每个话题下群众的态度,再分析出态度的正负,群众的态度才是真正的舆情。但是受限于微博评论的一些验证机制,爬虫还不是很熟练的我没法在短时间内通过验证只得作罢。

源码

import requests
from bs4 import BeautifulSoup
import datetime
import jieba
import matplotlib.pyplot as plt
import tkinter as tk
import tkinter.messagebox
'''基于微博热搜的舆论分析系统       --Kevinwang可以实现对热搜分类,过滤显示及绘制热搜分类饼状图的功能2020/6/24'''
def drawpic():#饼状图绘制plt.rcParams['font.sans-serif']='SimHei'#设置中文显示lable=['政务','娱乐','政治','疫情','科技']explode=[0.01,0.01,0.01,0.01,0.01]values=[gov_count,entertaiment_count,poltic_count,battle_count,tech_count]for i in range (0,len(lable)):  #去掉没有检索到的类别if values[i]==0:            #因为数组长度动态变化,所以只能先变成0,然后去掉0元素,比较复复杂lable[i]=0explode.remove(0.01)for i in range(0,len(lable)):if 0 in values:values.remove(0)if 0 in lable:lable.remove(0)plt.title('用户关注分布')plt.pie(values,explode=explode,labels=lable,autopct='%1.1f%%')plt.show()
def getTrending():#获取热搜内容global gov_count,entertaiment_count,poltic_count,battle_countr = requests.get("https://s.weibo.com/top/summary")soup = BeautifulSoup(r.text, 'lxml')items = soup.find(class_="data").find_all(name="tr")a = '置顶'.ljust(2, ' '), items[1].find(class_="td-02").a.stringtop = ''.join(a)words = jieba.lcut(top)for i in words:  # 置顶判别if i in entertaiment:top = top + "   娱乐"entertaiment_count = entertaiment_count + 1elif i in gov:top = top + "   政务"gov_count = gov_count + 1elif i in poltic:top = top + "   政治"poltic_count = poltic_count + 1elif i in battle:top = top + "   疫情"battle_count=battle_count+1trending.append(top)for item in items[2:]:  # 热搜类型判别mes = item.find(class_="td-01 ranktop").string.ljust(4, ' '), item.find(class_="td-02").a.stringmess = "".join(mes)words = jieba.lcut(mess)for i in words:if i in entertaiment:mess = mess + "   娱乐"entertaiment_count = entertaiment_count + 1elif i in gov:mess = mess + "   政务"gov_count = gov_count + 1elif i in poltic:mess = mess + "   政治"poltic_count = poltic_count + 1elif i in battle:mess = mess + "   疫情"battle_count = battle_count + 1trending.append(mess)
def filter(num):#根据种类过滤新闻show.delete(0.0 ,'end')nowTime = datetime.datetime.now().strftime('%F %T')  # 现在时间show.insert('1.0',nowTime)for i in range(0,len(t)):if t[i]>=2:if i==3:show.insert('end','     今日主题:疫情\nToday is still a hard day.')elif i==1:show.insert('end','     今日主题:娱乐\nWe are fine today.')elif i==0:show.insert('end', '     今日主题:政治\nSomething is happening in the world.')show.insert('end','\n热搜排名    热搜内容')kind=''count=0if num=='0':for i in range(0, len(trending)):show.insert('end','\n'+trending[i])count=1elif num == '1':kind = '政务'elif num == '2':kind = '娱乐'elif num == '3':kind = '政治'elif num == '4':kind = '疫情'elif num == '5':kind = '科技'for i in range(0,len(trending)):if trending[i][-2]+trending[i][-1]==kind:show.insert('end','\n'+trending[i])count=1if count==0:tk.messagebox.showinfo('Tip','The kind of message did not appear in the trending!')else:pass
def confirm1(event):type1=select.get()if type1 == 'quit':tk.messagebox.askquestion('Confirm','Are you sure to leave')form.destroy()elif type1 != '1' and type1 != '2' and type1 != '3' and type1 != '3' and type1 != '4' and type1 != '5' and type1 != '0':tk.messagebox.showinfo('Tip','Please input the number from one to five')else:filter(type1)select.delete(0)
#分类依据,分类准确程度取决于词组和分词准确性
gov=["卫生部","教育部","卫健委",'工信部','法律','民法典','教育厅','外交部','禁毒','毒品','犯罪','赵立坚']
entertaiment=["彭于晏","胡歌","迪丽热巴","宁静","易烊千玺","杨紫",'导演','演员','杨超越','于正','周杰伦','张雨绮','于蓝','快乐大本营']
poltic=["香港","台湾","人大",'常委','两会','俄罗斯','阅兵','全国人大']
battle=["抗疫","疫情","境外输入","核酸检测","确诊","病毒","新发地",'健康码','新冠','疫苗']
tech=["ios","华为","5G",'北斗','卫星']
gov_count=0
entertaiment_count=0
poltic_count=0
battle_count=0
tech_count=0
trending=[]
jieba.add_word('周杰伦')
jieba.add_word('张雨绮')
jieba.add_word('快乐大本营')
jieba.add_word('于蓝')
if __name__ == '__main__':#在被调用时生效,防止重复执行getTrending()t=[gov_count,entertaiment_count,poltic_count,battle_count,tech_count]form=tk.Tk()form.title('Public opinion analyze system   --KevinWang')width=500height=500form.resizable(width=False,height=False)screenwidth = form.winfo_screenwidth()    #放于屏幕中央screenheight = form.winfo_screenheight()alignstr = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)form.geometry(alignstr)w=tk.Label(form,text='0.all message  1.gov  2.entermaintent  3.politic  4.coronavirus  5.tech\n Press quit to leave\n Select the type you want to see')select=tk.Entry(form,bd=3)confirm=tk.Button(form,text='确认',command=confirm1,width=8,height=2)confirm.bind_all('<Return>',confirm1)                 #绑定快捷键enteranalyze=tk.Button(form,text='舆情分析',command=drawpic,width=8,height=2)show=tk.Text(form,width=70,height=28)w.pack()select.pack()show.pack()confirm.pack(side='right')analyze.pack(side='right')form.mainloop()

信息内容安全-基于微博热搜的yuqing监测系统相关推荐

  1. Python爬取微博热搜数据之炫酷可视化

    可视化展示 看完记得点个赞哟 微博炫酷可视化音乐组合版来了! 项目介绍 背景 现阶段,微博.抖音.快手.哗哩哗哩.微信公众号已经成为不少年轻人必备的"生活神器".在21世纪的今天, ...

  2. 基于PHP爬虫的微博热搜实时监控平台

    基于PHP爬虫的微博热搜实时监控平台 背景 一.整体思路 二.数据爬取 1.获取HTML 2.提取数据 3.返回数据 三.数据可视化 1.画柱状图 2.ajax请求数据 四.效果展示 写在最后 背景 ...

  3. 针对新冠肺炎微博热搜话题使用R语言进行文本特征提取的四种方法(二) —— 基于TF-IDF的特征提取

    在对一段文本进行分词之后,有的词出现的次数会比较多,因此往往对其出现的频次进行统计,作为该词重要程度的度量.基于这个思想,词频(Term Frequency,TF)被广泛应用于基本的文本数据挖掘.在实 ...

  4. 基于python的微博热搜爬取及数据分析

    刚学python爬虫,用爬虫爬取新浪微博热搜,看看效果如何,也是对这段时间学习python的总结. 一.目的: 抓取新浪微博2020年1月3日星期五的热搜榜,将抓取到的数据进行动态展示,并生成当天的微 ...

  5. 一年75次上微博热搜!宇宙首富Tony老师上线!马斯克DIY发型

    来源:新智元 马斯克,很狂. 宇宙首富Tony老师上线了,还自己剪了个新发型. 嗯!有点儿杀马特味道. 马斯克顶着前卫的新发型一时引起众多网友讨论,有人甚至挖出他20年前头顶稀疏的旧照. 从稀疏到茂密 ...

  6. 人工智能还能登上微博热搜?热搜关键词你得看看!

    AI人才年薪80万登上微博热搜 图片来源于微博热搜截图 据报道,今年的AI应届博士生年薪已经涨至80万,与去年的50万相比,整整涨了60%,并且随着人才缺口的扩大,涨薪的趋势在近期估计还会持续走高. ...

  7. 爬虫—爬取微博热搜榜

    1. 引言 利用scrapy框架爬取微博热搜榜网站前50条热搜. 爬取信息:热搜排名.热搜新闻名.热搜新闻热搜量. 数据存储:存储为.csv文件. 2.爬取流程 新建scrapy爬虫项目: 在终端输入 ...

  8. c#使用正则表达式获取TR中的多个TD_使用python+BeautifulSoup爬取微博热搜榜

    本文将介绍基于Python使用BeautifulSoup爬取微博热搜榜的实现过程 1.首先导入需要使用的库 from bs4 import BeautifulSoup from urllib.requ ...

  9. 硬核吃瓜!上万条数据撕开微博热搜真相

    作者 | 徐麟 来源 | 转载自数据森麟(ID:shujusenlin) 吃瓜前言 关于新浪微博,向来都是各路吃瓜群众聚集之地,大家在微博中可以尽情吃瓜,各种类型的瓜应有尽有,只有你想不到的,没有你吃 ...

  10. android开发微博搜索,一款帮助用户自动提取微博热搜、知乎热榜、百度实时热点条目中与特定领域...

    HotDetector(全网热门探测仪) 全网热门探测仪一款帮助用户自动提取微博热搜.知乎热榜.百度实时热点条目中与特定领域(科技.娱乐.体育.自定义)有关内容的实用App. 它使用Java SE 8 ...

最新文章

  1. 常用深度学习框——Caffe/TensorFlow / Keras/ PyTorch/MXNet
  2. 用了 HTTPS 就一定安全吗?HTTPS 原理分析——带着疑问层层深入
  3. postgresql常用数据类型:数值、日期、字符串类型
  4. 1、solr包结构介绍,solrCore的安装配置,solr部署到Tomcat,多solrCore配置,配置中文分词器,界面功能介绍,Schema.xml的基本使用,数据导入
  5. spark出现task不能序列化错误的解决方法 org.apache.spark.SparkException: Task not serializable
  6. Android Studio 上Activity的互相切换
  7. LeetCode 1466. 重新规划路线(DFS/BFS)
  8. adb shell 是这个啥东东
  9. spring教程笔记2
  10. 前端软件sublime的一些常用快捷键
  11. oracle 用工具查询慢,Oracle自带工具sql优化集-SQL Tuning Advisor (使用心得体会)
  12. windows10连接小米耳机Redmi AirDots 2
  13. 软件测试视频课网盘,软件测试工程师必学视频教学全套五合一
  14. asp.net mvc 图片裁剪上传
  15. 问题 F: 是你飘了,还是我拿不动刀了(字符串问题)
  16. 一文详解:为什么隐私智能合约是Web3的未来
  17. 计算机网络的发展经历了几个阶段?每个阶段各有什么特点?
  18. mixin的使用方法
  19. 默认的 Windows 2000 服务
  20. UISearchControllerUISearchDisplayController

热门文章

  1. 腾讯信鸽 php sdk,xinge: 腾讯信鸽Golang SDK(非官方版本)
  2. Java开发二维码扫一扫名片技术
  3. android原生系统手写,可自定义 自带中文手写输入法_索尼 Xperia SP_手机Android频道-中关村在线...
  4. 计算机输入法如何显示在桌面快捷方式,笔记本win7系统如何设置搜狗手写输入法桌面快捷方式...
  5. Netty学习之读netty权威指南(三)
  6. 怎样快速将图片dpi修改为300?如何调整照片分辨率?
  7. 工业条形码扫描枪:如何为您的应用选择合适的扫描枪
  8. c语言图像峰值信噪比,PSNRSSIM
  9. 软件工程课程课后大作业
  10. C语言求素数的简化算法