王勝 謝元平
(成都市經(jīng)濟發(fā)展研究院(成都市經(jīng)濟信息中心)信息技術(shù)與應(yīng)用研究所 四川省成都市 610032)
城市對標(biāo)管理是一項系統(tǒng)性工作,涉及城市治理、社會發(fā)展方方面面,通過開展政策文件分析比較是學(xué)習(xí)先進城市經(jīng)驗做法,快速找出自身政策短板的有效途徑[1,2,3,4]。政策性文件是國家以權(quán)威形式發(fā)布的,規(guī)定一定歷史時期內(nèi)目標(biāo)、任務(wù)及具體措施的文件。《中華人民共和國政府信息公開條例》明確指出“行政法規(guī)、規(guī)章和規(guī)范性文件”屬于主動公開的政府信息,當(dāng)前各級政府門戶網(wǎng)站都已按要求開設(shè)“文件”、“規(guī)劃”等欄目提供政策文件、規(guī)劃文本的查詢服務(wù),這為政策性文件的獲取提供了保障及有效途徑。傳統(tǒng)的政策文件收集整理工作主要采取手工方式,效率較低且及時性較差。隨著網(wǎng)絡(luò)爬蟲技術(shù)的發(fā)展,通過互聯(lián)網(wǎng)直接采集各地政府網(wǎng)站政策文件,將極大提高信息搜集效率,并為政策研究提供更高的及時性。Scrapy 框架是一個較為成熟的開源網(wǎng)絡(luò)框架,基于該框架已開展了大量研究工作[5,6,7]以及行業(yè)應(yīng)用。武虹等[8]通過采集互聯(lián)網(wǎng)上國內(nèi)外科技政策文件,提供了全文檢索、統(tǒng)計分析應(yīng)用;李喬宇等[9]開展了農(nóng)業(yè)信息的爬取應(yīng)用。Kettle 是一個開源的ETL 工具,提供了圖形化的用戶頁面,非常適合于開展數(shù)據(jù)清洗、數(shù)據(jù)整合應(yīng)用。許皓皓等[10]利用Kettle 對氣象數(shù)據(jù)ETL 流程進行建模實現(xiàn)了氣象數(shù)據(jù)的實時同步和存儲;陳亞東等[11]開展了蘋果產(chǎn)業(yè)數(shù)據(jù)的整合應(yīng)用;陳健等[12]開展了醫(yī)院數(shù)據(jù)的集成研究;崔記東[13]、程子傲等[14]將Kettle 集成到數(shù)據(jù)整合、數(shù)據(jù)交換平臺中取得了不錯的效果。通過使用開源工具,能夠減少開發(fā)成本,非常適合與本文所關(guān)注的對標(biāo)城市政策文件庫這樣的輕量級應(yīng)用。
本研究基于Scrapy 框架設(shè)計網(wǎng)絡(luò)爬蟲,采集17 個對標(biāo)城市(地區(qū))政府網(wǎng)站下50 多個欄目的政策文件,利用Kettle 設(shè)計開發(fā)ETL 程序,對采集的原始政策文件進行信息結(jié)構(gòu)化處理、去除重復(fù)等數(shù)據(jù)清洗操作,并通過開發(fā)前端查詢、檢索應(yīng)用,形成面向成都市的服務(wù)于研究咨詢行業(yè)的對標(biāo)城市政策文件庫應(yīng)用。
成都是副省級城市、國家中心城市,成都市的對標(biāo)對象為其他國家中心城市及副省級城市。城市對標(biāo)工作不僅僅是比較城市之間的經(jīng)濟指標(biāo)、查找發(fā)展差距,還需要深層次分析背后的發(fā)展規(guī)律。各類政策文件能夠較全面的展示各地在經(jīng)濟發(fā)展、城市管理、社會治理上的經(jīng)驗做法,為更好的開展城市之間政策對比分析,學(xué)習(xí)先進經(jīng)驗做法,有必要建立對標(biāo)城市政策文件庫,服務(wù)于對標(biāo)管理工作。
目前在開展城市之間政策對比分析時,主要采用人工搜索方式,不僅效率低下,而且無法起到政策監(jiān)測目的。隨著網(wǎng)絡(luò)爬蟲技術(shù)的發(fā)展,利用信息技術(shù)從各地政府網(wǎng)站自動采集政策文件成為了可能。同時,Scrapy、Kettle 等開源工具的發(fā)展,也降低了開發(fā)成本,提供了較高的靈活性。
圖1:數(shù)據(jù)獲取及清洗流程圖
圖2:Kettle 中的ETL 過程
圖3:查詢檢索頁面
表1:數(shù)據(jù)源清單
圖4:政策文件頁面
對標(biāo)城市政策文件庫系統(tǒng)通過網(wǎng)絡(luò)爬蟲采集成都市對標(biāo)城市政府網(wǎng)站政策文件,通過對采集的信息進行清洗,形成面向研究咨詢行業(yè)的政策文件查詢、檢索應(yīng)用。系統(tǒng)流程見圖1。
(1)基于Scrapy 的數(shù)據(jù)采集系統(tǒng)。包括信息采集、增量抽取、異常處理、日志記錄、多任務(wù)等功能。Scrapy 是一個開源的網(wǎng)絡(luò)爬蟲框架,本身提供分布式處理、數(shù)據(jù)持久化、高性能下載等眾多功能,通過配合使用phantomjs、webdriver、tesseract、PIL 等其他功能庫,基本上能夠完成所有類型的網(wǎng)站信息采集任務(wù)。
(2)基于Kettle 的ETL 系統(tǒng)。包括數(shù)據(jù)轉(zhuǎn)換、清洗、ETL 任務(wù)調(diào)度等功能。Kettle 是一個開源的ETL 功能,提供圖形化的開發(fā)和運行環(huán)境,內(nèi)置數(shù)據(jù)關(guān)聯(lián)、過濾、排序、數(shù)據(jù)運算等基本功能組件,通過組合應(yīng)用內(nèi)置的功能組件,能很方便的實現(xiàn)各種數(shù)據(jù)清洗操作。
2.1.1 數(shù)據(jù)源分析
從成都市城市對標(biāo)工作的實際需要出發(fā),本文數(shù)據(jù)源主要為其他國家中心城市以及副省級城市政府網(wǎng)站,并增加國務(wù)院、國家發(fā)改委、四川省三個政府網(wǎng)站。為從源頭做好信息過濾、減小整個政策文件庫規(guī)模,通過對每個網(wǎng)站政策文件欄目進行分析,重點排除人事任免、項目批復(fù)類文件,只選取政策法規(guī)、發(fā)展計劃相關(guān)欄目作為每個信息源的具體入口地址。因此整個對標(biāo)城市政策文件庫信息來源為18 個政府網(wǎng)站、超過50 個具體欄目下的所有政策相關(guān)數(shù)據(jù)。數(shù)據(jù)源清單如表1 所示。
2.1.2 基于Scrapy 的爬蟲設(shè)計
整個系統(tǒng)的數(shù)據(jù)采集工作由基于Scrapy 框架開發(fā)的網(wǎng)絡(luò)爬蟲來完成。由于每個城市網(wǎng)站的技術(shù)實現(xiàn)方式、數(shù)據(jù)分類、頁面布局及附件下載方式都不盡相同,需要對每個網(wǎng)站進行具體分析,為每個網(wǎng)站開發(fā)獨立的爬蟲程序。另外為提高每個爬蟲的效率,需要考慮的共性問題還包括:
(1)重復(fù)記錄的處理。通過維護全局URL 表,判斷該頁面是否被爬取過,從而減少網(wǎng)絡(luò)訪問量。
(2)初始化及增量的處理。對于每個網(wǎng)站完成一次性初始化爬取工作,并通過每天增量爬取的方式來維持?jǐn)?shù)據(jù)完整性。
(3)日志及異常處理。為有效運維系統(tǒng),需要做好爬蟲的詳細(xì)日志工作,并對程序異常情況進行捕獲處理。
2.1.3 基于XPath 的網(wǎng)頁信息抽取
政策文件數(shù)據(jù)主要的屬性包括印發(fā)日期、發(fā)文單位、文號、標(biāo)題、發(fā)布日期等。在本文中,采用基于XPath 的定位方式實現(xiàn)對網(wǎng)頁信息的抽取工作。XPath 定位分為絕對路徑和相對路徑兩種,為提高頁面的適應(yīng)性,所有XPath 采用相對路徑方式,選擇相對固定的元素或?qū)傩怨?jié)點作為信息定位節(jié)點。由于網(wǎng)站存在改版、信息發(fā)布不規(guī)范等原因,基于固定XPath 的抽取規(guī)則會出現(xiàn)信息無法定位的問題,引起數(shù)據(jù)質(zhì)量問題,需要通過ETL 程序完成對數(shù)據(jù)的清洗工作。
2.2.1 數(shù)據(jù)分層處理
數(shù)據(jù)存儲選用MySQL 數(shù)據(jù)庫。MySQL 是一個輕量級開源數(shù)據(jù)庫軟件,部署方便,并且MySQL 幾乎擁有了超大型專業(yè)數(shù)據(jù)庫Oracle 提供的大部分功能,能夠承載絕大多數(shù)的應(yīng)用。
在數(shù)據(jù)處理階段,為使數(shù)據(jù)結(jié)構(gòu)清晰、數(shù)據(jù)追蹤準(zhǔn)確、簡化數(shù)據(jù)處理過程,參考數(shù)據(jù)倉庫設(shè)計思想,整個數(shù)據(jù)存儲分為三層:原始數(shù)據(jù)層、數(shù)據(jù)整合層、數(shù)據(jù)應(yīng)用層。原始數(shù)據(jù)層用于完整保存爬蟲獲得的原始數(shù)據(jù),同時設(shè)計了訪問控制機制,過濾已經(jīng)下載過的地址,降低爬蟲工作負(fù)載加快數(shù)據(jù)爬取速度。數(shù)據(jù)處理層用于ETL清洗過程,在數(shù)據(jù)清洗過程中產(chǎn)生的中間數(shù)據(jù)均在處理過程中保持在這一層中。數(shù)據(jù)應(yīng)用層用于最終的應(yīng)用,從最終的應(yīng)用需求出發(fā)設(shè)計和存儲數(shù)據(jù)。
2.2.2 基于Kettle 的ETL 設(shè)計
如圖2 所示,基于Kettle 的ETL 設(shè)計主要包括兩步:首先通過建立獨立的Transformation 模型,實現(xiàn)特定的ETL 功能;其次通過Job 模型將不同的Transformation 模型進行串聯(lián)或并聯(lián),從而實現(xiàn)不同ETL 處理過程的并行及順序處理。在本文中需要開展的數(shù)據(jù)清洗處理主要有三類:
(1)關(guān)鍵信息缺失的處理。通過XPath 方式未能抽取關(guān)鍵信息時,需要通過ETL 方式進行數(shù)據(jù)補充。比如政策文件中的文號信息,可以通過正則表達式“[u4e00-u9fa5]{1,6}(〔|[)[0-9]{4}(〕|])[0-9]{1,4}號”來進行二次定位查找及數(shù)據(jù)填充。
(2)非關(guān)注信息的過濾。雖然在前期我們已通過對網(wǎng)站欄目的選擇進行了初步的過濾,但由于各網(wǎng)站欄目設(shè)置不同,仍然會存在大量需要過濾的信息,主要是人事任免、項目批復(fù)類文件,因此需要通過ETL 程序進行過濾處理。
(3)多源數(shù)據(jù)融合。這里主要是對重復(fù)的數(shù)據(jù)進行去重處理。有些地方網(wǎng)站會直接轉(zhuǎn)載國務(wù)院、國家發(fā)改委文件,因此需要進行去重操作。同時為適應(yīng)爬蟲及ETL 程序重復(fù)運行可能造成的數(shù)據(jù)重復(fù),也需要進行去重操作。
任務(wù)調(diào)度可采用的方式有三種,第一種是直接使用第三方任務(wù)調(diào)度軟件,比如開源調(diào)度工具Quartz,Kettle Manager 等,第二種是使用數(shù)據(jù)清洗工具中的計劃,比如Kettle 中Job 上可設(shè)置的計劃任務(wù),第三種是使用操作系統(tǒng)的計劃任務(wù)工具。本文在Scrapy 框架中已實現(xiàn)對爬蟲的多任務(wù)處理,在Kettle 中已通過Job 方式實現(xiàn)對ETL 過程的執(zhí)行管理,對于調(diào)度要求簡單,綜合考慮最終采用操作系統(tǒng)自帶的計劃任務(wù)工具方式??紤]各地政策文件發(fā)布的時間窗,結(jié)合爬蟲及ETL 過程的運行時間,本文的調(diào)度設(shè)計為每天7:00和12:00 各執(zhí)行一次。
通過開發(fā)前端展示頁面,實現(xiàn)了基于關(guān)鍵詞、地區(qū)、年份的政策文件查詢、檢索應(yīng)用。圖3-圖4 展示了部分應(yīng)用頁面。
對標(biāo)城市政策文件庫通過對17 個城市(地區(qū))政府網(wǎng)站政策文件相關(guān)欄目進行數(shù)據(jù)采集,并通過數(shù)據(jù)清洗,形成查詢、檢索應(yīng)用,截止2019年1月,經(jīng)過清洗有效入庫數(shù)據(jù)48167 條。相關(guān)課題組通過篩選與創(chuàng)新創(chuàng)業(yè)相關(guān)政策文件,開展了雙創(chuàng)政策文件的對比分析研究,為政府提供了決策參考建議。
對標(biāo)城市政策文件庫系統(tǒng)基于Scrapy 框架設(shè)計針對不同政府網(wǎng)站的網(wǎng)絡(luò)爬蟲,利用Kettle 設(shè)計開發(fā)ETL 程序?qū)?shù)據(jù)進行信息結(jié)構(gòu)化、去除重復(fù)等清洗操作,并為用戶提供了查詢、檢索應(yīng)用。系統(tǒng)有效入庫政策文件超過48000 條,為成都市開展城市對標(biāo)工作、城市之間政策對比研究提供了有效的途徑。下一步需要重點考慮網(wǎng)站改版帶來的風(fēng)險,研究適應(yīng)性更強的信息抽取模式及規(guī)則,增強爬蟲程序的錯誤處理機制,同時進一步分析數(shù)據(jù)質(zhì)量提升數(shù)據(jù)清洗能力,為更好的開展對標(biāo)城市政策研究提供支持。