软件工程计算机 基于python关系网络数据化的实现_第1页
软件工程计算机 基于python关系网络数据化的实现_第2页
软件工程计算机 基于python关系网络数据化的实现_第3页
软件工程计算机 基于python关系网络数据化的实现_第4页
软件工程计算机 基于python关系网络数据化的实现_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于python关系网络数据化的实现摘要随着现代社会互联网的快速发展,网民不断增多,网络给我们的现代生活带来了很多方便之处,但是,它在发挥对我们有利的用处的同时,也带来了存在着一些不好的地方。例如,网络加速了人们对于一些事件的讨论的传播,容易造成一种舆论倾向。因此,针对热点话题的数据采集和分析可以更好地了解网络热点走向,并加以控制。本文主要从整个设计的技术要求、系统设计、系统实现展开,围绕数据采集、数据分析及数据可视化这三个方面来进行阐述。本设计利用python语言,通过scrapy框架来抓取数据,数据库采用的是mysql,前端框架采用bootstrap和jquery,后端框架采用flask,可视化是利用的echarts工具,进行前后端交互,分析热度与内容的关系,提取文本信息进行分类,来实现对网络状况的分析。同时,也能够同步观察到数据的实时情况。通过本设计,可以更有效的了解到网络的近况。关键词:数据分析,Flask,Echarts,Mysql

AnalysisandvisualizationofnetworkhotspotdatabasedonpythonAbstractWiththerapiddevelopmentoftheInternetinmodernsociety,andtheincreasingnumberofInternetusers,thenetworkhasbroughtalotofconveniencetoourmodernlife,butitisbeneficialtous,butalsobringssomebadplaces.Forexample,thenetworkacceleratesthespreadofpeople'sdiscussionaboutsomeevents,whichiseasytocauseapublicopiniontendency.Therefore,datacollectionandanalysisonhottopicscanbetterunderstandthetrendofnetworkhotspotsandcontrolthem.Thispapermainlyexpoundsthetechnicalrequirements,systemdesignandsystemrealization:dataacquisition,dataanalysisanddatavisualization.Thisdesignusespythonlanguagetograspthedatathroughscrapyframework.Thedatabaseadoptsmysql,thefront-endframeworkadoptsbootstrapandjquery,andtheback-endframeworkadoptsflask.Visualisaechartstooltoconductfrontandrearend,analyzetherelationshipbetweenheatandcontent,andextracttextinformationtorealizetheanalysisofnetworkstatus.Atthesametime,thereal-timesituationofthedatacanalsobeobservedsimultaneously.Throughthisdesign,wecanmoreeffectivelyunderstandtherecentsituationofthenetwork.Keywords:dataanalysis,Flask,Echarts,Mysql

目录TOC\o"1-3"\h\u31501第一章绪论 第一章绪论1.1开发背景及意义由于互联网技术的不断快速发展,我们生活周围到处都是数据,逐渐被数据所充斥着,而这些数据再由各种各样的系统形成大数据,展现出从量变到质变的价值时代[1]。互联网是一个既对我们生活的有利的工具,它的到来和发展给我们的生活带来了非常大的便捷,可以实时并且快速的了解到同一时间点,不同空间所发生的事情。但是在带来好处的同时,也给带来了其他的变化,例如现在各种社交软件层出不穷,人们可以随意的在网络上发表自己的观点,在网上一件普通的事情很可能就会被热议成一件麻烦的大事,如果在有心人的引导下,会发展成一种舆论波动。因此,通过搜集互联网数据,对当下热门事件进行分析,掌握它所围绕的中心主题,了解它的趋势和发展,显得尤为重要。因此,对于数据的采集在任何一个任务中都是显得极其关键,之后对于数据进行处理、分析、预测也是基于这个基础之上的。对于数据的采集有在传感器上利用物联网的数据采集,也有利用网络信息技术的数据收集。例如,在智能交通的研究中,有基于GPS的定位信息采集、基于交通摄像头的视频采集,基于交通卡口的图像采集以及基于路口的线圈信号采集等[2]。但从目前的技术来看,还没有技术能够在特别短的时间内进行搜集、整理、管理这些复杂又庞大的数据。这也导致了了数据可视化技术的快速发展。随着各种智能终端设备的产生,数据可视化技术也趋于成熟。如今,正因为技术的发展便捷,上网人数逐渐庞大,网络上的发言也占有一席之地。不知道小事是否会被有心人利用放大,或者重要的事情因为人们的关注倾向而忽略。因此,根据网络热点研究网民群体所关注的方向、人数关注比较多的事件与热度的关系,更够更加便利地了解到网络状况,并及时做出防治和调整。1.2国内外现状与发展趋势1.2.1国内外研究现状国外对于网络热点的研究较少,主要是针对技术研究,尤其是数据科学方面,在数据处理上进行不断研究,分析、优化和设计算法以及一些处理方式。同时,在可视化技术方面也经常用于生活实践中,主要针对遇一些社会热点问题。通过查询资料,《华盛顿邮报》对于美国本土的一些关于社会存在的热度高的问题的报道,都是通过地图可视化的方式把想要呈现出来的数据表达出来。可视化技术在大数据时代得到了快速的发展和更为广泛的应用,其最大的优势、突出的地方是简单快捷,可视化的效果与数据本身的相关性和联系并不是很强,仅仅是为了视觉的客观和便利,但对数据进行可视化,也能够较为清晰的表达出数据之间的联系。相对于国外,由于近些年来我国科技的发展之快以及普及度高,网络已经成功融入生活,成为生活的一部分。因此,对于把握网络的检测和治理显得尤为重要,在这方面的研究也存在颇多。现在的主流平台主要是微博、豆瓣、知乎等社交软件,消息盘根错节,很容易被混淆黑白。其中,北京大学就在利用微博平台,研发了微博可视化分析工具,其操作的结果可以将微博网友的的转发和评论之间的层次关系以图表的形式在页面上展示出来。在这个可视化结果里面的每一个节点代表一条微博,连线代表转发关系,节点越大其转发次数越多,这种方式对于解释像微博这样复杂数据关系十分不错[3]。1.2.2发展趋势目前,网络不断发展起来,很多社交软件、媒体随之兴起,它们的便捷性、匿名性、即时性,加上网民的参与度变高、不理性的引导、快速的传播等问题使得整个网络环境变得更为复杂。因此,对于网络热点的管理和检测是会一直发展下去的,但传统的人工方式一定会被淘汰、被机器所代替,因为数据庞大靠人力显得尤为困难。所以,监测软件的出现和增多是必然趋势,这将成为企业的新突破口,新产品也将随之不断展现出来。再加上网络环境的长期引导都需要利用监测来分析和解决的,加强对于网络热点的观察,把握和预测舆论的走向,了解和分析网民对于一些问题或者生活上的真实的要求已经成为一种必然的趋势。1.3研究的主要内容本设计主要是在python语言的环境和基础下,通过对微博、百度等网站的网页进行搜集数据,来对抓取的数据进行分析,从而能够迅速把握当前的网络状况,了解人们目前所感兴趣的方向,并快速地对现状作出判断。首先,对于网络舆论问题,通过对主流的社交软件的热点的数据分析和可视化进行了技术分析,其中含有数据的采集、数据的处理、实时性的数据以及可视化的效果等技术要求。其次,根据我们要解决的问题进行相对应的需求分析,并且设计了整体的框架,对于scrapy爬虫、bootstrap+query前端、flask后端以及数据库的框架结构进行了详细的描述。最后,结合需求和设计的架构,对整个设计进行实现,对数据处理的回归分析、高频词的统计、热度分析等代码的详细描述。同时,把设计中的主要模块进行截图展示。把实时数据,同采集的数据经过分析所得到的结果进行一个比较,能够保证关于网络热点的数据分析的正确性和有效性。设计基于python实现对网络热点的观察和分析,相对于传统信息搜集方式,利用现代技术自动化抓取数据,图表展示数据以及实时数据的展现,操作更加省事实力,能够更直观的知道人们对于事件的关注偏向方向并即时作出调整。同时,也表现出现代科技在网络热点方面的成效,也为之后类似的分析提供技术性的参照。1.4论文的结构本文分为六章,对于网络热点的数据分析和可视化的背景、国内外现状及趋势、开发技术和环境、功能需求、架构设计以及功能模块进行介绍。以下是本文的整体结构:第一章:绪论。首先,以设计目的为主,对当下开发背景进行描述。然后,对于国内外的现状和未来发展趋势进行阐述。最后,对整个设计内容以及论文的结构进行叙述。第二章:开发环境和技术。根据设计需要运用到的环境和技术,进行详细介绍和总结。第三章:系统设计。先对爬虫模块、数据分析模块、数据可视化模块进行需求分析,然后进行架构的设计。其中爬虫模块主要利用scrapy框架;数据分析模块通过热度分析、词频统计、回归分析以及实时数据的对比进行分析;数据可视化模块利用前端和后端分离,进行图表的展示。第四章:系统功能模块实现。整个设计主要模块具体实现的细节,对数据结果进行详细的分析以及最后效果的展示。第五章:结论与展望。对整个设计的实现进行总结,对结果进行评价以及在整个实现过程中所遇到的困难、不足进行总结,并对这个设计的未来可进行修改和完善的地方进行展望。第二章开发环境与技术2.1开发环境本设计主要针对微博、百度、知乎热榜进行数据采集,通过网页爬虫抓取数据,对热点进行分析。具体的开发环境如下:1.系统环境:Windows10系统;2.开发语言:Python3.8,实现爬取数据、数据分析以及web框架的搭建;3.开发平台:Pycharm;4.数据库:Mysql,用来存储微博、百度、知乎热榜的数据和实时数据;5.前端开发:Jquery、Bootstrap、Javascript,用来开发和美化网页;6.Web框架:Flask框架、Echarts,实现数据可视化;2.2网络热点数据采集2.2.1网络爬虫原理抓取、搜寻数据主要是通过网络爬虫来完成的。使用爬虫是为了把我们想获取的页面所在的网页放到自己电脑上,从而作为备份。爬虫的过程主要分为以下几步步骤:1.设置一个URL作为刚开始的URL。可以自己选中一个URL设为起始,也可以将自己想要爬取的网页设为最初的URL。2.新的URL可以根据刚开始设定的URL,通过这个URL对网页进行爬取来获得新的URL。3.在之前构建的URL列表中放入刚刚获取的新的URL。4.从用来存储URL的URL列表中拿出刚刚获取到的新的URL,并通过新的URL来对网页再一次进行信息的爬取,然后再将获取到的最新的URL从最新的网页中取出来,对以上所有的过程进行反复的操作。5.当设置的程序的停止条件在爬虫运行时,满足设计的需求时,程序就会停止。在爬虫程序的编写过程中,一般会在程序里面设置一个条件来让程序停止运行。如果没有设置一个让爬虫停下来的条件,程序将会一直运行下去,一直到没有新的URL出现才会就此停下;相反,程序不再爬取信息当停止条件满足时。2.2.2scrapy框架结构Scrapy框架是用来对爬取需要的网站的数据信息的框架,在实际生活中得到广泛的应用。用户开发程序的时候使用框架,只需要利用框架下的几种模块就可以快速且便利地实现一个爬虫甚至多个爬虫的同时使用。以下是框架的组成部分:1.Spiders(爬虫器):处理从网页上传递回来的请求,然后取出我们想要的数据从获得到的结果中,从而获取到所需要的数据的Item,并且把还继续需要的URL输送到引擎,然后再一次到调度器的里面。2.Engine(引擎):它是框架的最关键的部分,主要负责爬虫、管道、下载器、调度器之间的相互通信,对相关信息的信号、数据等进行传送。3.Scheduler(调度器):它的功能把从引擎那边传输过来的请求接受下来,并依据规定的方式、行为对它处理。并且当引擎再一次提出需要时,再次把这些内容送给引擎[4]。4.Downloader(下载器):它的功能是把引擎那边送过来的所有的相关请求下载下来,并将从中获取到的回应再传输给引擎,由爬虫从引擎那里获取再继续进行处理。5.ItemPipeline(管道):它的功能是负责处理从爬虫那里获得的Item,然后对它们进行详细分析、过滤、存储等后面将它们做出处理的地方。6.DownloaderMiddlewares(下载中间件):是一个位于爬虫、引擎和下载器中间的一种中间件,主要作用是为了用来处理这三者之间的请求及响应。7.SpiderMiddlewares(爬虫中间件):是一个用来的进行信息的传递的组件,但是是可以通过可以通过自己进行扩展、操作引擎和爬虫中间件的。它是一种处于爬虫引擎和爬虫中间的一种中间件,主要作用是用来处理爬虫对于输入的响应和输出的请求。8.SchedulerMiddlewares(调度中间件):是处于爬虫引擎和调度中间的一种中间件,它的主要作用是为了能够从爬虫引擎到调度之间能够发送请求和响应。图2-1scrapy框架架构2.2.3网络爬虫技术1.XPath解析XPath,即XMLPathLanguage,它是一种用来搜寻信息的语言。刚开始的时候是被用作寻找XML文档,但是之后又发现同样适合运用在对HTML文档的搜索。因此在编写爬虫程序时,也可以做对想要提取的信息的采集通过XPath这样的方法。XPath有个功能也很突出是关于选择方面的,十分全面且厉害,它提供了一种路径选择表达的方式,极其简明通透。此外,它还提供了超过100个的内建函数,主要用于处理字符串、数值、时间、日期等,用来进行比较遍历,近似于可以确定所有想要信息所位于的节。所以,它是一种特别便捷的语言。但是在网络爬虫中,我们只需要利用XPath这种方法来对数据进行搜集。2.正则表达式正则表达式,是一种逻辑公式,也被成为规则表达式或者正则集合,是通过对字符串(包括普通字符(例如从26个单个字母)和特殊字符(被称为“元字符”))来进行操作的[5]。总而言之,就是很早之前就按照某种规则规定好的一些特定字符以及各种利用这些特定字符进行不断的重组和排列,组成一个“规则字符串”。正则表达式也是一种文本模式,它在对搜索文本进行表示时,可以进行一个或多个字符串的配对。通过十分简洁明了的正则表达式,就能够特别快速的对一个很复杂的需求进行处理和实现。3.BeautifulSoup解析BeautifulSoup它的最重要的功能是进行数据的抓取,从想要获取的页面上。BeautifulSoup还有一个功能是可以用来解决关于引航、搜寻、修改分析树等问题,根据它所提供的一些函数来进行处理。总之,它是一个十分便利的方法,通过解析文档的方式给用户提供所需要进行抓取的数据[6],只需要非常少的行数的代码就可以用来进行搜集数据,可供使用者灵活地运用不同的方法进行解析,并提供速度的有效。它的操作步骤如下:(1)先实现一个实例化,对一个BeautifulSoup对象,然后在这个对象之中载入想要获取到的页面源码数据。(2)通过对BeautifulSoup对象中与之有关的特性或者方法进行调用,来实现对标签位置的定位和数据的提取。2.2.4数据库MySQL是众多数据库中的一种,是关系型的。关系型这样的数据库会使用不同的表分别把使用的数据保存到这些的表的当中。而被存储在这样的一个大仓库内的所有数据,就是通过这样的方式加快了对数据操作的速度,同时操作上也更加的灵活。其中,PyMySQL是Python3.x版本中的一个库,是Python与MySQL进行连接的一个方法。2.3数据分析数据分析是指对通过极其非常庞大的数据,利用比较恰当的合适的统计学上的分析方法对它进行分析,使数据能够发挥出它的最大的作用,体现出它本身所存在的价值。简而言之,数据分析就是把数据中所包含的有用的、有价值的、所需要的信息提取出来,然后通过一些分析方法形成关于一些问题的结论的一个过程。在现实生活的实际应用中,通过数据分析可以帮助人们轻易做出判断,再进行下一步。2.3.1数据清洗数据清洗,是指利用数据的检测,从而找到一些显而易见的错误,是我们可以很容易从数据中找出来的。它主要包括检查数据的一致性,处理无效的数据和一些不完整的数据等,然后再对这些数据进行处理和改正,保证它们的正确性。由于将某个主题的数据的集合起来然后放进数据仓库进行存储,之后又把位于其他各种系统中的这些数据提取出来的,并且还将以往的数据包含在里面,这样就导致了有的数据产生了错误、有的数据与其他不同的数据之间产生了矛盾,这些问题是不可避免且存在的。并这些错误的或有相抵触的数据也是在处理过程中必须处理或者清除的,被成为“脏数据”。这就要依据特定的方法把“脏数据”去除。数据清洗可利用的方法有一致性检查、无效值和缺失值的处理、重复记录的检测、错误值检测等。2.3.2文本分析1.词云词云是对采集的数据种的文本信息进行数据分析的一种方法,就是通过对文本进行分词划分,然后生成与关键词有关的词云或者统计这些被划分出来的关键词所出现的次数,然后筛选出文本划分出来次数较多的关键词。词云展示那些频率很高的关键词,从而去掉其他没有其他用途的文本信息,使使用者能够直接通过视觉了解到这类信息的着重点和突出的地方,迅速明白信息所要表达的内容。使用词云分析的步骤如下:(1)确定想要表达的主题。思考希望表现得主题和内容,方便使用者看到重点。(2)收集数据。对所要进行分析的内容去获取相关的数据。(3)文本分词。运用python底下的jieba这个包,对进行文本的划分,将提取关键词并统计其出现的频率。2.高频词分析高频词分析就是读取抓取并保存的文本信息,对其进行分词,统计关键词的出现次数,将关键词以及它所对应的次数保存下来。之后再次读取数据,提取频率出现较高的数据,通过图表和数据的展示,让人更能清晰的了解到信息的偏向方面以及所聚焦的方面。2.3.3热度分析热度分析,主要是分析所得的数据的热度与排名的关系。利用直方图、折线图、散点图、热力图来展现出热度与排名所呈现出来的关系。让人更能透彻的知晓这两者之间的联系,以及所呈现出来的趋势变化和速率变化。2.3.4回归分析回归分析,指的是指的是一种统计分析方法,用来确定两种或两种以上变量间彼此相互依存的定量关系。在大数据分析应用中,它是用于对因变量(目标)和自变量(预测器)之间的关系进行研究。这种技术通常常被用来进行预测、构建时间序列模型以及发现变量之间所存在的因果关系。1.一元线性回归一元线性回归分析,指的是只含有一个自变量的线性相关的关系的方法。因此,利用一元线性回归分析的方法来进行预测,是通过自变量和因变量之间所存在的联系,来建立线性回归方程的,从而进再进行预测。一元线性回归分析法的预测模型为:2.多项式回归多项式回归,是指回归函数是由多个变量组成的回归式子。由于,当多项式的次数趋向于无穷大时,可以逼近任何一种函数,借此推算出一种无限逼近的公式来进行预测,误差也有些许减少。因此,多项式回归有着广泛应用[11]。多元回归分析法的模型为:3.最小二乘法最小二乘法,是一种在误差估计、不确定度、系统辨识及预测、预报等数据处理诸多学科领域得到广泛应用的数学工具[7]。它又称最小平方法,是一种通过数学来进行优化的技术。它是通过最小化误差的平方和寻找与数据的最符合的函数进行配对。利用最小二乘法可以非常快的计算出并得到未知的数据,并使这些得到的数据与实际数据之间误差的平方和达到最小[7][8-9]。最小二乘法在曲线的拟合上还可以被进行使用,此外也可通过将能量趋向于最小,或着将熵趋向于最大,以此来解决其他一些需要优化的问题,最后用最小二乘法进行处理[10]2.4数据可视化随着可视化技术的不断更新和发展、在生活应用方面软件的增加、各种展示表现的形式的层出不穷以及添加了可修改的动态效果、可以进行交互使用等功能,数据可视化的应用不断扩大,像所有刚出来的比较新的概念一样,引起了许多人的兴趣和投入。在以前的应用中,经常运用到直方图、散点图、柱状图等,都是最基础且普通的统计图表,被应用了许多年,现在依旧在使用途中。数据可视化在实际生活中的应用,它的多态性和丰富的表现方式吸引了许多人并投入使用。不管是动态的还是静态的图形显示,都给予我们一种崭新的方式,让我们能够发现不同事物之间各式各样的联系,感受每一时刻我们周围所环绕的信息,并通过使用便捷的数据图表展示出数据背后所隐藏的信息。2.4.1Echarts技术ECharts,是一个开源的有关数据可视化的库,可以极其顺畅流利地运行,实现动态展示和操作,并且兼容在目前市面上能见到的多数浏览器上。ECharts底层是利用了轻量级的矢量图形库ZRender,能够提供更加简洁的界面、多态的交互以及可以自己根据自己的需求设计的可视化的图表。ECharts目前所包含了基本会用到的折线图、柱状图、散点图、饼图这样的基础图表,在统计上很形象简约的盒形图,针对于地理数据可视化的地图、热力图、线图,对关系型数据进行可视化的关系图、旭日图等,并且它支持各种图表之间的混合搭配。它还可以动态可拖曳图表上的组件,满足了用户对动态切换数据的需求,实现对数据区域缩放、多图的联动、浮标等,能够更贴切的进行数据分析,展现大数据所存在的魅力,能够更大的放大创新能力,利用构思出的最优的组合方式表达数据之间的关联。2.4.2Flask技术Flask是利用Python开发的Web微型应用框架,具有轻量且易于操作、扩展性强等特点。因此,利用Flask框架可以使Web应用的搭建变得更加便捷,并能快速的完成一个项目的开发。在开发一个项目时,会需要前端和后端,前端用来对界面进行构造和美化,后端就是根据前端的需求,调用所需要的数据,再传递给前端展现,而Flask就可以分为前端和后端两部分。1.前端前端部分的设计是通过把jQuery框架和Bootstrap框架结合起来使用,从而来实现对整个界面和数据的展现。(1)jQuery,是一个很方便、很有效的JavaScript框架。目的是为了提出并引导将代码量减少,却可以做到无法想象多的事情。它的最内核的极其特别的属性大概可以概述为:用有独一无二的链式语法和小而精悍且清晰的多功能接口;拥有效率极高且灵活的css选择器,并且对CSS选择器进行延伸和扩展等操作。(2)Bootstrap框架,是在HTML、CSS、JavaScript基础上所开发的简洁、清楚、强大的前端框架,这让Web的开发更加快速便捷。Bootstrap还为使用者们提供了可观、可欣赏的HTML和CSS规范。Bootstrap出世之后受到大家的支持和使用,这也使它成为了很受欢迎的开源项目。目前,在国内的大部分公司里正在使用的框架,也是在Bootstrap的基础上对它进行性能的优化而推出的。2.后端后端部分是利用Flask自带的app模块,在收到前端传递过来的数据请求,利用Python下的SQLAlchemy包或者连接MySQL数据库,实现对数据的增删改查,并通过NumPy、pandas、Scikit-learn等库对数据进行处理和计算,然后将结果整合成恰当的json数据的格式通过路由映射到前端,以此来供前端程序调用和展示。第三章系统设计3.1系统的需求分析整个设计主要分为爬虫模块、数据分析模块、数据可视化模块三个主要部分,下面是对于各个功能模块的需求分析:3.1.1爬虫模块爬虫模块的功能是搜集所需要的网络热点数据,将其采集下来,主要是对微博、百度、知乎热榜数据的采集。采集的数据包括热榜的排名、内容和相关的搜索人数。在获取完数据之后,将数据存储到MySql中,方便之后的使用。3.1.2数据分析模块数据分析模块的功能是对已经保存在数据库中的数据进行观察、筛选和分析,主要分为数据清洗和数据分析这两个部分。数据清洗在此设计中的需求就是对数据的缺失值不全和删除错误的数据。数据分析是对获取到的数据通过热度与排名的关系来观察趋势,对数据中的内容进行分词、提取关键词来进行分析,分析网络关注最多的事情。此外,还可以利用文本特征来进行词云分析、高频主题词的统计,预测出未来关注走向。3.1.3数据可视化模块数据可视化模块是对数据进行可视化,并通过web展示出来。将数据利用数据分析得出想要的类型,再调用Echarts通过图表的方式展示出来,更清晰明了。Web是利用Bootstrap+Jquery前端框架和Flask后端框架进行搭建的,实现数据可视化、前后端数据交互以及联合数据库进行实时数据的更新。3.2系统的框架设计爬虫模块主要还是利用Scrapy框架,以xpath解析的方法对所需要爬取的网页进行顺序爬取,一个个遍历和比较相关数据的网页节点,分别构造出微博爬虫、百度爬虫、知乎爬虫。这三个爬虫都是爬取这三个网页的热榜,包括热榜的数据的排名名次、内容和搜索人数,也就是热度。数据清洗模块主要是用pandas里面的函数来处理缺失值和重复值。数据分析模块通过采集到的数据的热度与排名进行多样分析,提取热榜内容数据,从关键词、热度等进行数据分析。数据可视化模块通过Echarts使分析结果以图表的形式在web上展现出来,更清晰明了,能够更好的分析数据的特征以及未来发展趋势。图3-1设计结构图3.3爬虫模块设计3.3.1Scrapy框架设计Scrapy框架本设计只用了Spider、ItemPipeline、settings部分。Spider部分有微博、百度、知乎爬虫的设计,主要是利用xpath的方法通过遍历和比较来获取这些网站热榜的数据。图3-2为微博爬虫爬取数据获取流程。图3-2scrapy爬虫爬取数据流程图爬虫部分,首先是要设置所要请求网页的url,运行爬虫程序,对目标网页发送一个请求,是模仿浏览器这样的一个操作。在程序获取到目标网页传递过来的网页源代码的时候,请求数据的功能就完成。然后,通过xpath方法,找到所要获取页面的大的框架的节点,然后再找到排名、内容、热度的网页节点,在进行程序的编写。ItemPipeline部分是根据爬虫所爬取到的被收集起来的对象,对这些对象进行处理。当程序运行起来时,匹配name字段是符合关于微博的爬虫,还是关于百度爬虫,还是关于知乎的爬虫。然后编写连接MySQL的程序,将爬取到的数据存储到数据中。Settings部分是设置管道和需要跟mysql连接的一些内容的放置,然后将爬取的数据存储到mysql中。3.3.2实时数据爬虫实时数据的爬虫主要是用xpath和正则表达式对数据进行抓取。图3-3实时数据爬虫流程图首先,是要将所需要请求的网页的url运用到程序之中,然后对目标网页所存在的服务器发送一个请求。在程序获取到目标网页传递过来的网页源代码的时候,请求数据的功能就完成。然后打印出请求url的返回状态,如果成功,那就证明请求没有问题,继续下一步操作。利用bs4方法对所要获取的网页进行分析,找到所要获取页面的大的框架的节点,然后再找到排名、内容、热度的网页节点,在进行程序的编写。因为是实时数据的抓取,所以再运用time包,增加一个时间戳,用来表示抓取数据的时间。之后再连接数据库,设置数据库所需要的一些配置的内容,将获取到的数据插入到数据库中,最后关闭数据库。又因为,网页的热榜信息是一分钟更新一次,所以在此设置了定时任务,爬取程序将一分钟运行一次,由于网页存在反爬虫,所以为了防止被禁止这个问题,又设置了时间防止被禁。3.4数据库设计数据库主要存储的是微博、百度、知乎热榜的数据以及实时数据。所采集的数据主要有以上四部分组成,主要包括热榜的排名、内容和搜索人数。数据库采用的是MySQL,分别设计成四个独立的数据表,用来存储以上数据。3.4.1本地MySQL8.0Scrapy爬取的数据存储到Mysql中。表3-1本地MySQL表(weibo)字段名称数据类型主键允许空值说明rankvarcharYY排名contentvarcharNY内容hotvarcharNY热度3.4.2腾讯云服务器实时数据的存储利用的是腾讯云服务器的数据库,也是基于MySQL。考虑到实时数据每隔一分钟采集一词,本地运行可能会造成卡顿、崩溃或死机。因此,将数据储存在云数据库中。这里也分为三个表,分别对应的微博、百度、知乎,采取的是热榜的排名、内容和热度。表3-2腾讯云服务器表(current_weibo)字段名称数据类型主键允许空值说明rankvarcharYY排名hotvarcharNY内容contentvarcharNY热度current_timedatetimeNN抓取时间第四章系统功能模块实现4.1爬虫模块爬虫模块的主要功能就是对需要采集的数据进行采集。本设计主要是对热门社交软件的热榜的爬取和它们的实时数据的爬取,这里采用了scrapy框架对它们数据的采集以及xpath方法和正则表达式对网页内容进行解析,根据不同页面的复杂程度和需求,选择适合它们的方法来使用。4.1.1scrapy模块Scrapy框架可以同时运行它的框架下的多个爬虫,这个方法十分简洁快捷。多个爬虫伪代码如下:classbaiduSpider(scrapy.Spider):name="baidu"allowed_domains=['']start_urls=['/buzz?b=1&c=513&fr=topbuzz_b341_c513']defparse(self,response,**kwargs):item=BaiduItem()main_list=response.xpath('//div[@class="main"]')print(main_list)formaininmain_list:item['rank']=response.xpath('.//td[@class="first"]/span/text()').extract_first()item['content']=response.xpath('.//td[@class="keyword"]/a/text()').extract_first()item['hot']=response.xpath('.//td[@class="last"]/span/text()').extract_first()yielditem//使用xpath来解析网页代码Item部分代码如下:classWeiboItem(scrapy.Item):rank=scrapy.Field()content=scrapy.Field()hot=scrapy.Field()passSettings伪代码如下:USER_AGENT='Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/78.0.3904.108Safari/537.36'ROBOTSTXT_OBEY=FalseITEM_PIPELINES={'data.pipelines.dataPipeline':300,}图4-1scrapy爬虫数据获取情况4.1.2实时数据模块实时数据主要是抓取实时更新的数据,由于页面信息每一分钟更新一次,所以设置的爬虫也将每一分钟爬取一次。部分代码如下:defmain():db=pymysql.connect(host='',port=22639,user='aaa76857',passwd='yiwang1029.',db='data',charset='utf8')cursor=db.cursor()#取游标sql="insertintocurrent_weiboVALUES('%s','%s','%s','%s')"//连接数据库r=requests.get(url='/top/summary?Refer=top_hot&topnav=1&wvr=6',timeout=10)print(r.status_code)#获取返回状态r.encoding=r.apparent_encodingdemo=r.textsoup=BeautifulSoup(demo,"lxml")t=1result=[]time_stamp=time.strftime('%Y/%m/%d%H:%M',time.localtime(time.time()))#时间戳foriteminsoup.find_all('tr',class_=''):try:#去掉第一条信息if(t==1):t=0continue#print(link('td'))rank=item.select("td")[0]#热搜排名content=item.select("td")[1].select("a")[0]hot=item.select("td")[1].select("span")[0]result.append([rank.string,content.string,hot.string,time_stamp])exceptIndexError:passforiteminresult:rank=str(item[0])content=str(item[1])hot=str(item[2])current_time=str(item[3])print(rank,content,hot,current_time)cursor.execute(sql%(rank,content,hot,current_time))//插入数据mit()cursor.close()db.close()main()schedule.every(1).minutes.do(main)#检查部署的情况,如果任务准备就绪,就开始执行任务whileTrue:time.sleep(2)schedule.run_pending()图4-2实时数据获取情况4.2数据库模块本设计采用的是MySQL数据库,存储爬取的微博、百度、知乎的热榜的数据以及实时更新数据。本设计使用的是NavicatPreminum15可视化工具来给数据库建立表,可以在它的界面上直接操作连接数据库并建表。Scrapy主要是通过通道来与数据库连接,Scrapy与MySQL互连存储数据部分代码如下:classdataPipeline(object):weibo_name='weibo'baidu_name='baidu'zhihu_name='zhihu'weiboInsert="insertintoweibo(rank,content,hot)values('{rank}','{content}','{hot}')"baiduInsert="insertintobaidu(rank,content,hot)values('{rank}','{content}','{hot}')"zhihuInsert="insertintozhihu(rank,content,hot)values('{rank}','{content}','{hot}')"definit(self,settings):self.settings=settings#pipeline默认调用defprocess_item(self,item,spider):print(item)if=="weibo":sqltext=self.weiboInsert.format(rank=pymysql.escape_string(item['rank']),content=pymysql.escape_string(item['content']),hot=pymysql.escape_string(item['hot']))#spider.log(sqltext)self.cursor.execute(sqltext)elif=="baidu":sqltext=self.baiduInsert.format(rank=pymysql.escape_string(item['rank']),content=pymysql.escape_string(item['content']),hot=pymysql.escape_string(item['hot']))#spider.log(sqltext)self.cursor.execute(sqltext)elif=="zhihu":sqltext=self.zhihuInsert.format(rank=pymysql.escape_string(item['rank']),content=pymysql.escape_string(item['content']),hot=pymysql.escape_string(item['hot']))#spider.log(sqltext)self.cursor.execute(sqltext)else:spider.log('Undefinedname:%s'%)returnitem@classmethoddeffrom_crawler(cls,crawler):returncls(crawler.settings)defopen_spider(self,spider):#连接数据库self.connect=pymysql.connect(host=self.settings.get('MYSQL_HOST'),port=self.settings.get('MYSQL_PORT'),db=self.settings.get('MYSQL_DBNAME'),user=self.settings.get('MYSQL_USER'),passwd=self.settings.get('MYSQL_PASSWD'),charset='utf8',use_unicode=True)#通过cursor执行增删查改self.cursor=self.connect.cursor()self.connect.autocommit(True)defclose_spider(self,spider):self.cursor.close()self.connect.close()实时数据存储到MySQL的部分代码如下:db=pymysql.connect(host='',port=22639,user='aaa76857',passwd='yiwang1029.',db='data',charset='utf8')cursor=db.cursor()#取游标sql="insertintocurrent_weiboVALUES('%s','%s','%s','%s')"//这里连接到数据库cursor.execute(sql%(rank,content,hot,current_time))//将数据插入数据库中mit()cursor.close()db.close()//关闭连接,关闭数据库4.3数据分析模块4.3.1文本分析实现文本分析主要是对获取到的数据中含有的文本的划分以及关键词的统计,本设计通过词云和柱状图来展示它们之间的关系。词云步骤:(1)文本内容的收集。将所有文本单独存储起来。(2)文本分词。按照一定规则对取的文本数据进行划分,并统计它们出现的频率。本设计用jieba包来进行分词处理。(3)绘制词云。导入wordcloud包,根据它的使用发放来进行生成。词云部分代码如下:all_words=cut_words(top_search)#定义停用词stop=['的','你','了','将','为','例','','多','再','有','是','等','天','次']words_cut=[]forwordinall_words:ifwordnotinstop:words_cut.append(word)word_count=pd.Series(words_cut).value_counts()wc=WordCloud(font_path="C:\\Windows\\Fonts\\simhei.ttf",#设置字体background_color="white",#设置词云背景颜色max_words=1000,#词云允许最大词汇数max_font_size=200,#最大字体大小random_state=50#配色方案的种数)wc1=wc.fit_words(word_count)#生成词云高频关键词统计部分代码:url='/top/summary?Refer=top_hot&topnav=1&wvr=6'#获取数据r=requests.get(url)r.raise_for_status()r.encoding=r.apparent_encodingsoup=BeautifulSoup(r.text,'html.parser')data=soup.find_all('a')d_list=[]foritemindata:d_list.append(item.text)words=d_list#中文分词result=list(jieba.cut(words[0]))forwordinwords:result.extend(jieba.cut(word))redata=[]foritinresult:iflen(it)<=1:continueelse:redata.append(it)result_str=''.join(redata)key=list(set(redata))x,y=[],[]#筛选数据forstinkey:count=redata.count(st)ifcount<=1:continueelse:x.append(st)y.append(count)x.sort()y.sort()图4-3文本分析图表4.3.2热度统计实现通过对抓取的数据的热度和排名进行统计,来观察它的趋势走向。热度分析主要用了散点图、折线图、柱状图和热力图。以下是散点图、折线图和柱状图的部分代码:varmyChart=echarts.init(document.getElementById('bar'));option_bar={xAxis:{type:'category',data:[{%foriteminitems%}'{{item[0]}}',{%endfor%}]},yAxis:{type:'value'},series:[{type:'bar',data:[{%foriteminitems%}'{{item[2]}}',{%endfor%}]}],};color:['rgb(131,175,155)','rgb(252,157,154)','rgb(249,205,173)','rgb(200,200,169)',]myChart.setOption(option_bar)热力图运用的是seaborn包制作,以下是热力图的部分代码:sns.jointplot(x='排名',y='热度',data=df,kind='kde',cbar=True,color='r',shade=True)plt.title("热力图")plt.savefig('F://bishe//static//style//images//heatmap.png')plt.show()图4-4热度分析示例图表4.3.3回归分析实现这里运用了一元分析、二元分析、三元分析和最小二乘法,以下是多元回归分析部分代码:sns.regplot(x=df.排名,y=df.热度,order=1)plt.savefig(fname="F://bishe//static//style//images//linear_weibo1.png",figsize=[10,10])plt.show()以下是最小二乘法回归分析部分代码:deffunc(p,x):a,b,c=preturna*(x**2)+(b*x)+cdef_func(p,x,y):returnfunc(p,x)-yp0=[2,3,4]P=leastsq(er_func,p0,args=(df.排名,df.热度))a,b,c=P[0]x=np.linspace(0,55,100)y=a*(x**2)+(b*x)+cplt.plot(x,y,color=[0,0,0.8,0.4],label=u"拟合直线",linewidth=2)plt.scatter(x,y,color="c",label=u"拟合数据",linewidth=2)plt.legend()图4-5回归分析示例图表4.3.4实时数据实现实时数据是对网页上不停更新数据的抓取,同时也保持页面上数据的不断刷新。以下是实时数据图表显示的部分代码:varmyChart=echarts.init(document.getElementById('bar'));option_bar={grid:{left:"2%",right:"4%",bottom:"6%",containLabel:true,},xAxis:{type:'value',splitLine:{show:false//不显示分割线}},yAxis:{type:'category',data:[{%foriteminitems%}'{{item[1]}}',{%endfor%}]},series:[{type:'bar',data:[{%foriteminitems%}'{{item[2]}}',{%endfor%}],label:{show:true,formatter:'{c}',//显示数据带上百分比position:'right'//控制数据显示位置,‘’right‘’为显示在柱状图右侧}}],color:['rgb(131,175,155)','rgb(252,157,154)','rgb(249,205,173)','rgb(200,200,169)',]};myChart.setOption(option_bar)以下是实时数据内容展示的部分代码:<tableclass="tabletable-hover"><thead><tr><th>排名</th><th>内容</th><th>热度</th></tr></thead><tbody>{%foriteminitems%}<tr><td>{{item[0]}}</td><td>{{item[1]}}</td><td>{{item[2]}}</td></tr>{%endfor%}</tbody></table>图4-6实时数据图表4.4数据可视化模块数据可视化模块分为前端模块和后端模块两个部分。后端部分的功能就是接受前端传递过来的请求,并作出回应。本设计利用Flask框架来构造web。前端部分是利用Echarts来将图表展示在页面上,并通过jQuery和Bootstrap搭建前端框架和美化界面。4.4.1后端模块利用Flask框架搭建简易的应用,通常分为以下几个步骤:(1)对实例进行创建。当后端收到来自前端的请求时,就会对对应的实例进行调用,等操作完成时,再向前端返回相对应的数据。(2)创建路由和函数。路由对应着url,当在其他前端模板中调用url,url与相应的路由相对应时,就会调用相对应的函数。(3)调用前端模板。等运行完实例之后,获取到对应的数据,Flask相继会调用对应的前端模板,将数据传送到前端界面上。Flask部分代码代码,其他类似:@app.route('/weibo1/')//创建路由defweobo1():db=Mysql()items=db.getItems_weibo()returnrender_template(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论