运用Python爬虫技术批量采集国有建设用地出让信息——以某乡镇领导干部经济责任审计项目为例

日期:2025-03-20 09:42:13 来源:​市审计局 浏览量:​
分享:
     

朗读

  精准的数据分析结果可以为审计人员提示审计重点,明确延伸审计的方向,验证审计思路的准确性,最终形成对事项全面客观的认识和审计评价。审计项目资料往往涉及大量的数据和信息,这些信息可能公开在政务服务网络平台,人工获取批量数据显然会大幅延长现场审计时间。本文以A乡镇领导干部经济责任审计项目为例,介绍Python爬虫技术在采集网页信息中的应用,以直观呈现国有建设用地出让情况,为下一步关联比对分析夯实基础。

  一、审计背景

  根据审计实施方案,审计人员重点关注涉及该乡镇国有建设用地出让信息,从而分析该乡镇领导干部对县委、县政府部署的重大项目落实情况。该乡镇国有建设用地出让信息集中分布在省政务服务网,较为杂乱,若通过人工逐条点击网页链接查看并整理有效信息,大概需要花费一周时间。因此,审计人员利用Python的requests库,对该乡镇国有建设用地出让信息进行爬取,仅用半天时间便完成信息采集。

  二、审计思路和方法

  利用requests库访问省政务服务网主要分为搭建Python开发环境、分析页面、实现爬虫功能、保存网页数据等环节。运行过程中可能会出现两类问题。一是爬取信息失败。原因是一些网站会检测HTTP请求头,识别出非真实用户访问从而拒绝。为规避这种限制,审计人员在请求头中附带User-Agent头部信息,用来模拟真实用户的访问行为。二是爬取信息不全。原因是未事先做好页面分析,在没有判断页面是静态还是动态的情况下,采取不恰当的爬虫方法,导致请求网站地址、请求参数未涉及关键信息的值。这种情况下,需要进行网站页面分析,找出关键信息的网站地址和请求参数。

  选择爬虫方法时,审计人员应先对网页进行初步判断。通过点击“下一页”刷新页面,若数据一次性全部更新,则采用静态页面爬虫方法;若只更新部分信息,则采用动态页面爬虫方法。

  (一)Python静态网页爬虫技术操作步骤

  步骤1:搭建Python开发环境,同时安装requests、beautifulsoup4、pandas和re等相关库。

  步骤2:分析页面。通过Edge浏览器的“开发者工具”,分析页面的HTML代码,确定页面数据结构,包括三个步骤:在Edge浏览器地址栏输入网址;将鼠标光标移动到土地出让信息上,右键点击“检查”选项,跳转至土地出让信息所对应HTML代码;分析页面数据结构。数据项结构下的多条土地出让信息包括出让公告链接、地块出让公告标题、公告日期等。页面数据结构分析表明,土地出让信息是一个结构化数据。

  步骤3:实现爬虫功能。创建Python文件,导入requests和pandas等库,将所需采集的网址输入requests库的get函数,配置相应参数,得到指定网页的HTML内容。利用BeautifulSoup函数,对HTML内容进行解析,将复杂的HTML代码转化为Python对象。根据步骤2分析的页面数据结构,通过re库的findall函数构造正则表达式查询Python对象,得到对应的出让公告链接、地块出让公告标题、公告日期。

  步骤4:保存数据。首先,通过爬虫遍历省政务服务网被审计乡镇所在县近3年出让的国有建设用地信息,遍历过程中采用find函数判断土地出让标题中是否涉及A乡镇,若涉及则将出让公告链接、地块出让公告标题、公告日期保存至列表变量data中。其次,利用pandas库的DataFrame函数,将data转为DataFrame变量,并加上“出让公告链接”“地块出让公告标题”等列名。最后,利用该库的to_excel函数,将其转为Excel文件。

  通过上述步骤,审计人员发现通过静态网页爬虫方式仅出现少数几条涉及该乡镇的国有建设用地出让信息,原因在于省政府网站信息搜索一次只显示3页,每页30条信息,如果需要查看第四页信息便会重新刷新加载。因此审计人员利用requests库进行动态网页爬虫功能,找到真正提供数据的统一资源定位符(Uniform Resource Locator;URL),从而获得完整的数据信息。

  (二)Python动态网页爬虫技术操作步骤

  步骤1:重新分析页面。利用Edge浏览器的“开发者工具”对网站进行分析,获取刷新后的数据,并且通过网络选项卡“Fetch/XHR”筛选功能检测动态页面加载返回的数据是否准确。分析数据结构,发现数据包含在一个“recordset”数据项下的“record”结构中,每个“record”都包含出让公告链接、地块出让公告标题、公告日期。

  步骤2:确定网站地址、请求参数。切换至标头栏,找到动态加载数据的请求URL、请求头和请求方法;切换至负载栏,确定所需构造的请求参数。

  通过上述步骤,审计人员取得所需的URL和相关请求数据,之后需在原先静态Python主程序中替换相关数据,便可实现动态爬虫功能,找到涉及A乡镇的所有出让地块信息。值得注意的是,网页出让信息仅包括具体网页链接和出让地块标题,审计人员须进入具体地块出让公告链接,爬取出让面积、起拍价等关键信息补全数据。具体操作如下:采用pandas的read_excel函数读取上述步骤保存的土地出让公告excel文件,遍历A乡镇所有土地出让公告;使用pandas库的DataFrame函数,创建一个名称为df的表格数据变量,采用pandas的read_html函数抓取网页表格数据,将原始Excel文件中网页链接、公告时间和抓取网页表格中涉及出让面积、起拍价等信息利用concat函数拼接保存至df变量中;采用pandas的to_excel函数,将df变量保存为Excel文件。

  三、审计成效

  通过Python爬虫技术,审计组整理出涉及该乡镇2020至2022年出让国有建设用地41个地块,通过比对地块面积差异,发现2021年度出让地块面积占3年的80%,其中某地块占2021年出让地块面积的90%。基于此,审计组锁定2021年度该地块涉及的县级重点项目,发现该地块利用率低、重点项目推进慢、乡镇领导干部未完成重点项目任务等问题。

(磐安县局 车潇、余仁杰)