首页 > 特色专栏 > 审计案例

数字化审计应用|Python爬虫技术在审计外部数据采集中的应用

公开的外部数据具有免费、动态、结构化等特征。审计人员根据审计工作方案和审计目标,有选择性地采集公开的外部数据,可以有效辅助审计工作的开展,帮助拓展审计揭示问题的广度和深度。下载、组织、分析此类数据需要采用专门的信息处理技术。

本文重点介绍Python爬虫技术在审计外部数据采集中的应用场景和应用方法。

一、Python爬虫技术的审计应用场景

Python爬虫技术具有允许公开访问、类库丰富、开发效率高和容易上手等特点,适用于以下几类审计场景。

一是采集地理信息数据,如通过采集相关场所的地理信息,助力审查自然资源审计中非法占地和用水问题;通过采集助残、养老场所地理信息,助力审查社保审计中财政资金使用经济效益和社会效益。

二是采集舆情数据,如通过采集搜索引擎查询信息,助力发现经济责任审计中企业或个人违规违纪线索。

三是采集公开的市场数据,如采集国有企业上市公司的股价交易信息、成交量,重大决策出台对股价波动的影响等数据,帮助审计人员判断是否存在内幕交易等违法情况。

四是采集公开的政府监管数据,如采集处理处罚决定书、政策法规或商业承兑汇票承兑信息等数据,助力解决国有银行审计中的监管套利问题。

二、Python爬虫技术的应用方法

目前,Python爬虫技术的实现采用两种路径,一种是专用模块,如requests模块适用于采集不同格式的网页数据:另一种是专用爬中框架,如Scrapy应用框架适用于提取结构化数据。

下文将以某市属国有物业公司专项审计调查项目和某股份制银行专项审计调查项目为例,介绍使用Python爬虫专用模块和专用爬虫框架采集地理信息数据和公开的政府监管数据的操作步骤。

(一)利用requests模块采集网页数据

在某市属国有物业公司专项审计调查项目中,审计人员重点关注老旧小区改造涉及的土地开发利用问题,其中,了解用地性质是关键环节。审计人员需要采集老旧小区的地理编码,从而掌握相应的用地性质信息。

综合考虑到老旧小区涉及14000多个地址、项目时间紧迫等实际情况,审计组尝试利用百度地图开放平台(以下简称“百度平台”)实现批量采集地理编码。

该平台免费提供将地址转换为地理编码(地理信息)的服务,审计人员可以通过该平台提供的地理编码接口,在Python开发环境下,编制利用requests模块相关函数访问接口和采集接口返回数据等程序,实现批量采集地理编码数据。

1.技术框架

利用requests模块访问百度平台分为搭建Python开发环境、清洗数据、切分数据、提交查询语句和采集地理编码等环节。

运行过程中可能会出现两类问题,一是地理编码精度不高,其成因可能是地址结构不完整、百度平台缺乏某些地址的地理编码(如某小区南侧小楼和北侧停车场等。

这些问题的解决其实是筛选不符合要求的地理编码的过程。可以采取控制地址理解程度数值的方法,筛选出不符合要求的地理编码。

当地址理解程度数值小于90时,地理编码精度较低,审计人员可以向被审计单位重新核实,若核实后还存在问题,则可根据该地址对审计项目影响程度大小进行取舍,或者现场采集该地址的地理编码。

二是地理编码采集效率问题。百度平台采集地理编码存在一定限制,审计人员可以同时注册多个百度开发者,获得更多服务密钥,将数据包拆分到多台电脑上,实现同时采集地理编码。

2.操作步骤

步骤1:申请成为百度开发者,获取服务密钥。采用Visual Studio Code源代码编辑器搭建Python开发环境,同时安装requests等相关库。

步骤2:标准化地址。根据被审计单位提供的物业台账清洗地址,得到标准的结构化地址,保存物业台账。

步骤3:实现爬虫功能。创建Python文件,导入requests和pandas等库,调用 requests模块中get函数,配置相应参数,如网址、服务密钥、返回数据格式等。编写主程序,包括物业台账的读取、多次调用 Python爬虫函数、地理编码精度的识别和地理编码数据文件的保存。

步骤4:拆分物业台账数据。将该数据拆分为6个包,其中包括5个含2500条地址的包和1个含2000多条地址的包。将6个包分发至3台电脑,运行Python爬虫程序,采集地理编码。根据前文所述的技术框架原则,处理地理编码精确度不高的数据,得到优化的地理编码。

3.审计成效

审计人员根据地理编码,最终形成了该老旧小区在不同行政区的规划分区占比可视化图,如图1所示。就老旧小区整治问题,老旧小区整治规划分区数据可以帮助审计人员提出符合市政总体规划、分区规划要求的审计建议,提高审计建议的有效性。

(二)利用Scrapy应用框架采集结构化数据

在某股份制银行专项审计调查项目中,审计人员为揭示房地产企业商业承兑汇票风险积聚问题,需要了解银行以外的商业承兑汇票的出票人类型和规模等信息,难点在于如何采集海量的商业承兑汇票信息。

根据相关要求,商业承兑汇票相关信息在上海票据所以动态网页的形式披露,因此,审计组尝试利用Scrapy应用框架快速搭建爬虫程序,进行信息采集。

1.技术框架

Scrapy应用框架是适用于Python的一个快速、高层次的Web抓取框架,用于抓取 Web站点并从页面中提取结构化数据。利用Scrapy应用框架可以直接创建一个Python项目并继承Scrapy应用框架的六大部件,从而大大提高编制Python爬虫程序的效率。

假设已经搭建好Python开发环境,运用Scrapy应用框架创建Python爬虫程序包括安装Scrapy库、创建Python爬虫程序项目、分析页面、实现Spider爬虫功能、实现爬虫数据保存功能、运行Python爬虫程序采集数据六个步骤。

需要注意的是,利用Scrapy应用框架创建的Python爬虫程序,运行环境不是在源代码编辑器环境下,而应在命令行窗口下执行命令。

2.操作步骤

步骤1:在命令行环境下,安装 Scrapy库。

步骤2:在命令行环境下,运行Scrapy startproject bills命令,创建一个名为bills的爬虫项目。

步骤3:分析页面。通过Chrome浏览器的“开发者工具”,分析页面的HTML代码,确定页面数据结构,包括四个步骤:在Chrome浏览器地址栏输入网址;显示“开发者工具”栏(按F12键);单机左侧显示“开发者工具”栏的元素选择按钮,将鼠标光标移动到商业承兑汇票承兑内容上,对应的HTML代码会被高亮显示;分析页面结构。商业承兑汇票信息包含在一个“data数据项下“records”结构中,“records”结构包括多条商业承兑汇票承兑信息。每条商业承兑汇票承兑信息包括acptName(承兑人)、relDate(披露时点)、 entCode(采集代码)、billNo(票据号)和socCode(社会征信代码)等信息。页面数据结构分析表明,商业承兑汇票信息是一个结构化数据。

步骤4:实现Spider爬虫功能。在生成的bills爬中项目中实现Spider类定义,名称为billsSpider。约定需要采集的初始页面网址为url,通过start requests函数生成请求对象。在parse函数中获取结构化数据bill dict(商业承兑汇票信息),然后对其进行解析。

步骤5:在items.py文件中定义要保存的数据。

步骤6:在命令行下运行scrapy craw bills-o bills.csv命令,把商业承兑汇票信息保存到文件bills.csv中。

3.审计成效

根据采集的商业承兑汇票数据,审计人员发现共有20946家企业披露了商业承

兑汇票信息,其中房地产公司和营业公司分别有3812家和2168家,占全部企业的28.55%,可以看出,房地产企业将部分融资目光投向商业承兑汇票。

结合以上数据分析,审计组建议被审计单位暂停开办房地产企业商业承兑汇票直贴业务,规避商业承兑汇票逾期的风险隐患。(邹远志 


来源:中国审计


您访问的链接即将离开“北京市审计局”门户网站 是否继续?