胡 桃, 項(xiàng) 波, 吳先哲
(重慶市光學(xué)機(jī)械研究所, 重慶 401123)
資源池是一種資源共享和復(fù)用的技術(shù), 將各類科技服務(wù)資源引入資源池中,隨需調(diào)用、隨取隨用,目的是降低資源獲取成本,提高科技服務(wù)資源利用率。在區(qū)域科技服務(wù)平臺已有基礎(chǔ)上, 打造科技服務(wù)資源池可以實(shí)現(xiàn)區(qū)域內(nèi)的科技服務(wù)資源合理再分配, 降低科技服務(wù)資源獲取的成本和難度[1]。
科技服務(wù)資源池通過集成大量多源異構(gòu)科技服務(wù)資源,有利于打破資源條塊分割,實(shí)現(xiàn)資源的有效配置,是科技服務(wù)資源開放共享與高效利用的基礎(chǔ)。因此,科技服務(wù)資源池建設(shè)是區(qū)域科技創(chuàng)新的重要支撐, 推進(jìn)科技服務(wù)資源的開放共享也成為國家創(chuàng)新體系建設(shè)的重要內(nèi)容[2]。
研發(fā)設(shè)計(jì)資源是科技創(chuàng)新鏈的前端, 針對科技服務(wù)資源整體龐雜的現(xiàn)狀,為保障服務(wù)匹配與利用效率,本文以研發(fā)設(shè)計(jì)為例, 根據(jù)從資源描述層次制定的科技服務(wù)資源數(shù)據(jù)規(guī)范[2],利用通過Python 語言編制的定向爬取網(wǎng)頁數(shù)據(jù)的數(shù)據(jù)采集程序[3],實(shí)現(xiàn)資源的定向采集、分析、整合,研究專業(yè)科技服務(wù)資源池定制的實(shí)現(xiàn)方法,面向區(qū)域?qū)I(yè)科技服務(wù)的實(shí)際需求,深度挖掘設(shè)計(jì)師、專業(yè)研發(fā)設(shè)計(jì)機(jī)構(gòu)、研發(fā)設(shè)計(jì)工具等研究開發(fā)資源,構(gòu)建區(qū)域特色產(chǎn)業(yè)科技服務(wù)資源池。
數(shù)據(jù)采集主要運(yùn)用網(wǎng)絡(luò)爬蟲Scrapy 技術(shù),基于Python語言,是一種具有開發(fā)速度快,開發(fā)便捷和高性能特點(diǎn)的網(wǎng)絡(luò)爬蟲技術(shù),見圖1,圖2。
圖1 數(shù)據(jù)采集原理Fig.1 Data acquisition principle
采集的大部分?jǐn)?shù)據(jù)均來自互聯(lián)網(wǎng)中的公共信息網(wǎng)站的數(shù)據(jù), 其中包括企業(yè)數(shù)據(jù)、榮譽(yù)資質(zhì)、著作權(quán)、 專家、 人力資源、組織機(jī)構(gòu)、專利信息、研發(fā)設(shè)計(jì)、軟件工具等內(nèi)容。 大部分信息公開網(wǎng)為靜態(tài)網(wǎng)站,部分為動(dòng)態(tài)網(wǎng)站。靜態(tài)網(wǎng)站通過Scrapy框架可以直接進(jìn)行數(shù)據(jù)采集。 由于動(dòng)態(tài)網(wǎng)站存在客戶端動(dòng)態(tài)加載頁面的情況, 需要在數(shù)據(jù)采集框架上進(jìn)行調(diào)整以滿足動(dòng)態(tài)網(wǎng)站的數(shù)據(jù)采集。 使用的Scrapy 是適用于Python 的一個(gè)快速、高層次的屏幕抓取和Web 抓取框架,用于抓取Web 站點(diǎn)并從頁面中提取結(jié)構(gòu)化的數(shù)據(jù)。Scrapy 用途廣泛,可以用于數(shù)據(jù)挖掘、監(jiān)測和自動(dòng)化測試。
圖2 Scrapy 爬蟲的基本架構(gòu)Fig.2 Basic structure of Scrapy crawler
數(shù)據(jù)采集程序主要對各行業(yè)網(wǎng)站、招聘信息網(wǎng)站、企業(yè)信息查詢網(wǎng)站、政府公示網(wǎng)站內(nèi)的川渝兩地汽車、工程機(jī)械與新一代電子信息等行業(yè)的企業(yè)信息進(jìn)行采集并存儲于數(shù)據(jù)庫內(nèi),便于后期的數(shù)據(jù)預(yù)處理,見圖3。
企業(yè)信息: 查找天眼查網(wǎng)站中的企業(yè)基本信息的經(jīng)營范圍中是否有“研發(fā)、設(shè)計(jì)”等關(guān)鍵字。
知識產(chǎn)權(quán): 查找國家知識產(chǎn)權(quán)局專利檢索和分析平臺中企業(yè)申請的專利中是否有“研發(fā)、設(shè)計(jì)”等關(guān)鍵字。
招聘信息:查找招聘網(wǎng)站企業(yè)發(fā)布的職位是否有“研發(fā)、設(shè)計(jì)”等關(guān)鍵字。
其他信息:政府官網(wǎng)上的公示信息中是否有“研發(fā)、設(shè)計(jì)”等關(guān)鍵字;招投標(biāo)公開信息中是否有“研發(fā)、設(shè)計(jì)”等關(guān)鍵字。
圖3 數(shù)據(jù)采集渠道Fig.3 Data acquisition sources
科技服務(wù)資源池要達(dá)到關(guān)聯(lián)、集成與共享,需要對科技及其服務(wù)資源進(jìn)行數(shù)據(jù)規(guī)范方面的考慮和設(shè)計(jì)。 將科技服務(wù)資源池中的實(shí)體轉(zhuǎn)化為數(shù)據(jù)規(guī)范中的“類”進(jìn)行處理, 通過對類的描述和定義實(shí)現(xiàn)對科技服務(wù)資源池資源實(shí)體的規(guī)范[2], 見圖4。
圖4 數(shù)據(jù)采集規(guī)范Fig.4 Data acquisition specification
網(wǎng)站方為了避免數(shù)據(jù)被爬取, 增加了各種各樣的反爬蟲措施,如驗(yàn)證碼(英文數(shù)字、中文、順序點(diǎn)擊成語詞語圖片、滑動(dòng)拼圖、數(shù)學(xué)計(jì)算題等)、用戶行為分析、IP 限制、User-Agent+Referer 檢測、賬號與Cookies、JavaScript 動(dòng)態(tài)渲染、異步加載、字符集替換、Font-Face 拼湊、Background拼湊、字符穿插等,反爬蟲機(jī)制給數(shù)據(jù)采集獲取帶來了困難。如果想要繼續(xù)從網(wǎng)站爬取數(shù)據(jù)就必須繞過這些措施。因此,本文根據(jù)目前主流的反爬蟲措施研究了應(yīng)對策略。
(1) 英文數(shù)字驗(yàn)證的應(yīng)對策略。 通過深度學(xué)習(xí)CNN(卷積神經(jīng)網(wǎng)絡(luò))的算法來訓(xùn)練生成的驗(yàn)證碼,形成訓(xùn)練驗(yàn)證碼識別庫,見圖5。生成驗(yàn)證碼采用python 的captcha驗(yàn)證碼生成工具, 編輯配置生成代碼模仿英文數(shù)字驗(yàn)證碼格式, 生成10W+級別的驗(yàn)證碼再結(jié)合Google tensorflow 訓(xùn)練生成的驗(yàn)證碼得到驗(yàn)證碼識別訓(xùn)練集。 之后在爬蟲代碼中模擬驗(yàn)證碼輸入, 調(diào)用訓(xùn)練集獲取驗(yàn)證碼文本,從而達(dá)到通過驗(yàn)證的目的。
圖5 CNN 框架Fig.5 CNN framework
(2)滑塊拼圖驗(yàn)證的應(yīng)對策略。在未按下鼠標(biāo)左鍵時(shí)顯示為拼圖完成后的圖片,按下鼠標(biāo)時(shí)才顯示拼圖缺口,同時(shí)還混入了混淆爬蟲的假拼圖接口(右上角陰影部分,不定時(shí)出現(xiàn))(如圖6),此問題可根據(jù)色塊深度值判斷來解決。 根據(jù)分析HTML 代碼拼圖圖片也是由后臺切分成若干塊再通過前端拼接而成, 因此解決此類驗(yàn)證碼需如下幾步:①將背景圖片反向解析并組合成一張圖片,同理組合含有缺口的圖片; ②通過對完整圖片和缺口圖片進(jìn)行對比, 找到第一個(gè)差異的像素點(diǎn)的x 坐標(biāo); ③再通過selenium 模擬用戶拖動(dòng)操作將鼠標(biāo)從搖桿位置拖動(dòng)到拼圖缺口位置; ④使用selenium 模擬時(shí)采用勻變速運(yùn)動(dòng)公式vt=v0+at 來模擬真人操作。
(3)順序點(diǎn)擊驗(yàn)證的應(yīng)對策略。 此類驗(yàn)證碼主要通過OCR 識別文本,然后通過語義分析,然后模擬鼠標(biāo)順序點(diǎn)擊進(jìn)行驗(yàn)證,步驟如下:①識別圖片中的中文文字,獲取文字的坐標(biāo)位置;②獲取識別的中文文字,通過OCR 獲得文本;③語義分析組合正確的文本順序;④根據(jù)組合的正確詞語、文字坐標(biāo),依次模擬鼠標(biāo)左鍵單擊完成驗(yàn)證。
圖6 滑塊拼圖驗(yàn)證Fig.6 Verification of slider jigsaw puzzle
圖7 順序點(diǎn)擊驗(yàn)證Fig.7 Click Validation in order
(4)其他反爬驗(yàn)證的應(yīng)對策略。
多個(gè)賬號動(dòng)態(tài)切換:User-Agent 檢測、賬號與Cookies檢測可通過Scrapy 設(shè)置多個(gè)用戶參數(shù)動(dòng)態(tài)切換來解決被BAN 的問題。
Splash Javascript 渲染服務(wù):JavaScript 動(dòng)態(tài)渲 染、異步加載采用Splash Javascript 渲染服務(wù)來解決, 通過Splash 服務(wù)來渲染獲取實(shí)際數(shù)據(jù)。
將由各網(wǎng)站采集到的企業(yè)信息進(jìn)行統(tǒng)一的去除重復(fù)數(shù)據(jù)、標(biāo)注異常數(shù)據(jù),針對采集時(shí)出現(xiàn)的異常數(shù)據(jù)進(jìn)行匹配、插補(bǔ)、去除等操作。 并對數(shù)據(jù)進(jìn)行統(tǒng)一的數(shù)據(jù)集成和數(shù)據(jù)轉(zhuǎn)換,為后續(xù)的數(shù)據(jù)分析和處理做準(zhǔn)備。通過分析檢測原始數(shù)據(jù)庫中的企業(yè)是否存續(xù),標(biāo)記已被吊銷、注銷執(zhí)照、信息異常的企業(yè),去除區(qū)域內(nèi)科技服務(wù)資源;通過將分析、處理、篩選后的信息數(shù)據(jù)按照區(qū)域、行業(yè)、性質(zhì)、資訊等多維度形成企業(yè)信息庫。
(1)數(shù)據(jù)清洗:重復(fù)、近似數(shù)據(jù)處理。由Scrapy 獲取的原始數(shù)據(jù)存儲在數(shù)據(jù)庫中, 再對scrapy_company_basic_info_tianyancha、scrapy_recruitment_51job、scrapy_recruitment_zhaopin 等表根據(jù)企業(yè)名稱、 企業(yè)唯一標(biāo)識碼(如社會信用代碼) 等維度去除重復(fù)或相似度較高的數(shù)據(jù),保證數(shù)據(jù)唯一性。
(2)數(shù)據(jù)集成。由于數(shù)據(jù)源分散的特殊性,確認(rèn)企業(yè)信息后,開始補(bǔ)充企業(yè)產(chǎn)品、企業(yè)服務(wù)、企業(yè)資質(zhì)證明等維度的數(shù)據(jù)(包括信用中國、工程科技知中心、認(rèn)監(jiān)委、國家知識產(chǎn)權(quán)局等)。數(shù)據(jù)屬性值的沖突檢測,不同的數(shù)據(jù)源在一個(gè)字段屬性的定義上也許一樣,但實(shí)際數(shù)據(jù)的值并非同一類型,需要檢查連接集成時(shí)的字段類型,同時(shí)也需要檢查定義相同的字段屬性避免重復(fù)。 通過企業(yè)唯一的uuid 主鍵關(guān)聯(lián)企業(yè)相關(guān)信息表的數(shù)據(jù); 在關(guān)聯(lián)時(shí)進(jìn)行人工選擇,防止出現(xiàn)冗余字段,避免出現(xiàn)字段冗余問題;檢查連接集成時(shí)的字段類型,檢查定義相同的字段屬性避免重復(fù)。
(3)數(shù)據(jù)清洗評估。數(shù)據(jù)質(zhì)量評估至少應(yīng)該包含以下兩方面的基本評估指標(biāo):數(shù)據(jù)對用戶必須是可信的??尚判园ň_性、完整性、一致性、有效性、唯一性等指標(biāo)。
(4)數(shù)據(jù)分析。利用采集且清洗后的分析數(shù)據(jù)進(jìn)行數(shù)據(jù)分析, 對數(shù)據(jù)在構(gòu)成、比較、趨勢、分布和聯(lián)系各方面進(jìn)行數(shù)據(jù)分析。 數(shù)據(jù)表現(xiàn)方面可采用不同的統(tǒng)計(jì)圖,如(堆疊)條圖、(堆疊)柱圖、線圖、餅圖、氣泡圖、面積圖、漏斗圖、地圖、散點(diǎn)圖以及數(shù)據(jù)表格的方式來進(jìn)行表現(xiàn)。
圖8 數(shù)據(jù)分析系統(tǒng)Fig.8 Data analysis system
在構(gòu)成方面關(guān)注每個(gè)部分的百分比; 在比較上通過大于、小于等關(guān)系運(yùn)算分析可度量的數(shù)據(jù);通過對時(shí)間日期的角度對數(shù)據(jù)的趨勢變化,如每周、每月、每年等的變化情況; 通過結(jié)合地圖的數(shù)據(jù)分析來表現(xiàn)出數(shù)據(jù)在分布上的各種結(jié)論;查看不同變量之間的聯(lián)系關(guān)系,比如企業(yè)的注冊資本是否和企業(yè)的產(chǎn)品有何種關(guān)系。
(1)資源池總體架構(gòu)設(shè)計(jì)。 平臺基礎(chǔ)Web 框架采用Spring Boot,將現(xiàn)有的科技服務(wù)資源,包括:技術(shù)資源、專家資源和人才資源、專利資源等整合共享,通過構(gòu)建資源池系統(tǒng),包括用戶層、業(yè)務(wù)層、數(shù)據(jù)層、基礎(chǔ)設(shè)施層。為了保證平臺的可擴(kuò)展性和柔性,平臺的整體設(shè)計(jì)將采取分層設(shè)計(jì)思想,每一層都將實(shí)現(xiàn)其特有功能[4]。資源池總體設(shè)計(jì)結(jié)構(gòu)如圖9 所示。
(2)功能實(shí)現(xiàn)。資源池系統(tǒng)是應(yīng)用于汽車、 工程機(jī)械、集成電路、物聯(lián)網(wǎng)等相關(guān)產(chǎn)業(yè)研發(fā)設(shè)計(jì)等專業(yè)領(lǐng)域的科技服務(wù)資源 (服務(wù)機(jī)構(gòu)、服務(wù)項(xiàng)目、 軟件工具)的網(wǎng)絡(luò)化聚合領(lǐng)域,具有資源池管理(資源錄入、資源更新、數(shù)據(jù)模型)、后臺管理等功能,見圖10。
(3)統(tǒng)一檢索。 統(tǒng)一檢索為主題詞檢索,統(tǒng)一對各研發(fā)設(shè)計(jì)各專業(yè)資源池分布式檢索結(jié)果進(jìn)行統(tǒng)一排序顯示;涉及到科技服務(wù)機(jī)構(gòu)的搜索結(jié)果排序 (是否為重點(diǎn)機(jī)構(gòu)、注冊資本、人員規(guī)模、注冊時(shí)間)。檢索結(jié)果顯示頁面中,有對于資源的二次檢索操作(按照專業(yè)類型、行業(yè)類型、地區(qū)等進(jìn)行二次檢索),其操作主頁面如圖11、12 所示。
圖9 資源池架構(gòu)設(shè)計(jì)Fig.9 Resource pool architecture design
圖10 資源池系統(tǒng)Fig.10 Resource pool system
圖11 統(tǒng)一檢索界面Fig.11 Unified search interface
圖12 檢索結(jié)果頁面Fig.12 Retrieves the results page
(4)可視化展示。 企業(yè)名錄的可視化展示將嵌套進(jìn)企業(yè)信息查詢系統(tǒng),主要實(shí)現(xiàn)在對企業(yè)信息查詢時(shí),對被搜索企業(yè)信息進(jìn)行可視化圖表的呈現(xiàn), 見圖13。 主要呈現(xiàn)方面有:區(qū)域行業(yè)發(fā)展規(guī)模分布,企業(yè)信用信息監(jiān)測圖,企業(yè)地址分布地圖等。 同時(shí)數(shù)據(jù)可以通過各種圖表(數(shù)據(jù)表格、柱狀圖、圓餅圖等)以更多的方式進(jìn)行展現(xiàn)。以直觀、多維度的方式將繁多企業(yè)信息直觀的進(jìn)行展現(xiàn)。
圖13 可視化展示Fig.13 Visual presentation
(5)研發(fā)設(shè)計(jì)資源池系統(tǒng)數(shù)據(jù)體量,見表1。
表1 當(dāng)前資源池?cái)?shù)據(jù)條目Tab.1 The current resource pool data entry
本文通過區(qū)域特色科技服務(wù)資源池的開發(fā)與構(gòu)建,探索科技服務(wù)資源的進(jìn)一步整合和集聚, 使分散在各個(gè)區(qū)域的科技服務(wù)“資源碎片”形成科技服務(wù)“資源池”,提升科技服務(wù)資源的使用效率,激發(fā)科技資源的服務(wù)效能,促進(jìn)區(qū)域服務(wù)能力提升以及服務(wù)形式多樣化發(fā)展。