互联网金融数据抓取方法研究

计算机工程与设计ComputerEngineeringandDesign兰秋军:互联网金融数据抓取方法研究

2011,Vol.32,No.51829

互联网金融数据抓取方法研究

兰秋军

(湖南大学工商管理学院,湖南长沙410082)

要:介绍了金融数据采集工具软件中用到的数据抓取方法。该方法通过微软公司MSXML组件中的XMLHTTP对象获取网页文本,并将待提取数据文本划分为3个层次:数据块、数据行和数据字段,逐层截取。对每个数据层次给出了7种不同的标识类型,以方便对各层次数据进行标识。为达到灵活和精确提取数据的目的,正则表达式被引入。以新浪网的金融网页为实际案例,阐述了数据抓取过程及结果,并提供了简化的VBA示例程序,结果表明,该方法能有效方便地应用于金融实证研究数据的采集。

关键词:互联网;数据采集;金融;识别标识;正则表达式中图法分类号:TP311.11

文献标识码:A

文章编号:1000-7024(2011)05-1829-04

Researchofcollectingfinancialdatafrominternet

LANQiu-jun

(CollegeofBusinessandAdministration,HunanUniversity,Changsha410082,China)

Abstract:Awebdatagrabbingmethodappliedinasoftwareonfinancialdatacollectingisintroduced.Inthismethod,theXMLHTTPobjectofMicrosoftMSXMLcomponentisusedtoobtainthetextofwebpages.Thetextthatisreadyforextractionaredividedinto3layers:datablock,datalineanddatafield,extractinglayerbylayer.7differentidentificationflagsaresuggestedtoidentifythedatapartstoextractforeachlayer.Inordertoflexiblyandconvenientlyobtaindesireddata,regularexpressionsareapplied.Finally,toverifythemethod,acaseanalysistocollectdatafromfinancialwebpagesofSinacorporationisintroduced,andasimplifiedVBAsourceprogramisprovidedasaninstance.Theresultconfirmitsefficiencyandconvenienceusingittocollectexemplificativedataforfinancialresearch.

Keywords:internet;datacollection;finance;identificationflag;regularexpressions

0引言

无疑是金融实证研究的另一重要数据渠道。如Butler,Leone,Willenborg[2],以及Antweiler与Frank[3]等都利用互联网采集技术获取数据,很好地协助了其实证研究工作。本文基于一互联网数据采集工具的开发,阐述其数据抓取实现技术,并以一具体案例进行分析,提供的VBA实现代码能简单、方便地获取网上金融数据。

做金融实证研究需要采集大量的实际数据,这个过程不易而关键。金融数据库是综合金融理论与计算机技术,将金融以及其它相关数据进行加工处理而成的,能够为金融教学、研究、金融投资等提供数据和相关服务的“数据平台”,高质量数据库可以推进金融理论的创新以及金融市场的规范和发展[1]。如美国标准普尔公司的Compustat、美国芝加哥大学商研院的CRSP,香港大学中国金融研究中心和深圳国泰安公司联合开发的CSMAR,北京大学中国经济研究中心的CCER以及上海Wind资讯公司开发的中国金融数据库等等,都是国际/国内享有盛誉,常用于支撑实证研究的重要数据来源。不过,由于实行收费服务、更新时延以及收录数据范围的有限等,金融数据库的使用也必然受到制约,不一定能符合研究所需,从而极易导致实证研究陷入困境。当今互联网信息高度发达,网上充斥着各种金融信息,且其更新迅速,无需付费,这

1互联网数据采集一般过程

互联网数据采集是指从互联网上有针对性、专业性、精

准性的数据抓取,并按照一定规则和筛选标准进行数据归类,形成数据库文件的一个过程。由于互联网的开放性,使得其上的信息爆炸式地与日俱增,各网站几乎每天都在更新各自的页面。因此互联网数据具有海量、动态性的特点。并且因各站点间的信息和组织不同,互联网实际上形成了一个巨大的异构数据集成环境,各个网页由文本、图片、声音、视频和标记符等各个元素混杂一起,是一种非完全结构

收稿日期:2010-05-25;修订日期:2010-07-26。

基金项目:湖南大学“中央高校基本科研业务费专项”基金项目([1**********]8)。

作者简介:兰秋军(1972-),男,湖南冷水江人,博士,副教授,CCF会员,研究方向为信息管理与数据挖掘、金融预测与决策分析。E-mail:[email protected]

18302011,Vol.32,No.5计算机工程与设计ComputerEngineeringandDesign

3

数据抓取技术

在完成准备后,即可利用有关爬虫软件或动手编程实现数据的自动抓取。其过程主要包括两步:网页读取和数据解析。下面介绍所开发的金融数据采集软件抓取数据所用到的几项基本技术以供参考:(1)网页信息获取

尽管目前网站开发技术很多,造成各网站的网页格式也是五花八门,如常见的有html、xml、asp、php、jsp、clm等等,但无论如何,它们都是通过HTTP协议将数据传输到客户浏览器的。微软提供的XML服务集合中的核心组件MSXML内有个XMLHTTP对象。该对象基于HTTP协议,封装了若干与网站双向信息交流的方法和属性,实现从数据包到Request对象的转换,支持XML、字符串、流、无符号整数数组等多种格式信息[6]。客户端调用XMLHTTP获取网页信息的过程相当简单,只需包括下述几个步骤:①创建XMLHTTP对象;②通过对象的Open方法建立同服务端的连接,指定命令发送方式,网页地址(URL)和请求权限等;③利用Send方法发送指令;④等待并接收服务端返回的处理结果。由于研究所需的金融数据主要是文本数值形式,因此我们主要采用返回字符串结果的re-sponseText方法。但如果有中文文本的话,需使用responsebody方法,返回字节流,再转换成中文格式[7]。

例如,下述为基于VBA(VisualBasicApplications)的中文网页读取函数。它返回指定Html源文件文本。FunctionReadWeb(strURL)

SetobjWeb=CreateObject("Microsoft.XMLHTTP")objWeb.Open"Get",strURL,False,"",""objWeb.Send

arrBytes=CStr(objWeb.responseBody)

strReturn=""'以下将二进制数据流转换为中文文本Fori=1ToLenB(arrBytes)Chr1=AscB(MidB(arrBytes,i,1))IfChr1

strReturn=strReturn&Chr(Chr1)Else

Chr2=AscB(MidB(arrBytes,i+1,1))

strReturn=strReturn&Chr(CLng(Chr1)*&H100+

CInt(Chr2))

i=i+1EndIfNextireturnstrReturnEndFunction

(2)数据层次与识别标识

出于方便,金融研究数据一般以表格形式存储和使用,因此在获取整个网页文本后,我们可按照数据块、数据行和数据字段3个层次对数据进行提取并解析(如图1所示)。即,先从网页文本中将包含所需数据的文本(可能包含标签属性等垃圾文本)整块切割并提取出来,形成数据块;其次,对提取出的数据块,分析其数据行的分隔规律,将各行切割开来;然后对

化或半结构化的数据。因此,对数据项的定位和访问也就不可能像传统关系数据库一样通过规范的查询语句和数据

域名来进行,而需根据网站(网页)的实际组织特点进行,在采集者分析指引下灵活进行

[4-5]

。数据抓取过程一般包括以

下几个步骤:

(1)确定抓取目标网址。先找到含有所需数据的网址,判断数据的可靠性以及抓取的可行性和难度。注意避免那些应用了防采集措施的网站,如:限定IP地址在一定时间内对页面的访问次数、用javascript加密内容页面、只允许用户登陆后才可以浏览、只允许通过本站页面连接查看等。此外,一些以pdf等非文本格式呈现的数据也难以自动抓取。(2)仔细分析页面内容及其组织方式,确定抓取规则。由于网页是半结构化文档,除了数据内容之外,还包括大量格式和其它多媒体信息。抓取前务必了解网页数据的组织特点,确定目标数据项的识别规则。这一般可通过查看源文件(网页浏览时的右键菜单中有该菜单项)进行分析。规则一般包括3个层次,①是网址规则(各网址的命名具有何种规律);②是网页规则(如数据块在网页中被识别的规律);③是数据块/表规则(块/表中行与字段如何区分)。

(3)借助数据抓取软件或编程,依据规则抓取数据。

2互联网金融经济数据采集特点

金融实证研究者最感兴趣的互联网数据一般具有如下

的特点:

(1)数据量大、数据类型多。对于数据量不大且无需重复抓取的数据,一般可通过手工记录和复制粘贴的方式完成,不存在采集问题。但金融实证研究需要的数据量常很大(如经常需要整个市场多年交易数据,甚至高频数据),且其数据发布渠道常常涉及不同机构、不同部门(如可能既包括市场数据,也包括各种宏/微观经济指标数据)。

(2)实时性、准确性高。为了确保实证研究的科学,金融实证研究对数据的准确与可靠性要求比较高。并且金融经济规律常具有一定时效性,为了及时反映市场的状况和经济金融政策的影响,往往需要尽可能包含最新的数据;(3)以文本和数值型数据为主。金融实证研究一般无需图片、视频等多媒体数据。其大量使用的是文本和数值型数据。(4)一般针对权威站点进行采集。为了确保实证研究结论具有说服力,数据采集一般需要选择权威站点进行。如国家有关权威决策与信息发布部门,金融交易所以及国内外知名互联网信息提供商。

(5)抓取目标网页主要集中于两种类型。①对网址固定,但动态实时更新的页面数据进行定期抓取,如雅虎、新浪等网站的股票实时行情数据;②大批量近似网页中具有某些固定特征的数据的抓取。如国家权威机构定期以固定格式发布的统计报告数据等。

这些特点,决定了金融经济数据的抓取更具可行性和必要性。目标网址的相对稳定性,也使其所面临的采集问题比较集中,无需像其它多媒体信息提取那样要考虑各种技术变化因素对采集的影响,从而可以采取更具针对性、更有效率、更适用的数据抓取方案。

兰秋军:互联网金融数据抓取方法研究2011,Vol.32,No.51831

3.48

网页数据块数据行字段

图1数据解析的3个层次

分隔出的各行,寻找其字段分隔规律,分割各个字段。

在分割时,需要采集者对页面文本特征进行判断分析,事先定义各个层次的分割标识。主要有几种标识类型:①Begin-End型,它适于数据文本长度不固定的情形,它截取待识别文本开始标识串(BeginFlag)和结束标识串(EndFlag)之间的文本;②Begin-Length型,适应于数据文本长度固定情形,截取BeginFlag标识之后长度为Length的文本;③End-Length型结,类似于Begin-Length类型,只是截取Endflag标识串之前长度为Length的文本;④Begin型,即截取BeginFlag标识起至末尾的文本;⑤End型,截取待提取文本中从起始到EndFlag标识间的文本;⑥模板型,给定一正则表达式作为模板,提取文本中满足正则式的文本;⑦Split型,以SplitFlag作为分割标识串,对给定的文本块进行分割,该类型只用于行和字段分隔。

(3)正则表达式匹配

对每个层次的文本,根据定义的标识串,对网页文本进行匹配搜索以提取所需数据。匹配搜索过程中,为了尽可能的增强灵活性,采用了正则表达式。所谓正则表达式是指一个用来描述或者匹配一系列符合某个句法规则的字符串[9]。很多文本编辑器或文献检索系统都包含对正则表达式的支持。微软RegExp(Microsoftvbscriptregularexpressions)对象模型,可轻松实现正则表达式的定义和搜索。其基本使用步骤归纳为:①创建RegExp对象;②设置对象有关属性。其中最重要的属性有Pattern,用于指定正则表达式字符串;IgnoreCase,指定匹配时是否区分大小写字母;Global指示搜索整个字符串中还是只匹配第一个;③对搜索目标字符串执行搜索匹配。需要用到其中两个重要方法:Test,执行搜索并返回是否存在匹配串,Execute执行搜索,并返回每个成功匹配结果。

限于篇幅,下面仅给出针对目标网页经精简后的VBA抓取示例程序。读者可将其与前述的ReadWeb函数一起以宏的

形式引入Excel运行(注意需引用RegExp组件库)。

SubGetWebData()

DimarryRow()AsString

strURL="http://vip.stock.finance.sina.com.cn/corp/go.php/

vMS_MarketHistory/stockid/399001/type/S.phtml"

BkBeginFlag="":BkEndFlag=""RwSplitFlag="":ColSplitFlag=""

ChineseReg="[\u4e00-\u9fa5()]{2,8}":digReg="[+-]?\

d+(\.\d+)?"

dateReg="[0-9]{4}-[0-9]{2}-[0-9]{2}"

txtWeb=ReadWeb(strURL)'读取网页文本

pos1=InStr(1,txtWeb,BkBeginFlag):txtBlk=Mid(txtWeb,

pos1)

pos2=InStr(1,txtBlk,BkEndFlag):txtBlk=Mid(txtBlk,

1,pos2)'提取表格块

arryRow=Split(txtBlk,RwSplitFlag)'分割出各行RwNum=UBound(arryRow)'行数

SetRegexp=CreateObject("vbscript.regexp")

图3

示例网页表格的部分源文件文本图2

示例抓取目标网页

提取出具体的数据文本。图3是用记事本查看网页源文件时的部分截图,图中显示了目标表格的表头行(方框标出部分)和第一行数据。观察表头行,其字段值为汉字和括号组成(如“交

)。易量(手)”另外,观察表格中的数据部分,除了日期列外,其它数据字段都是数值。汉字、日期和数值都可通过正则表达

式来提取。提取表头字段的正则表达式为:“[\u4e00-\u9fa5()]{2,8}”,日期正则表达式为:“[0-9]{4}-[0-9]{2}-[0-9]{2}”,数值为:“[+-]?\d+(\.\d+)?”。

4抓取实例

下面给出一实际的数据抓取案例。目标网页是新浪财经

深圳成份指数的历史数据查询页面(网址见示例代码)。具体目标是其中的季度历史交易数据,整个表格可视作一个数据块。图2为其部分网页截图。

分析该网页的源文件(注:可通过浏览器的查看源文件获得),发现表格数据块前存在唯一字符串“”,数据块之后存在唯一字符串“”。因此可以其作为该块的Begin-Flag和EndFlag,通过该两标识获取整个表格数据块。对截取到的表格块中的每行文本,可发现都有唯一的字符串“”,因此我们可以其作为Split型标识,从表格块中分隔各行。观察分隔出的每一行,可发现各字段(列)都可以“”作为Split型标识,因此可用其来分割各个字段。至此,各数据字段的结构位置已经确定。下面即可采用正则式从各个字段块中精确

18322011,Vol.32,No.5

Forj=1To7

'解析标题行

计算机工程与设计ComputerEngineeringandDesign

网页的抓取,达到动态批量获取深沪股市数千只股票的历史交易数据的目的。

Regexp.Pattern=ChineseReg

SetMatches=Regexp.Execute(arryRow(0))Cells(1,j)=Matches.Item(j-1).ValueNextj

Fori=2ToRwNum'解析数据行

Regexp.Pattern=dateReg'parsefirstcolumn(date)txtTmp=arryRow(i-1)

SetMatches=Regexp.Execute(txtTmp)Cells(i,1)=Matches.Item(0).Value

pos=InStr(1,txtTmp,ColSplitFlag)'removedatepart

fromrow

Length=Len(txtTmp)

txtTmp=Mid(txtTmp,pos,Length-pos)Regexp.Pattern=digReg

'parseotherdatacolumns

SetMatches=Regexp.Execute(txtTmp)Forj=2To7

Cells(i,j)=Matches.Item(j-2).ValueNextjNexti

图4展示了上述示例代码抓取数据的部分结果,该结果与网页中显示的数据完全一致,达到精确、迅速抓取数据的目的。若加入网址规则,定期运行,即可实现对新浪网所有类似

5结束语

金融实证研究中的一个关键环节是数据获取。互联网蕴

含的海量数据具有免费、实时等特点,是重要的数据来源渠道。文中展示的数据抓取技术,可有效将互联网大量、分散的信息集中收集以供研究所用。所提供的VBA示例代码基于微软Excel,具有简单、实用并易于推广等特点。尤其是多层次标识定义和正则表达式的结合采用,可使研究者依据其具体需求,方便、灵活而准确地定制抓取方案,使之成为实证研究中数据获取的得力助手。

参考文献:

[1][2]

于丽霞.金融数据库发展与评价[J].西部金融,2009(8):31-32.MartyButler,AndrewJLeone,MichaelWillenborg.Anempiricalanalysisofauditorreportinganditsassociationwithabnormalaccruals[J].JournalofAccountingandEconomics,2004,37(2):139-165.[3]

WernerAntweiler,MurrayZFrank.Isallthattalkjustnoise?theinformationcontentofinternetstockmessageboards[J].JournalofFinance,2004,59(3):1259-1295.[4][5][6][7][8][9]

周立柱,林玲.聚焦爬虫技术研究综述[J].计算机应用,2005,25(9):1965-1989.

刘金红,陆余良.主题网络爬虫研究综述[J].计算机应用研究,2007,24(10):26-29.

MSDN.http://msdn.microsoft.com/en-us/library/ms537505(VS.85).aspx[DB/OL].2010-03-20.

WebNote.http://www.shaoys.com/testart/ShowWebTPL.asp?DocID=Y2004M06D26H16m53s40[DB/OL].2010-07-05.BillJelen,TracySyrstad.Excel2007VBA与宏完全剖析[M].郭兵,译.北京:人民邮电出版社,2008.

BenForta.正则表达式必知必会[M].杨涛,王建桥,杨晓云,译.北京:人民邮电出版社,2007.

图4

数据抓取实验部分结果

(上接第1806页)

[3]

KumarU,SukavanamN.Backsteppingbasedtrajectorytrackingcontrolofafourwheeledmobilerobot[J].InternationalJournalofAdvancedRoboticSystems,2008(5):403-410.[4]

d'Andrea-NovelB,CampionG,BastinG.Controlofnonholono-micwheeledmobilerobotsbystatefeedbacklinearization[J].In-ternationalJournalofRoboticsResearch,1995,14(6):543-559.[5]

JiangXianhua.Predectivefuzzylogiccontrollerfortrajectorytrackingofamobilerobot[C].Espoo,Finland:IEEEMid-SummerWorkshoponSoftComputinginIndustrialApplications,2005.[6]

StaianoAntonino,TagliaferriRoberto,PedryczWitold.Impro-vingRBFnetworksperformanceinregressiontasksbymeansof

[9][8][7]

asupervisedfuzzyclustering[J].NeuralNetworks,2005(2):1-12.LeeJH,LinC,LimH,etal.SlidingmodecontrolfortrajectorytrackingofmobilerobotintheRFIDsensorspace[C].7thAS-IANControlConference,2009:1701-1706.

TarokhM,McDermottGJ.Kinematicsmodelingandanalysesofarticulatedrovers[J].IEEETransactionsonRobotics,2005,21(4):539-553.

ChangY,TanDL,WangHG,etal.Kinematicsanalysisofasix-wheeledmobilerobot[C].ProceedingsoftheIEEE/RSJInterna-tionalConferenceonIntelligentRobotsandSystems.Piscata-way,NJ,USA:IEEE,2006:4169-4174.


© 2024 实用范文网 | 联系我们: webmaster# 6400.net.cn