随着大数据浪潮的兴起,数据已经成为审计工作顺利开展不可或缺的必要条件之一。然而,目前仍有许多审计机关面临数据审计监督滞后、数据系统间壁垒森严、数据利用方式单一、数据获取能力不足等问题。如何在审计发展道路上,运用科学技术手段,找出一条符合审计工作现实需要、行之有效的途径,切实贯彻落实习近平总书记关于“审计工作要做好常态化‘经济体检’,不仅要查病,更要‘治已病’‘防未病’”的重要指示精神,成为审计机关迫切需要解决的现实问题。笔者在对大数据条件下最新网络爬虫技术进行梳理总结的基础上,结合会议培训合规性审计实践案例,从网络爬虫的原理、具体应用和实施路径,以及其他应用场景三个方面,提出一套符合当前审计工作需要的数据获取方法。 网络爬虫的基本原理 网络爬虫是指通过一定的信息抓取策略,按照特定的规则,自动搜集、提取并整合网络上高价值信息的自动化程序脚本。如果将网络比作一张大网,那么网络爬虫就是在网上爬行的蜘蛛,此时网上的每一个节点对应一个网页或者信息页面,节点间的连线代表各网页或者信息页面间的链接关系。网络爬虫通过节点与节点间的链接,根据一定的爬行策略,将整个网的内容全部爬取下来,这就是网络爬虫获取数据的基本原理。 根据开发技术的区别,可以将网络爬虫分为两类:第一类是以百度、谷歌等搜索引擎为代表的通用网络爬虫,这类网络爬虫爬取的信息范围广、数量多,没有明确的爬取方向和爬取需求,爬取页面的顺序和价值要求相对较低。另一类网络爬虫则是按照预先设定好的算法策略,有选择地爬取网络页面中与目标需求最为匹配的数据信息的聚焦网络爬虫。 目前,以百度、谷歌等搜索引擎为代表的通用网络爬虫技术已经非常成熟,但缺点也非常明显,那就是无法根据用户的特定需要,快速、精确定位高价值信息。如果说通用网络爬虫是一名全面发展、不偏不倚,在各个领域内均能发挥一定作用的“普通生”,那么聚焦网络爬虫就是专研某一领域,并在该领域不断耕耘,深入探索,从而达到最优的“特长生”。聚焦网络爬虫的实现原理如图1所示。
具体应用及实施路径 以获取北京市政府采购网(http://www.ccgp-beijing.gov.cn/)会议培训定点单位内容为例,通过详解聚焦网络爬虫实时爬取会议培训定点单位最新内容的原理和方法,以点带面提出解决事中审计难以获取结构化数据或数据获取不及时等问题的路径,不断推动审计关口前移,为未来深入开展事中审计监督奠定理论和实践基础。 (一)确定爬取策略 待爬取信息所在目标站点首页页面统一资源定位符(URL)地址为:http://114.255.53.119:82/MEETING_2009/mapsearch/findByTrainFlag.action?pageNo=1,打开站点后,可以直观地看到会议培训定点单位内容等相关信息,其中最需要关注的要素有两项,分别是位于页面顶端的统一资源定位符(URL)地址和页面中的会议培训定点单位具体信息。 由于会议培训定点单位信息内容较多,北京市政府采购网采用了常规的分页显示方法,即将众多单位的全部信息数据,按照每页只显示一定数量信息的方式,分散置入若干网页页面之中。 通过分析各会议培训定点单位信息页面,可以发现不同页面间的切换是通过统一资源定位符(URL)地址的最后一个传递参数pageNo进行切换的,即当定位参数pageNo=1时,URL地址指向的当前页面的显示结果,是全部会议培训定点单位信息中的第一页内容,以此类推,当定位参数pageNo为2、3、4等其他数值时,当前页面显示的内容为对应页面的会议培训定点单位信息。 由此,如果需要获取全部会议培训定点单位信息,仅需将定位参数pageNo作为一个变量传入爬虫程序,通过算数运算使定位参数pageNo每次自行增加1,即可自动获取下一页中会议培训定点单位的信息数据,直至最后一页,最终达成获取全部会议培训定点单位信息数据的目标。 (二)定位关键信息 使用谷歌等浏览器,进入开发者模式下的Network组件,通过相关功能可以记录会议培训定点单位信息网页从内部生成到对外显示的全过程,在记录到的各类网页要素中,排除图片(后缀为.jpg)、层叠样式表(后缀为.CSS)、动画图形交换文件(后缀为.gif)、页面脚本语言文件(后缀为.js)等具有明显特征的无关文件,迅速缩小筛查范围找到网页源代码文件,并查看源代码内容。使用源代码文件中的搜索功能,可以快速定位本次案例中需要获取的会议培训定点单位名称信息。 (三)爬取特定数据 通过搜索网页源代码可以发现,每家会议培训定点单位的名称,以“保利大厦有限公司”为例,在当前URL指定的页面中出现且仅出现了两次,需要提取的会议培训定点单位名称信息在网页其他信息的包裹之中,其中“保利大厦有限公司”第一次出现在〈input〉节点内,第二次出现是在〈a〉节点内。 第一次出现“保利大厦有限公司”的〈input〉节点只有一行代码,第二次出现“保利大厦有限公司”的〈a〉节点,则占据三行代码的位置,且其节点内的要素内容和格式样式更加多样,更容易被聚焦网络爬虫识别。举个例子,就如同在人海中,准确地找到一个穿黑衣服的人很难,但是定位一个身高170cm、体重80kg,穿黑色上衣、蓝色裤子,名字叫blank的人却相对容易一样。因此,笔者选取第二次出现“保利大厦有限公司”〈a〉节点,对其进行特征分析,编写与其特征相匹配的正则表达式:〈a\s.*?blank"〉/r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(.*?)/r/n/t/t\t/t/t/t/t//t\t\t\t\t〈/a〉