摘要
在21世纪的今天,是信息化的时代,谁优先获取信息,谁就能掌握主动。互联网的发展,让人们获取信息更容易。网络信息具有开放性特点,只要连接网络,就能获取一部分想要的信息,而深层次信息的获取具有一定难度,探索网络信息有效获取方法与手段,具有一定的实际意义与价值。
本设计在分析Python语言功能特点以及爬虫基本原理方法基础上,采用更新、更完整的设计方法,开发了一套金融新闻数据分析系统,包含了财经网站信息爬取、信息存储和分析功能,较好地实现网页各类信息获取需求。
本论文首先分析基于爬虫的金融新闻数据分析系统所需的基本功能和组件需求,然后按软件工程方法从系统需求分析、体系结构设计、功能模块划分和模式分析等方面对系统分析与设计流程进行了详细论述。
关键词:网络爬虫;金融新闻数据;Python
第1章绪论
1.1选题背景
随着社会进程不断的加快和数据大爆炸的状况的出现,人们愈加的需要更多强有力的工具来提高工作效率。随着互联网技术的发展,产生的数据必然是越来越多,对于数据的统筹规划、合理运用等都是新学问,我们如何获取数据,如何合理使用数据,在这个大数据时代都是我们必须关注的问题。
在这个信息化时代,网络上的新闻每天都在增加,而在这些新闻中,我们想要的只是其中一小部分,如何相对精准的找到我们想看的新闻,就诞生了搜索引擎。使用搜索引擎查找网页时,开发商先为每个词语设置索性,然后就是抓去网页,而抓取网页信息的关键技术就是运用爬虫代码来实现的。现如今,世界知名大厂的搜索引擎,比如国内有百度、搜狗等,国外的谷歌等,都没有向大众公布他家的爬虫技术。完成Web爬虫的关键点和难点是:多线程实现;关键资源的调配;遍历网页的策略选择和遍历Web图的实现;选择和施行哪种存储数据结构。
网络爬虫是用Python语言所写出来的在网站中按照所给的规则来实现自动获取信息的程序。Python是一种通用,解释的高级编程语言,非常适合用来编写网络爬虫程序,并且Python的2D绘图库可以实现将爬取到的数据进行图形化转换,该编程语言可以满足课题绝大部分的需求,因此本课题决定使用Python语言进行爬虫的开发设计。通过网络爬虫爬取新闻网站信息,对爬取到的信息进行检索的功能,让用户直观的看到他们想看到的新闻,方便他们对社会的时事新闻进行分析,从而做出自己的判断。
1.2论文研究的主要内容
本文所介绍的是对基于Python的金融新闻数据挖掘及可视化系统的介绍与说明。用户可以通过个人设备进行搜索,给客户的工作带来便利,从而提高工作效率,节省工作时间,用节省下来的时间去干更多想做的事情。
这个系统的构成分3个模块:
(1)网络信息爬取模块。利用Python爬虫技术从指定网址爬各种新闻,然后要对其进行分析和删减。
(2)处理网络数据模块。对网络信息爬取模块所爬到的内容进行处理,用已经写好的算法自动将无关内容删除,这样能减少不必要的储存空间浪费,也能提高计算机的速度。
(3)结果处理模块。将从网络中爬取出来的信息存储,实现可视化,在系统中显示出来。
1.3说明书组织结构
该说明书一共分为六章:
第一章:系统的选题背景。主要是根据当代社会背景来分析此系统有没有开发的必要,以及相较其他系统的优势
第二章:相关技术介绍。对Python语言、Python爬虫技术、Requests库等系统开发要用到的相关的技术做出介绍,以确保开发系统的准备工作可以顺利进行。
第三章:系统需求分析与总体设计。介绍的也是系统开发前的工作,对系统大致框架有相应的了解。
第四章:系统详细设计与实现设计。前期工作做好后就开始具体工作的设计,包含了系统从爬取数据,存储数据,分析并精简数据,到最后能成功显示所有数据。
第五章:系统测试。给出测试步骤,按步骤测试系统,得出测试结论。
第六章:总结。完成系统后个人对系统给出的评估。
第2章相关技术简介
2.1Python语言介绍
在计算机这个行业里,每一个人都或多或少的会使用编程语言,通俗的说是像中文,英文是世界各国都在用的语言一样,编程语言是在计算机里使用的专用语言。最常用也是最好用的编程语言如C语言、JAVA语言、Python语言等,此次所使用的就是Python语言。Python语言是最简洁最好用的语言,它的模块非常多,我们平时的大多数工作他都可以帮着完成,就比如近年挺火的大数据,还有以前Web开发都能用它做,本系统的爬虫技术也是在Python语言的能力之内,当然根据每个软件开发人员的喜好不用,所使用的编程语言也不同。
如果说Python语言怎么问世的,这还要感谢,吉多·范罗苏姆老爷子,由于他之前参与设计的ABC语言不是很成功,毕竟人嘛,爱一行干一行才能有比较高的成就,所以也就是在1989年西方人都在过圣诞的时候,恰好他也很无聊,为了弥补ABC语言所带来的遗憾,他就创作近乎完美的编程语言——Python。吸取ABC语言的教训Python语言是开放性的,当然也结合了当时其他热门编程语言的习惯。到现在为止Python语言已经是TIOBE排名第一的语言,这个排行并不代表语言的好坏,只代表语言热门程度。
Python语言的优点有很多,其一它是免费的,开源的,这对于日常任务繁重的程序员是很重要的,毕竟可以免费阅读和拷贝,借鉴他人的思路来优化自己的设计。其二简单易学对新手友好,它的设计初衷就是针对非专业程序员的。其三可以被移植到其他平台,例如windows、linux等众多平台。其四它的标准库大,不管是专业计算机人员还是其他工作人员,都能用的到Python,例如文档生成,电子邮件,线程等等,如果有时间可以学一下Python语言。其五它是面向对象语言,数字、字符串等都可以是对象。当然还有其他优点就不一一赘述了。
2.2Python爬虫技术
网络爬虫又叫做网络机器人,顾名思义它是可以实现自动抓取网页数据的一种程序,可以根据用户的需求,设置特定的策略去抓取自己的想要的数据。
网络爬虫就是向网站发送一个请求,所发出去的可以附加要求,之后回应的信息状态码为200就说明对方已接收请求并且可以正常回应。所获得的内容就是请求网页的内容,所获得数据类型也有很多种,可以是二进制数据、字符串等,获取了返回内容就可以对其内容进行拆解后分析了,剔除不需要的内容后,留下需要的数据就可以存储下来对其进行下一步处理了。可以将其存到数据库,也可以存到TXT文本,或者其他格式,都可以选择,要根据客户的需求和来选择。
2.3Requests库详解
Requests库所用到的编写语言就是Python,它的宣传语是“HTTP for Humans”由此可以看得出来他更加方便我们使用,让我们对HTTP处理起来更简单。它是Python的一个第三方库除了能爬取页面,还能模仿人去服务器上面提交一些请求。它和urllib相比更简单,由此也能让我们开发时候的工作变得轻松,也不会耽误所要满足的要求。
在requests库内的大量方法可以让我们开发系统变得更方便,也能直接用这些方法去实现功能。如表2.1所示。
2.3.1get()方法详解
本次开发系统所要用到Requests库中主要功能是给每个网页发送请求,其中get请求又是其最主要的一种方法。可在库中直接使用get方法。方法如下:
import requests#导入库
r=requests.get(url=’http://jr.baidu.com/’)#GET请求
print(r.status_code)#获取状态码
r=requests.get(url=’http://jr.baidu.com/’,params={‘wd’:’python’})#带参数的请求
print(r.text)#解码返回的数据
2.3.2head()方法详解
与get()方法不同的是head()方法在发送请求后对方只会回复响应头,它可以通过定义一个字段来获取所访问对象的头,也可以修改自身参数获取对应信息,比如要获取用户代理信息来当做几种情况的请求,下面就介绍以下此种方法:
headers={‘Accept’:’text/html,application/xhtml+xml,image/jxr,*/*’,
‘Accept-Encoding’:’gzip,deflate’,
‘Accept-Language’:’zh-Hans-CN,zh-Hans;q=0.5′,
‘Connection’:’Keep-Alive’,
‘Host’:’zhannei.baidu.com’,
‘User-Agent’:’Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063′}
r=requests.get(‘http://zhishu.sogou.com/’,params=keyword,headers=headers,timeout=3)
2.3.3json格式post请求
在post请求当中,json数据格式的请求,请求头常规为:
Content-Type:application/json
post请求方法:
post(url,data=None,json=None,**kwargs)
在requests库中post方法就像python语言的字典一样。在请求的过程中会增加content_type这个头部信息成为application/json。还会将json值用json方法中的dumps()方法变成json的类别,方便处理。一般来说在里面包含了它的参数和序列的目标。
2.4HTTP协议原理
2.4.1HTTP协议简介
在日常上网浏览时,我们经常可以看到在一个网址前面跟着http四个字母,全称叫超文本传输协议,它就是此链接的请求或者说响应协议。它在OSI七层模型中的应用层,所有的网站都会遵循HTTP的协议。HTTP协议用作客户端也就是请求方,向服务端也就是提供客户端发来请求的信息的一方,为它们两个之间的通讯做服务。
2.4.2HTTP协议起始行
HTTP的协议起始行由请求和响应两个报文起始行所构成的。它两的基本结构相同,都是由起始行,头部字段,正文组成,一般请求头是前两项所组成的。HTTP请求所描述的是服务器执行的操作,就比如说post操作和get操作等,在以上请求中具体描述的是对服务器中哪个地址来执行的,所执行的必须是相对路径。响应的起始行中包含的内容由它的版本号,状态码等信息构成,请求后所返回的数据要以空格当作它的分隔符。
2.4.3HTTP协议首部字段
首部字段的构成分别由以下四大部分:
1.通用首部字段:两种报文都会使用到它们。
2.请求首部字段:我们在客户端给服务器发送信息时所用到的。
3.响应首部字段:信息由服务器返回时所用到的。
4.实体首部字段:两种报文实体会用得到它们。
信息处理时客户端和服务器都会用到它们。之后我们在客户端要查看信息时,所获取的大多数信息都看不到,做到弱水三千只取一瓢。此次开发系统所用字段主要是第一部分请求首部字段,这一段文字就相当于浏览器的身份牌,是浏览器对客户端识别用的。
在上面的四组表格中,通用首部字段部分有9种请求报文响应报文会用到;请求首部字段有19种客户端发服务器端用;响应首部字段有9种服务器端返回信息时用;实体首部字段有10种请求报文响应报文实体部分用。
2.4.4HTTP协议的请求方法
在定义了HTTP/1.1的RFC2616中,又定义了HEAD、TRACE、GET、POST、PUT、DELETE、OPTIONS、CONNECT这个8种方法。以上的几个方法中最常用的就是GET方法,它是用来向服务器端发送请求后获取其传递回来的数据的。还有就是POST方法,它的用途是向服务器端传递信息的,它相比较GET方法其实更安全,因为它的参数不会在浏览器的访问历史记录里保存。
2.5开发环境搭建
开发语言:Python 3.7。
开发框架:Request。
开发工具:pycharm及cmd命令行。
操作系统:Windows 10。
2.5.1Python安装
从Python官网(www.python.org/downloads)下载,本机是64位操作系统,所以下载对应Python3.7,64位安装文件,下载好直接安装。
安装过程中,需要选择Add Python 3.7 to PATH,安装程序会将他的安装路径加到系统环境里,安装完成后系统才能找到python解释器。接下来自己选择快速安装或者自定义安装即可,在安装时,一定要注意需要把pip安装给勾上,接着等待安装完成即可。
2.5.2Requests库安装
以管理员身份启动cmd,并执行pip install requests,pip会自动下载可用requests库的安装程序并自动安装。如图2.3所示。
第3章系统需求分析与总体设计
3.1可行性分析
在做一个系统之前,要先做一篇可行性分析报告,这是对客户负责,也能避免浪费自己的时间和精力。可行性主要分为三方面的分析,技术可行性分析,经济可行性分析,社会可行性分析。可行性分析主要目的就是要以最小的代价确定要进行项目中是否存在问题,并且看能不能将这些问题解决掉,具体分析如下:
3.1.1技术可行性分析
1.Python语言简洁易读
Python语言在近年逐渐占据了开发语言重要的地位,具有很多的优点,例如:简洁,易读,可扩展,Python语言是面向对象语言,他可以增加源代码的重复使用性,现今,Python具有较好的实用性,可以适用于现在大多数主流计算机系统,例如:Windows系统、MacOS系统等。Python系统使用起来十分便利,能直接使用指令进行操作,Python能够直接进行交互操作。同时,语句的开始和退出也可用Python的缩进功能,并且可以提高代码的可阅读性。Python语言简洁,适合编程初学者学习这门语言。
2.爬虫技术获取信息功能强大
提到Python,网络爬虫技术是这种语言中一项强大的功能,在互联网时代,信息量尤其庞大,为了更好的获取和处理数据,网络爬虫应运而生提到Python在现实中使用案例,就不得不提到网络爬虫。所谓网络爬虫,就是指通过网络网址,获得该网址中需要的数据信息,并且把从该网址提取到自己所需要的数据信息进行解析,最后储存该数据信息。若想从网址中获取数据,可以用GET和POST两种方法,GET是请求URL获取参数,将所需信息从URL中提取。POST通过账号密码获得信息,而数据解析则是用了Beautiful Soup等库,然后通过各种方式获取信息[10]。目标网址中所需要数据都解析完成之后,如果数据偏少,便可将数据存储为txt文本、csv文本、json文本,如果数据信息偏多,便可将数据存储到数据库中。
3.1.2经济可行性分析
1.开发成本低
本次所开发的系统对硬件要求低,就需要一台普通计算机即可,所用到的开发软件也都有免费的版本,所以并不用担心开发成本过高而带来的麻烦。并且系统也尽量避免一些复杂代码,以至于后期进行维护不需要很大代价。
2.金融市场逐渐壮大需求量变大
我国是重视科学发展的国家,科学的进步带动了我国经济的发展,经济体量不断变大,这也使得金融市场不确定因素越来越多,风险也更大,市场竞争更激烈。2021年,我国股市是胜利的一年,上证指数上涨4.8%,深证指数上涨2.67%,创业板指数上涨10.02%,三大指均连长三年。上证打破自己28年前的记录,连续三年阳线。2021年,北交所成立,开启了京沪深三市的同步运行。还是这一年,A股的总市值跨过90万亿这一门槛,北向资金的流入和年成交总额都刷新历史新高,全年北向资金净买入首次超过4000亿元,达到4321.7亿元,全年成交总额为257.2万亿元,打破了2015年的记录。截止年底A股市场共有4685家上市公司,总市值约为96.5万亿元,相较于上年增加了11.9万亿元,增长幅度大于14%。所以,在如此大规模的市场里,只要一小部分人用得到此软件,那么收益便不可估量。
3.1.3法律可行性分析
本系统所获得的信息也是公开可见的,不会影响到网站正常运行,且在法律上不存在获取他人私密信息和侵权行为。
我国在关于爬虫问题上也有了其相关的规定,根据国家互联网信息办公室在2019年5月28日发布的关于《数据安全管理办法(征求意见稿)》公开征求意见的通知中,有提到对网络爬虫的规定:
第十六条网络运营者采取自动化手段访问收集网站数据,不得妨碍网站正常运行;此类行为严重影响网站运行,如自动化访问收集流量超过网站日均流量三分之一,网站要求停止自动化访问收集时,应当停止。
由上述说明本系统在法律上可行。
3.1.4操作可行性
由当今社会几乎每个人都会使用计算机,而且计算机也很普及,家里,办公地都有计算机,而且搞金融的人对计算机日常操作也很熟悉。本系统将从用户角度出发,让用户尽可能方便、快捷的完成工作,介减少用户的重复性操作,让用户有更良好的体验,在系统设计好后,我们也会根据自己的想法和客户需求来改进此系统。
根据上面四项分析,本次开发的基于Python的金融新闻数据挖掘及可视化系统可行。
3.2需求分析
想要设计出一个合理的又有价值的基于Python金融新闻数据挖掘及可视化系统,首先根据客户提的要求进行分析,这是软件生命周期的第一阶段。并且确定客户在功能和页面布局方面对系统的要求。通过这种方式,最终确定系统可以解决客户真正的问题。需求分析所要研究的内容是发现需求,建立系统模型和定义需求。第一从客户的角度看待需求,第二从开发者的角度看待客户提出来的问题能否完成。这个阶段是系统开发的初级阶段也是打基础的阶段,如果做不好,对客户没法交代,也浪费自己大量人力和物力,将来会存在很大隐患。因此做好需求分析很重要。
就目前来看,随着近几年网络信息爆炸似的增长,许多信息是没有用,也是重复的,所以我们在日常查询资料的时候会费很大的力气,可能有时候时间精力都花了,也没有找到想找的有价值的信息。想要从大批信息中找出自己想要的有价值信息,并且能减少人工成本,提升效率就是其中的关键点。基于Python金融新闻数据挖掘及可视化系统的需求分析的任务便是通过知名金融新闻网站,还有根据股民日常推介程度来决定选取哪几个网站作为本系统所要爬取信息的来源,开发一个可以解决股民及证券公司用来查找金融相关信息的专用网络爬虫系统,中间除去重复内容,和过滤掉的内容,最终给用户展示出来有用的数据。
3.2.1功能需求
现在各大金融网站每天都有成百上千篇新闻要更新,更新的内容有时会重复,也有一些博眼球的不管新闻真假就直接报道,网站有时也不能及时过滤这部分垃圾信息,但是我们又不能离开这些网站,这时就需要一个稳定简洁的系统来方便日常的信息提取。本系统是用于提取金融数据的,所以提取出来的信息质量越高,价值越高,对股民帮助越大,也会使得系统的价值越高,从而可以更好的推销出去。此系统是通过网络爬虫技术,将网络内容爬取出来并精选,系统主要有三大功能:金融新闻数据爬取、金融新闻数据信息存储、金融新闻数据展示。本系统以财经网站为爬取页面,分析用户的需要,可以实现将各个股票等信息爬取储存,使用者可以方便的看到各个新闻情况。系统用例图如图3.1所示。
1.采集信息。
该系统的采集信息功能是通过对HTTP向指定网站url发送一个请求,将其网页中的信息提取出来,然后将所采集到的信息解析后得到此条新闻的内容链接。根据此链接获取新闻内容的代码,然后解析出与其相关的相关信息,然后储存到数据库里,顺便记录此信息的入库时间,方便以后用。
2.存储信息
该系统的存储信息功能是将从网站里爬取到的与金融相关新闻后经过处理,将其保存到数据库,以准备进行后续处理。这个功能主要是将爬取出的信息储存,当做下一步分析用的信息。
3.读取信息
该系统的读取信息这项功能是对上一步存储信息数据库中的信息提取出来后对有效的进行分析,具体就根据要求比如关键词,将有需要的信息筛选出后,将它们里面的高频词汇也筛选出来,以后也可以当成关键词。其中,新闻是由标题、作者、时间、内容组成,内容是其价值的关键所在,所以就需要对新闻的内容部分进行详细的分析。由于金融新闻的特殊性,网上的新闻里会出现近期的相关金融术语或者这个时期突然火起来的网络用语,这些都需要添加自定义关键词来进行处理,以保证所需信息的完整性及准确性。除此以外,还需要对上述提到的筛选出来的高频词汇进行处理,因为这些词可能和金融新闻联系并不是很大,但是在每个金融新闻中又经常出现,所以也要加到关键词里。这里主要是根据个人对金融市场的理解来判断,还需要专业的金融人员来确定,一般来说,分词的结果与专业金融人员对金融市场理解所能描述出来的关键词越高,所获得的新闻价值就越高,软件对客户的价值就越高。如果说在这一篇新闻中所能匹配到软件词库的关键词越多,那么在一定程度上来说此篇新闻的相关度就越高,那么此文章中可能又其他有价值的信息值得挖掘。当然,此系统可以筛查出大部分没有价值的新闻,其余的新闻还需要通过人工来进行检查,另外,可以根据不同的筛选条件来满足客户对系统的要求,尽可能提高用户体验度。
4.显示信息
该功能是此系统的最后一步,也是最关节的一步,最终显示的信息是经过各大网站所获取的信息经过去重,过滤和优化所显示出来最可能具有价值的信息,用户得到信息后便需要根据自己在金融市场多年的摸爬滚打来做出自己的判断,最后要提醒一句:投资有风险,入市需谨慎。
3.2.2非功能需求
为了保障整个系统的稳定运行,为了让爬虫的抓取性能更强,本系统把深度优先算法与宽度优先算法相结合使用,使用了多线程技术,对url分析去重,spider程序采用非递归方式,这样可以避免在访问大型网站时爬取失败以及爬取等待时间过长的问题。具体的分为一下四个部分:
1.可靠性
由于网络的复杂性和突然情况,在收集数据时,整个爬虫停滞不前,没有网页、没有服务器、缺少标签、攀登“脏数据”等,不应影响整个系统的稳定运行。这对于系统来说是必须要避免的问题,此问题大多出在服务器和垃圾数据的问题上。要避免踩雷而引起的系统不正常运行,这样只能使得系统价值降低,解决这些问题不仅提高了工作效率,也获得用户认可。
2.易用性
该系统操作简单,交互性好,使用快捷,最总向用户展示的结果简洁明了,能给用户良好的体验。用户在使用系统过程中不会因为操作而犯难,可根据自己的需求去查询想要的信息,最后得到有用的信息。如:系统运行错误,提示原因和解决方案,若是不能自行解决,就打电话咨询。
3.容错性
用户在使用的过程中可能会因为对系统的不了解而做出错误的操作,这个时候我们应该给用户指出的提示或者对此次操作做出合理的处理,这就需要设计一些容错性,要不然影响系统运行就得不偿失了。
4.高效性
我们所设计的系统要能帮助用户高效率的完成他的工作,这时候就要给系统设计一套针对性的方案,要对不相关的网页做到尽量少抓不抓,去除这些对金融不相关的新闻,为下一步对所抓取的内容分析打好基础,从而实现最后给用户所展示的信息做到又快又好。
3.3系统开发环境及条件
3.3.1硬件条件
(1)CPU:1.6 GHz以上(建议2.2 GHz或速度更快)
(2)内存:384 MB以上(建议1024 MB以上)
(3)硬盘:40G以上
(4)显示器:1024×768显示器
3.3.2软件平台
(1)操作系统:Windows Vista/Windows 7-Windows 10。
(2)开发工具:Visual Studio 2018
(3)分辨率:最佳效果1024×768像素
3.4系统逻辑层次设计
1、界面接口层主要功能是为客户提供可操作的面板。经过此层,客户就能输入命令,让系统显示相关信息,主要是几个独立应用模块。
2、逻辑层,系统设计过程中重要部分,也是比较难设计的部分。在本系统中,将逻辑层分为多个对象,因为功能和业务不一样。这种做法可以重点使用对象里所提到的方法和程序,以达到减少其中多余的成分,让结构层次分明。逻辑层主要用于封装软件发来的请求。若是服务器浏览量很大,就得同时处理很多任务,这样就能根据设定好的易于管理这项原则。将任务分配给其他应用服务器,使得系统对指令处理更加平衡,使处理任务合理。
系统的设计需要用到很多爬虫技术,并且数据库中的数据要以独立状态存在,要能够方便使用起来与其他功能对接,前端功能的编写就要实现与库中数据相对接,这样就能收到反馈。
3.5多媒体采集流程设计
系统的设计是运用对数据挖掘的方法抓取网页后将抓到的信息存到数据库里,对其管理。
图3.2多媒体采集流程图
3.6搜索引擎爬虫体系结构
网络爬虫主要由三部分构成具体看图3.3。任务执行端,首先给它分配一个任务,因为它连接着网址,那就让它去这个网址里下载一个网页,这里用线程执行下载任务,一个线程对应一个任务,先识别URL确定后就可以把网页下载下来,下载之后要对它进行解析,然后就能顺着这个URL发现新的URL了。最后把获得的这些URL存到数据库,就能断电传续了。
网络爬虫另一个部分就是任务调度端,和上面所介绍的执行端是互相协同工作的,任务调度端是储存站点URL的,它可以对URL进行增加删除的处理等,它和任务执行端处理的是一个URL队。
数据服务端里有数据库和URL的缓存,它也是和任务执行端所关联工作的。
3.7搜索引擎抓取工作过程
1、给URL队列添加URL。
2、开始执行任务。
3、每次执行任务后就能获取一个新的URL,根据这个地址把相对应内容下在,解析后就得到其中想要的内容,若是URL解析错误,那就是以前的列表有这个URL,就不需要管它了,最后将站外URL删掉。
4、执行上面的步骤,达到所设置的结束代码停止工作。
第4章系统详细设计与实现
4.1系统功能结构设计
要从网页爬取有价值的金融新闻信息,在前期工作中就要对金融网址进行选择,主要是根据像热门网址有知名度就可以,冷门网址里也有不少有价值的信息,这就要根据网友推荐或者是平时的对金融相关的经验来选择。主要的选择方向是更新快的因为信息时代时间就是金钱,新闻种类多的因为好多新闻看起来和股市没关系,其实和上市公司也有着千丝万缕的联系,再就是针对性强的,这里面可能新闻没那么全面,但是比较精确。爬虫系统逻辑结构如图4.1所示。
图4.1爬虫系统逻辑结构图
先进行初始化数据,在URL队列中把需要的URL存起来后,给对应网址发请求,获取网址上的信息,之后解析URL,下一步就将他们一起存储到数据库。因为已经解析URL,就可以去数据库中查看是否重复,有的话去除重复,没有就将其加入库中。URL的队列不为空,就可将它们的头部元素取出,最后重复以上的部分,就能实现自动爬取网络信息。
4.2系统功能模块设计
4.2.1网页爬取模块设计
(1)网页爬取的过程
作为搜索引擎中最重要的模块之一,爬虫当然也是系统首要功能。爬虫程序必须捕获internet上的相关web页面。为了从随机的web网页中得到本地信息,一些特定的通信机制以及通信协议就成了爬虫前行的绊脚石,所以说爬虫需要遵循它们给出的相关协议以及制定出来的相关规则。
该系统使用并行分配来执行工作,从接收URL地址、端口的套接字、发送页面服务器请求和从web页面中获取所需数据开始。图4.3展示了网页获取的基本流程。为了在上述中取得进展,必须建立一个超时预期机制,以免过度消耗时间,响应速度太慢。
(2)HTTP协议
HTTP请求访问web页面后,必须提交请求并根据HTTP协议获取数据,首先,将获得给定站点的地址和最终端口号,并将其链接到站点,可以通过直接链接或者代理的方式。依次链接到地址端口,然后通过反馈来确定通信是否成功,如果失败,就意味着页面错误或者是不存在,如果成功,继续留在页面上并完成捕获工作。
(3)URL管理
网络爬虫会把从网页爬取出的URL地址给服务器发去,由服务器检查有哪些URL地址是没用的,将这些不需要的地址都去除,将剩下的存到数据库,就是在这个过程里实现对数据的精减和去重处理。
网页获取模块的基本流程如图4.3所示。
4.2.2搜索策略模块设计
既满足了系统的需求,又提高了搜索效率。在本系统中,第一个界面是搜索条目界面,然后下一层可以有信息列表。为了通过提高爬虫的效率,我们采用了多种算法来爬取数据。例如,若使用深度优先搜索算法,就会从一个节点一直爬下去,不利于搜集信息。爬虫的搜索条目,它可以搜索条目列表的所有数据,这对我们来说是有效的,但如果履带继续搜索到深处,它需要在每个数据返回后找到所有的信息并进入下一个数据,这样降低了系统的工作效率,而广度优先算法更适合于抓取列表页面中的所有数据信息。爬虫系统将需要的数据信息逐层爬行,比爬行一个再返回再爬行下一个更高效、更快。为了保证爬虫系统高效低消耗的基本要求,将深度优先算法与宽度优先算法相结合。首先对数据列表的条目进行深度优先搜索,找到列表页面,然后对列表页面进行广度优先搜索,找到对应的数据。
具体流程描述如下:
(1)初始化初始URL;
(2)使用深度优先算法查找列表页面;
(3)在列表页面,采用广度优先算法获取所有数据的URL;
(4)根据上步所获取的每一个URL,爬取对应数据的数据,返回(2)。
爬虫系统抓取流程如图4.4所示。
4.2.3文本处理模块设计
文本处理模块,它的功能是从网页提取链接,再将此链接加到还没爬的URL队列。分析此页面中的内容,并将其有用的内容保存起来,例如正文,层叠样式表等有用信息,还有就是分析新闻主题是否为金融新闻的计算。子链接提取信息的步骤和想法是,用已经爬到的网页URL实例化解析器,并且实例化过滤器,给这个页面搞特定的过滤条件,用解析器将此页面中能通过过滤器的信息全部获取,然后获取节点列表,最后遍历节点列表,将节点相应办法获取链接URL把它们都添加进子链接集合里。
第二个功能是解析并获取网页内容,由于本爬虫系统是针对金融新闻网站上的金融新闻信息进行信息获取,因此我们的主要任务是获取相关数据的信息,例如,公司名字,学历要求,薪水等。因此我们的主要任务是获取这些内容,而不会太多涉及到相关度计算。基本步骤是,第一步读取html文件,获取页面编码及string格式文件中的内容,第二部用网页编码实例化html的解析器,对想要获得的内容做相应过滤器,并且用Parser基于Filter对html文件进行处理分析,最后将节点中的文本内容全部提取出来存到数据库就完成了。文本处理模块工作流程如图4.5所示。
4.2.4URL数据去重与优化模块设计
URL去重和优化模块可以分为三大类功能,去重,过滤,和优化,第一块是URL去重功能,爬虫在爬取网页URL的时候,可能会重复访问同一个网页,使得浪费了效率和资源,主要原因是已访问过的URL没有被识别或者没有被记录,URL去重功能是爬虫能够快速有效工作的重要前提。为了区分已访问和未访问的URL,就需要建立两个表,将前者放入已访问表,将后者也就是新提取的URL放入待访问表,将此URL的子链接URL放入未访问表,当要将某个URL放入待爬队列时,需要审查此URL是否在已访问表中,再分配URL。
第二块是URL过滤功能,过滤功能是用来对网页进行过滤,去除掉一些不需要的,以及不符合规定或者其他一些垃圾信息,例如,敏感文字,广告信息等,一般情况下每个网页都有过滤器,根据URL的地址送到过滤器后让它来执行。过滤数据流程如图4.6所示。
第三块是优化功能,优化功能指为了提高爬虫性能所需要的一些辅助性功能,本爬虫系统需要以下几个方面来对程序进行优化:数据查询效率,降低消耗,加快运行。
4.2.5数据存储设计
数据存储模块主要为了将信息保存到数据库中,这些信息要通过信息处理模块处理后发送给它,它将这些信息发送到系统数据库保存,以后使用数据就可以直接从中提取。
写入文件的两种方法如下:
首先打开文件,然后写入文件,一种是file.write(),此方法适用于参数为字符串的情况。还有一种方法是file.writelines()这种方法在参数为序列时候用,要注意这种方法换行要加n这个字符。
数据项要存入数据库就要使用Python的MySQLdb模块,首先要获得数据库连接:
conn=MySQLdb.connect(host=’localhost’,user=’root’,passwd=’520456′,db=’crawlers’,charset=’utf8′);
4.3系统实现
4.3.1数据爬取
数据爬取模块主要是将相关的信息从指定网页给抓取出来。第一步向网站发送请求,等网站回应,回应后就能得到一个信息,那就从这个信息中解析有用的数据就好[16]。新闻爬取界面如图4.7所示。
在编译器中运行代码,让蜘蛛对目标页面网站进行爬取工作,主要运用的python第三方库request来实现,爬取成功结果如4.8图所示。
第5章系统测试
5.1测试原理
在几十年以前,就开始用软件测试去得出经验总结,现在那些得出来的经验原理已经全面的应用在软件行业,在那些被测试的原理中,有基本的六条原理。
1、测试主要用于查找系统中的缺陷,并且在测试中可以找出不明显的缺陷,并解决掉它,但是无论做多少次测试,都不能证明系统已经完美,都可能有测试不出来的缺陷。
2、测试系统时只会有针对性的和抽样测试,不会一直测试。
3、测试赶早不赶晚,尽量在早期就开始对系统进行测试,而且测试目标应明确,这样可以在早期就发现问题,并且能让我们处理起来更轻松。
4、对新系统的多次测试会影响测试结果。
5、如果发现代码有问题,就要在这段代码周围进行仔细观察,因为可能受其影响周围也出现问题。
6、测试了什么最后可能出现的问题也会出现或围绕在它的附件,所以提高效率的办法就是用预测的结果去进行高效的测试。
根据以上原理测试系统,会省时省力,并做出有效判断。
5.2测试方法
本次主要使用黑盒测试法,开发一个功能就会对它进行测试,看有没有问题,没问题就继续开发,出现问题就处理后继续开发,下表就是测试表,如表5.1所示。
5.3测试结果
经过对系统有针对性的测试和抽样测试,虽发现有些小问题,但也得到了有效的解决,目前系统运行正常。不过由于资金不太到位,我的技术也不够精湛,导致系统的一些功能还未能实现,运行起来也不是那么的流畅,当然这些问题以后也会认真去考虑解决的办法的,还是需要慢慢完善。
第6章结论
此次开发的系统是用Python作为主语言开发的,因为我认为Python是目前最好用的计算机语言,本次开发重点使用Python语言中的爬虫技术进行程序的设计与编写,前期也做了充分的准备,进行了可行性分析、需求分析、总体框架的设计和功能详细设计等几个方面后,才开始进行系统的编写,这个系统针对目前越来越火热的金融市场设计的,大大的提高的我对金融的分析能力对python语言的理解能力,并且也让我对系统的设计与开发有了更深入的理解。
在此之前,我对编写系统和python语言的理解只停留在表层,现在也算是可以熟练的使用python爬虫技术了,而且也对这中技术有了自己的理解。我们身处信息化的时代,而且也是计算机专业的学生,更是需要不断的学习新的网络技术,不论以后工作还是生活,对自己都有好处,也随着网络的发展出现了相应的法律,并不意味着有了技术就能在网络为所欲为。很感谢在这次设计中对我帮助的人,这次设计让我对我所学到的知识有了个大概的了解,也是这段时间,让我能更加熟练的使用这几年学过的知识,也会对今后进入公司打下基础,了解做系统的基本框架和步骤。在整个系统的不断完善,直至最后达到自己想要实现的功能,在这个过程中,增强了我的查阅资料的能力,同样也使我的总结能力提升了一个档次,对以前所学的知识又一次加深印象,也对新的各类计算机知识得到的拓展。
在这几个月里,随着我对系统前期的精心设计和后来不断的修改和完善,使得此系统的大部分功能都能够实现,也是由于我技艺不精所以该系统还是存在很多缺陷,目前我的技术还太稚嫩,所以系统还是存在问题的,但是相信以后我的技术慢慢的越来越成熟,就能完善我的系统,达到预期的目标。
参考文献
[1]嵩天,黄天羽,礼欣.面向计算生态的Python语言入门课程教学方案[J].计算机教育,2017(08):7-12.
[2]孟亚茹,姚凯学,安世博.基于Python的网络关键字热度获取工具的研究与实现[J].电子技术与软件工程,2018(17):181-182.
[3]耿大伟.基于Python技术的校园网搜索引擎的设计与实现[D].燕山大学,2015.
[4]李强,白建荣,李振林,张黎明.基于Python的数据批处理技术探讨及实现[J].地理空间信息,2015.
[5]唐琳,董依萌,何天宇.基于Python的网络爬虫技术的关键性问题探索[J].电子世界,2018(14):32-33.
[6]沈经.光缆/互联网/大数据/WWW/IoT的创新过程中美高能合作[J].SAC/TC124,2016.
[7]安子建.基于Requests框架的网络爬虫实现与数据抓取分析[D].吉林大学,2017.
[8]郭二强,李博.大数据环境下基于python的网络爬虫技术[J].计算机产品与流通,2017(12):82.
[9]陆树芬.基于Python对网络爬虫系统的设计与实现[J].电脑编程技巧与维护,2019(02):26-27+51.
[10]黎曦.基于网络爬虫的论坛数据分析系统的设计与实现[D].华中科技大学,2019.
[11]国家互联网信息办公室.《数据安全管理办法(征求意见稿)》[EB/OL].中国网信网,[2019-05-28]http://www.gov.cn/xinwen/2019-05/28/content_5395524.htm.
[12]裘锴.Python语言编程在计算机理论教学上的应用探索[J].纳税,2017.
[13]胡峥辉.基于阿里云的微电网能量监控调度系统[D].华南理工大学,2016.
[14]李逸翔.移动应用网络行为分析技术研究[D].电子科技大学,2020.
[15]朱鲲鹏.基于Web日志挖掘的智能信息检索研究[D].哈尔滨工业大学,2009.
[16]王艳阁.主题微博爬虫的设计与实现[D].中原工学院,2013.
致谢
桃李不言,下自成蹊。幸得导师指点,导师治学严谨,知识渊博。从选题,开题报告,再到设计大纲,正文撰写,都离不开他的指导和帮助。感谢老师对我学习生活上给予了莫大的关怀和照顾。再次向我的老师表示感谢。
1、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“文章版权申述”(推荐),也可以打举报电话:18735597641(电话支持时间:9:00-18:30)。
2、网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
3、本站所有内容均由合作方或网友投稿,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务。
原创文章,作者:1158,如若转载,请注明出处:https://www.447766.cn/chachong/208181.html,