胡 桃, 項 波, 吳先哲
(重慶市光學機械研究所, 重慶 401123)
資源池是一種資源共享和復用的技術, 將各類科技服務資源引入資源池中,隨需調用、隨取隨用,目的是降低資源獲取成本,提高科技服務資源利用率。在區域科技服務平臺已有基礎上, 打造科技服務資源池可以實現區域內的科技服務資源合理再分配, 降低科技服務資源獲取的成本和難度[1]。
科技服務資源池通過集成大量多源異構科技服務資源,有利于打破資源條塊分割,實現資源的有效配置,是科技服務資源開放共享與高效利用的基礎。因此,科技服務資源池建設是區域科技創新的重要支撐, 推進科技服務資源的開放共享也成為國家創新體系建設的重要內容[2]。
研發設計資源是科技創新鏈的前端, 針對科技服務資源整體龐雜的現狀,為保障服務匹配與利用效率,本文以研發設計為例, 根據從資源描述層次制定的科技服務資源數據規范[2],利用通過Python 語言編制的定向爬取網頁數據的數據采集程序[3],實現資源的定向采集、分析、整合,研究專業科技服務資源池定制的實現方法,面向區域專業科技服務的實際需求,深度挖掘設計師、專業研發設計機構、研發設計工具等研究開發資源,構建區域特色產業科技服務資源池。
數據采集主要運用網絡爬蟲Scrapy 技術,基于Python語言,是一種具有開發速度快,開發便捷和高性能特點的網絡爬蟲技術,見圖1,圖2。

圖1 數據采集原理Fig.1 Data acquisition principle
采集的大部分數據均來自互聯網中的公共信息網站的數據, 其中包括企業數據、榮譽資質、著作權、 專家、 人力資源、組織機構、專利信息、研發設計、軟件工具等內容。 大部分信息公開網為靜態網站,部分為動態網站。靜態網站通過Scrapy框架可以直接進行數據采集。 由于動態網站存在客戶端動態加載頁面的情況, 需要在數據采集框架上進行調整以滿足動態網站的數據采集。 使用的Scrapy 是適用于Python 的一個快速、高層次的屏幕抓取和Web 抓取框架,用于抓取Web 站點并從頁面中提取結構化的數據。Scrapy 用途廣泛,可以用于數據挖掘、監測和自動化測試。

圖2 Scrapy 爬蟲的基本架構Fig.2 Basic structure of Scrapy crawler
數據采集程序主要對各行業網站、招聘信息網站、企業信息查詢網站、政府公示網站內的川渝兩地汽車、工程機械與新一代電子信息等行業的企業信息進行采集并存儲于數據庫內,便于后期的數據預處理,見圖3。
企業信息: 查找天眼查網站中的企業基本信息的經營范圍中是否有“研發、設計”等關鍵字。
知識產權: 查找國家知識產權局專利檢索和分析平臺中企業申請的專利中是否有“研發、設計”等關鍵字。
招聘信息:查找招聘網站企業發布的職位是否有“研發、設計”等關鍵字。
其他信息:政府官網上的公示信息中是否有“研發、設計”等關鍵字;招投標公開信息中是否有“研發、設計”等關鍵字。

圖3 數據采集渠道Fig.3 Data acquisition sources
科技服務資源池要達到關聯、集成與共享,需要對科技及其服務資源進行數據規范方面的考慮和設計。 將科技服務資源池中的實體轉化為數據規范中的“類”進行處理, 通過對類的描述和定義實現對科技服務資源池資源實體的規范[2], 見圖4。

圖4 數據采集規范Fig.4 Data acquisition specification
網站方為了避免數據被爬取, 增加了各種各樣的反爬蟲措施,如驗證碼(英文數字、中文、順序點擊成語詞語圖片、滑動拼圖、數學計算題等)、用戶行為分析、IP 限制、User-Agent+Referer 檢測、賬號與Cookies、JavaScript 動態渲染、異步加載、字符集替換、Font-Face 拼湊、Background拼湊、字符穿插等,反爬蟲機制給數據采集獲取帶來了困難。如果想要繼續從網站爬取數據就必須繞過這些措施。因此,本文根據目前主流的反爬蟲措施研究了應對策略。
(1) 英文數字驗證的應對策略。 通過深度學習CNN(卷積神經網絡)的算法來訓練生成的驗證碼,形成訓練驗證碼識別庫,見圖5。生成驗證碼采用python 的captcha驗證碼生成工具, 編輯配置生成代碼模仿英文數字驗證碼格式, 生成10W+級別的驗證碼再結合Google tensorflow 訓練生成的驗證碼得到驗證碼識別訓練集。 之后在爬蟲代碼中模擬驗證碼輸入, 調用訓練集獲取驗證碼文本,從而達到通過驗證的目的。

圖5 CNN 框架Fig.5 CNN framework
(2)滑塊拼圖驗證的應對策略。在未按下鼠標左鍵時顯示為拼圖完成后的圖片,按下鼠標時才顯示拼圖缺口,同時還混入了混淆爬蟲的假拼圖接口(右上角陰影部分,不定時出現)(如圖6),此問題可根據色塊深度值判斷來解決。 根據分析HTML 代碼拼圖圖片也是由后臺切分成若干塊再通過前端拼接而成, 因此解決此類驗證碼需如下幾步:①將背景圖片反向解析并組合成一張圖片,同理組合含有缺口的圖片; ②通過對完整圖片和缺口圖片進行對比, 找到第一個差異的像素點的x 坐標; ③再通過selenium 模擬用戶拖動操作將鼠標從搖桿位置拖動到拼圖缺口位置; ④使用selenium 模擬時采用勻變速運動公式vt=v0+at 來模擬真人操作。
(3)順序點擊驗證的應對策略。 此類驗證碼主要通過OCR 識別文本,然后通過語義分析,然后模擬鼠標順序點擊進行驗證,步驟如下:①識別圖片中的中文文字,獲取文字的坐標位置;②獲取識別的中文文字,通過OCR 獲得文本;③語義分析組合正確的文本順序;④根據組合的正確詞語、文字坐標,依次模擬鼠標左鍵單擊完成驗證。

圖6 滑塊拼圖驗證Fig.6 Verification of slider jigsaw puzzle

圖7 順序點擊驗證Fig.7 Click Validation in order
(4)其他反爬驗證的應對策略。
多個賬號動態切換:User-Agent 檢測、賬號與Cookies檢測可通過Scrapy 設置多個用戶參數動態切換來解決被BAN 的問題。
Splash Javascript 渲染服務:JavaScript 動態渲 染、異步加載采用Splash Javascript 渲染服務來解決, 通過Splash 服務來渲染獲取實際數據。
將由各網站采集到的企業信息進行統一的去除重復數據、標注異常數據,針對采集時出現的異常數據進行匹配、插補、去除等操作。 并對數據進行統一的數據集成和數據轉換,為后續的數據分析和處理做準備。通過分析檢測原始數據庫中的企業是否存續,標記已被吊銷、注銷執照、信息異常的企業,去除區域內科技服務資源;通過將分析、處理、篩選后的信息數據按照區域、行業、性質、資訊等多維度形成企業信息庫。
(1)數據清洗:重復、近似數據處理。由Scrapy 獲取的原始數據存儲在數據庫中, 再對scrapy_company_basic_info_tianyancha、scrapy_recruitment_51job、scrapy_recruitment_zhaopin 等表根據企業名稱、 企業唯一標識碼(如社會信用代碼) 等維度去除重復或相似度較高的數據,保證數據唯一性。
(2)數據集成。由于數據源分散的特殊性,確認企業信息后,開始補充企業產品、企業服務、企業資質證明等維度的數據(包括信用中國、工程科技知中心、認監委、國家知識產權局等)。數據屬性值的沖突檢測,不同的數據源在一個字段屬性的定義上也許一樣,但實際數據的值并非同一類型,需要檢查連接集成時的字段類型,同時也需要檢查定義相同的字段屬性避免重復。 通過企業唯一的uuid 主鍵關聯企業相關信息表的數據; 在關聯時進行人工選擇,防止出現冗余字段,避免出現字段冗余問題;檢查連接集成時的字段類型,檢查定義相同的字段屬性避免重復。
(3)數據清洗評估。數據質量評估至少應該包含以下兩方面的基本評估指標:數據對用戶必須是可信的。可信性包括精確性、完整性、一致性、有效性、唯一性等指標。
(4)數據分析。利用采集且清洗后的分析數據進行數據分析, 對數據在構成、比較、趨勢、分布和聯系各方面進行數據分析。 數據表現方面可采用不同的統計圖,如(堆疊)條圖、(堆疊)柱圖、線圖、餅圖、氣泡圖、面積圖、漏斗圖、地圖、散點圖以及數據表格的方式來進行表現。

圖8 數據分析系統Fig.8 Data analysis system
在構成方面關注每個部分的百分比; 在比較上通過大于、小于等關系運算分析可度量的數據;通過對時間日期的角度對數據的趨勢變化,如每周、每月、每年等的變化情況; 通過結合地圖的數據分析來表現出數據在分布上的各種結論;查看不同變量之間的聯系關系,比如企業的注冊資本是否和企業的產品有何種關系。
(1)資源池總體架構設計。 平臺基礎Web 框架采用Spring Boot,將現有的科技服務資源,包括:技術資源、專家資源和人才資源、專利資源等整合共享,通過構建資源池系統,包括用戶層、業務層、數據層、基礎設施層。為了保證平臺的可擴展性和柔性,平臺的整體設計將采取分層設計思想,每一層都將實現其特有功能[4]。資源池總體設計結構如圖9 所示。
(2)功能實現。資源池系統是應用于汽車、 工程機械、集成電路、物聯網等相關產業研發設計等專業領域的科技服務資源 (服務機構、服務項目、 軟件工具)的網絡化聚合領域,具有資源池管理(資源錄入、資源更新、數據模型)、后臺管理等功能,見圖10。
(3)統一檢索。 統一檢索為主題詞檢索,統一對各研發設計各專業資源池分布式檢索結果進行統一排序顯示;涉及到科技服務機構的搜索結果排序 (是否為重點機構、注冊資本、人員規模、注冊時間)。檢索結果顯示頁面中,有對于資源的二次檢索操作(按照專業類型、行業類型、地區等進行二次檢索),其操作主頁面如圖11、12 所示。

圖9 資源池架構設計Fig.9 Resource pool architecture design

圖10 資源池系統Fig.10 Resource pool system

圖11 統一檢索界面Fig.11 Unified search interface

圖12 檢索結果頁面Fig.12 Retrieves the results page
(4)可視化展示。 企業名錄的可視化展示將嵌套進企業信息查詢系統,主要實現在對企業信息查詢時,對被搜索企業信息進行可視化圖表的呈現, 見圖13。 主要呈現方面有:區域行業發展規模分布,企業信用信息監測圖,企業地址分布地圖等。 同時數據可以通過各種圖表(數據表格、柱狀圖、圓餅圖等)以更多的方式進行展現。以直觀、多維度的方式將繁多企業信息直觀的進行展現。

圖13 可視化展示Fig.13 Visual presentation
(5)研發設計資源池系統數據體量,見表1。

表1 當前資源池數據條目Tab.1 The current resource pool data entry
本文通過區域特色科技服務資源池的開發與構建,探索科技服務資源的進一步整合和集聚, 使分散在各個區域的科技服務“資源碎片”形成科技服務“資源池”,提升科技服務資源的使用效率,激發科技資源的服務效能,促進區域服務能力提升以及服務形式多樣化發展。