正则表达式在数据抓取中的应用研究
我要投稿 论文查重 来源:学报编辑部 时间:2017-08-03 浏览: 次
【字体:
摘  要:在分析网站结构的基础上,采用Python语言,设计正则表达式,分析获取网站具体数据页面的链接,进而对其中的资源进行数据抓取。正则表达式能有效地抓取需要的数据,是大数据采集的一种较好的解决方案。
关 键 词: Python;正则表达式;数据抓取
作  者:陈增鑫 欧阳林艳*
单  位:阳光学院空间数据挖掘研究所
正  文:基金项目:国家级大学生创新创业训练项目(201635108003);福建省省教育厅科研项目(JAT160624)
 
Research on the Application of Regular Expression in DdataGrabbing

Chen Zeng-xin,Ouyang Lin-yan,Gong Si-si,Yang Yu-bin
(Yango College Spatial Data Mining Institute,Fujian,Fuzhou,350015)
 
Key words:Python;Regular Expression;Data grabbing
文献标志码:A     中图分类号:TP391
0 引言
随着Internet的快速发展和普及,人们习惯于通过各种终端从互联网上获取信息。由于互联网上杂乱分布的大量数据信息通常以文本数据的形式存在于各网站中,使得数据的抓取在数据挖掘等领域成为焦点。采用Python语言,将正则表达式应用在数据抓取中,将抓取到的数据存储在数据库中得到有效的查询和分析。可以有效地将需要的信息抓取出来,用于对数据的进一步分析。
1 正则表达式
正则表达式是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。正则表达式匹配的一种经典方法是创建一个确定性的有限自动机(DFA),通过它来验证输入信息是否匹配目标信息。[1]很多情况下,正则表达式通常被用来检索和替换一些符合某种固定格式表达的文本。如“\”是指将下一个字符标记符、或一个向后引用、或一个八进制转义符;“$”是指匹配输入字符串的结束位置等。
2 Python
Python是一种动态解释型的编程语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。[2]Python语言简洁、功能强大、简单易学,并且能在多种操作系统、多种开发平台上应用。在Python中内置了一个re模块,该模块支持正则表达式,可以进行文本的匹配或替换。
3 JSON数据
JSON(JavaSript Object Notation)是一种轻量级的、比表格型文本格式灵活的数据格式[3]。JSON已经成为通过HTTP请求在Web浏览器和其他应用程序之间发送数据的标准格式之一。JSON的数据格式是“项/值”对,项与值之间用冒号“:”分隔开来。例如:{“name”:”Wes”,”age”:16,”pet”:null}
这种数据可以很方便的实现数据之间的传递,因此在数据抓取时可以轻松地从已知结构的网页中将数据获取过来。
4 正则表达式在数据抓取中的应用
要实现网页数据的抓取,首先必须观察目标网站的网页结构,根据目标网页的结构设计合适的正则表达式来抓取动态数据以及静态数据。
4.1 动态信息获取
通常情况下我们可以直接从网页的源码中提取到一些信息,而有些信息只能采取动态的方式得到。如要抓取某个网站中的地域信息,其地域地图中的每个地域的信息是通过动态加载的,如果采取获取网页源码的方式提取出所有链接的话就可能提取不到所有的链接信息,我们可以另辟蹊径直接从API接口中获取源数据,而且 Google Chrome浏览器的开发者工具可以观察到网络中的每一次交互,在这些交互中就隐藏着服务端的API地址,根据观察到的请求链接信息就能解读服务端的开发规范,进而得到我们所需要的数据,通常以JSON数据返回。
4.2 正则表达式的应用
在提取静态网页数据时可以通过正则表达式来设计并提取你所需要的信息。如:抚远旅游信息网页,分析其网页结构后得知,所需要的链接信息存放在/html/body/div[7]/div/div/ul节点下的li节点,其网页部分源码如下:
<li class="on"><a title="抚远口岸旅游必知" href=" /fuyuankouan/"><span>必知</span></a></li>
<li class=""><a title="抚远口岸旅游游记" href=" /fuyuankouan/lvyouyouji/"><span>游记</span></a></li>
根据观察到的网页结构信息可设计出正则表达式:
'<li class=".*?"><a.*?><span>.*?</span></a></li>'
通过这个表达式可以获得:“抚远口岸旅游必知”、“抚远口岸旅游游记”等的链接。提取其中的链接后,通过分析,得到如下正则表达式:
'http://[a-zA-Z0-9./]+'
其中,[]指定了一个匹配范围,在这个范围里我们可以匹配{a~z,A~Z,0~9,.,/} 这些字符,+表明了匹配一次或多次。
同样的道理,进而可以提取其页面数据,正则表达式设计如下:
’<p>.*?<a href=.*?>[详情]</a></p>’
这样可以得到满足条件的p节点内容,随后再提取其中的真实链接url:'http://[a-zA-Z0-9./]+'。从而将具体信息提取出来。
4 结语
正则表达式能够匹配字符串中满足的条件的部分,如何设计正则表达式是其中最重要的环节。在数据抓取过程中,为了抓取网页中最底层的数据,就必须进行层层推进,先进行网页结构分析,再设计正则表达式提取相关信息的链接,进而抓取链接下的具体数据,从而获得最终数据。在整个数据的抓取过程中,正则表达式起着至关重要的作用。
参考文献:
[1]黄昆,张大方,谢高岗,等.一种面向深度数据包检测的紧凑型正则表达式匹配算法[J].中国科学:信息科学,2010,40(2):356-370
[2] 张志强,赵越.零基础学Python[M].北京:机械工业出版社,2015.
[3] Wes McKinney.利用Python进行数据分析[M].北京:机械工业出版社,2013.
 
 

【欢迎投稿:[email protected]】 【论文检测】 【返回分分pk10官网】 【打印本页】 【关闭窗口
分分pk10官网北京赛车pk拾开奖记录 甘肃快3 欢乐棋牌下载 欢乐棋牌 甘肃快3走势图 欢乐棋牌 甘肃快3 北京赛车pk拾开奖记录 欢乐棋牌 北京赛车pk拾开奖