鄒維 李廷元
摘 ?要:為了提高航行通告文件下載效率、節(jié)省人工資源,文章通過Scrapy爬蟲框架,結合自然語言處理中的信息,分類爬取各民航局發(fā)布的航行通告文本。首先基于網頁數據交互模式將網站分類,結合Selenium自動化測試工具進行網頁下載。然后使用樸素貝葉斯算法將網站所有鏈接進行分類,區(qū)分為目標鏈接以及非目標鏈接,從而實現提取航行通告文本鏈接,此分類模型在領域類網站準確率為95.97%。
關鍵詞:Scrapy;爬蟲;Selenium;樸素貝葉斯
中圖分類號:TP391 ? ? ?文獻標識碼:A 文章編號:2096-4706(2020)21-0006-04
Domain Website File Crawling Based on Scrapy Crawler Framework
ZOU Wei,LI Tingyuan
(School of Computer Science,Civil Aviation Flight University of China,Guanghan ?618307,China)
Abstract:In order to improve the efficiency of downloading the notice to navigation document and save human resources,the article uses the Scrapy crawler framework combined with the information in natural language processing to classify and crawl the text of navigation notices issued by civil aviation administration. Firstly,web sites are classified based on web data interaction mode,and then web pages are downloaded with Selenium automated testing tool. Then the Naive Bayes algorithm is used to classify all the links of the website into target link and non-target link,so as to extract the text link of the notice of navigation. The accuracy rate of this classification model in the domain website is 95.97%.
Keywords:Scrapy;crawler;Selenium;Naive Bayes
0 ?引 ?言
航行通告(NOTAM)是關于任何航行設施、服務、程序或危險的情況建立和變動的資料的通知。在航空領域中飛機能否安全、高效以及正常的飛行,航行通告起著至關重要的作用,它由國際航行通告室用電信方式發(fā)布。對于飛行相關人員來說,及時的查看此類資料是十分必要的,因為已發(fā)生的航空事故中,由飛行相關人員未及時查看航行資料而引起的事故所占比重較大[1]。然而,各國發(fā)布的航行通告網站結構不同,數據量大,文件類型繁多,人工下載效率低,工作量大[2]。
自然語言處理(Natural Language Processing,NLP)是計算機科學與語言學的融合性學科。現階段互聯網的發(fā)展速度,網速以及硬件設施的提升,使得自然語言相關文本數量大幅飆升。傳統(tǒng)的人工或老舊的專家系統(tǒng)在處理和解析如此大量的自然語言文本時存在人工成本高,誤差大,效率低等一系列問題,因此使用機器理解自然語言的相關課題研究受到廣大的關注。信息抽取作為自然語言處理中的一個子課題,其核心是在人類理解的非結構化文本中提取出關鍵的信息,并使其結構化以便機器理解。因此,如何有效地從大量的航行通告資料數據中抽取出對用戶有用的部分顯得十分重要。對此,本文從各民航局網站公開發(fā)布的信息中,以AIP文件獲取為例,基于Scrapy爬蟲框架針對網站結構設計開發(fā)航行通告爬蟲[3,4],著重介紹民航局網站結構分析,頁面內容獲取、解析以及結合樸素貝葉斯模型進行AIP文本鏈接提取,基于Tkinter框架實現獲取文件信息展示界面。
本研究基于中國民用航空飛行學院與中航材導航技術有限公司合作課題“民航大數據人工智能處理技術”,作者使用合作單位提供的網站鏈接實現了民航網站關鍵信息抽取,該技術后續(xù)將用于民航大數據人工智能處理技術研發(fā)前期的數據準備工作。
1 ?相關框架和算法
1.1 ?Scrapy爬蟲框架簡介
Scrapy爬蟲框架:功能強大的網絡爬蟲框架(是實現爬蟲功能的一個軟件結構和功能組件集合),基于Python實現網絡爬蟲的重要的技術路線。其包含五個主要模塊以及兩個中間件,相關定義詳見文獻[5]。
1.2 ?Selenium簡介
Selenium為Web應用程序的自動測試工具[6],具有簡單方便、易于實現的優(yōu)點,可模擬人工調用瀏覽器訪問網頁。對于數據交互復雜、接口難以分析以及涉及數據加密的網站,結合Selenium自動測試工具可直接獲取用戶所見網站數據?;诖颂匦栽谂老x獲取由JavaScript代碼動態(tài)生成的網頁時表現良好。
1.3 ?樸素貝葉斯算法
樸素貝葉斯(Naive Bayes)是一個基于貝葉斯理論的分類器[7]。其基本數據滿足:各維度上的特征被分類的條件概率之間是相互獨立的[8]。優(yōu)點為:
(1)算法簡單。
(2)算法穩(wěn)定且健壯性良好。
(3)對小規(guī)模數據訓練表現良好。
本文給定一個鏈接Pj(f1,f2…fn),f1,f2…fn為進行預處理后構成此鏈接的所有特征。計算此鏈接被分到某個類別ck的概率Pr(ck|f1,f2…fn),使用概率公式得到:
2 ?具體實現流程
實驗流程大致可分為網站的分類,網頁文檔獲取,數據處理,訓練模型鏈接分類最后實現文本的下載,整體流程如圖1所示。
以下討論實驗的詳細實現過程。
2.1 ?網站分類
根據網頁數據交互模式可將網頁分為以下類別:
(1)靜態(tài)網頁。瀏覽器通過鏈接請求到的HTML包含此鏈接提供所有數據。
(2)動態(tài)網頁。部分數據由JavaScript通過DOM元素渲染或結合Ajax向服務器請求渲染數據。
(3)需要點擊操作的網頁。如某些網頁需要用戶登陸或同意閱讀協(xié)議的網頁。
由于Scrapy爬蟲框架處理靜態(tài)網頁良好的表現性,(1)類網頁使用Scrapy爬蟲框架提供AIP足夠,但Scrapy爬蟲框架的下載引擎無法獲取動態(tài)網頁中后續(xù)動態(tài)生成的數據,(2)(3)類網站需在Scarpy爬蟲框架的Spider Middlewares模塊中定義新的網頁請求方式,此處結合Selenium工具模擬人工操作瀏覽器,Selenium工具下載的網頁數據即人工操作后所見內容,此處選用谷歌瀏覽器,具體實現步驟為:
(1)下載ChromeDriver驅動。不同瀏覽器對應的驅動不同,實驗中選擇對應的驅動安裝即可。
(2)調用webdriver.Chrome()函數聲明瀏覽器對象。
(3)使用get([url])函數訪問要請求的頁面,url為對應頁面的鏈接。
(4)最后通過WebDriverWait()設置等待時間,等待瀏覽器響應后即可獲取帶頁面數據。
在通過上述步驟獲取到網頁文檔數據后,對網頁文檔進行預處理。
2.2 ?網頁文檔預處理
為提高后續(xù)數據處理效率,將網頁文檔解析為DOM樹并將其中的樣式、列表、腳本、注釋等噪音信息進行過濾,具體實現過程為:
(1)網頁內容分析。由于網站布局沒有特定的統(tǒng)一標準,對給定領域網站進行分析,查找存在目標鏈接標簽,部分國家結果如表1所示。
(2)網頁數據解析。在Scrapy爬蟲框架負責處理spider從網頁中抽取的數據,負責清洗、驗證和向數據庫中存儲數據的項目管道模塊,使用Python的Beautiful Soup庫進行網頁文檔的解析與操作。Beautiful Soup提供的BeautifulSoup([參數])函數將一個網頁文檔解析為一棵DOM樹,此處參數為2.1段落中獲取的網頁文檔。
(3)數據初步過濾。Beautiful Soup也提供了簡單而強大的方法來瀏覽、搜索、解析DOM樹。通過find_all()搜索文檔樹函數結合正則表達式抽取出網頁中表1展示的三類標簽,整理部分結果如表2所示。
2.3 ?數據處理
通過多個網站AIP文件下載,記錄下載地址進行分析。已知URL的組成為:協(xié)議://域名:端口號/目錄/文件名.文件后綴?參數=值#標志,同一個網站的協(xié)議、域名以及端口號是相同的。為減少后期文本向量化以及樸素貝葉斯模型的計算量,在網頁文檔預處理階段,截取URL端口號之后的信息作為基本數據。由于要處理的數據通過“-”符號鏈接且無需考慮語義,通過分析實際數據,自定義分詞方法,本文使用Python正則庫提供的re.split('[-.#]',text)函數指定多符號分割,對數據進行分詞。去除分詞后出現的空格和無信息的標點符號,最后對未標記訓練數據進行人工標記,0表示非目標鏈接,1表示目標鏈接,指向文件下載地址,結果如表3所示。數據的屬性值之間相互獨立,由此選定文本分類算法——樸素貝葉斯方法。
Sklearn庫提供封裝好的樸素貝葉斯模型代碼,數據來源于選取的4個網站,從中各提取250個URL,經過上述步驟數據處理后,將所有數據處理好的數據表3中第二列最終處理數據及第三列對應標記,每對應一行為一組,共1 000組按照8:2的比例隨機分配,80%作為訓練集,20%作為測試集,將數據輸入模型,核心代碼如圖2所示。
此樸素貝葉斯分類器的準確度為:0.959 7。
2.4 ?目標文本下載
將網頁中得到的所有鏈接經過以上三步得到目標鏈接,在處于Scrapy爬蟲框架的請求和響應之間的下載中間件模塊中將目標鏈接重組為可訪問鏈接,由Scrapy爬蟲框架的下載器進行文件下載,下載后文件保存地址在settings.py中配置,此處文件保存在計算機本地E盤。
2.5 ?爬蟲可視化
爬蟲可視化為整個系統(tǒng)設計一個可操作界面,具體實現步驟為:
(1)通過Tkinter做出GUI界面,可以通過界面設置具體要爬取的網站。網站名前添加復選框以便選擇要爬取的網站。
(2)把要爬取的網站的URL寫入臨時文件保存起來。每個網站對應的value值為其對應的網站地址,獲取已勾選的要爬取復選框的value值,通過Python的open以及write函數寫入txt文檔并保存以便后續(xù)使用。
(3)通過多進程啟動Scrapy爬蟲框架。使用多線程防止程序調用Tkinter界面程序啟動爬蟲發(fā)生鎖死,將占據時間長的程序中的任務放在后臺處理,以實現給其他任務分配資源。此處使用Python3線程模塊的threading模塊實現。
(4)在spider文件中讀取臨時文件,根據URL開始爬取頁面。使用Python提供的open以及readlines函數讀?。?)中寫入txt文檔中的數據,憑此數據開啟爬蟲。
(5)在Pipeline中把爬取的數據可持久化保存下來。
(6)爬取完畢后刷新Tkinter界面,把結果顯示出來。界面如圖3所示。
3 ?結 ?論
通過以上實驗,Scrapy爬蟲框架結合樸素貝葉斯算法實現領域網站內目標鏈接獲取,介紹了算法的主要流程和具體實現的步驟。目前存在的難點和困難有以下幾點:
(1)存在多國語言。數據的來源為多國發(fā)布的航行通告網站,部分國家未使用統(tǒng)一語言,存在數據文本中各國語言與英語混合的現象,不便于網站的分析。
(2)原始數據獲取。在非結構化的HTML文件中,獲取進行信息抽取的原始數據困難,目前給定網站架構老舊,未使用H5的語義標簽,存在為了實現結構布局而濫用標簽的現象,不便于對信息的定位以及數據的過濾。
(3)不適用所有鏈接。在個別網站中URL的組成并沒有嚴格安裝文件名來組成其下載鏈接,因此無法使用本實驗的方法進行分類識別。
下一步,作者考慮加入鏈接的文本內容作為特征值并進行鏈接的多分類研究。
參考文獻:
[1] 田亞琳.關于在機場設施改造期間做好航空情報信息前置的建議 [J].民航管理,2017(9):51-53.
[2] 陳鳳蘭.基于模糊評價的航行通告質量評估方法 [J].科技創(chuàng)新與應用,2020(9):134-136.
[3] 王海玲,周志彬.基于Scrapy框架的爬蟲設計 [J].軟件導刊,2020,19(4):224-228.
[4] 王芳,張睿,宮海瑞.基于Scrapy框架的分布式爬蟲設計與實現[J].信息技術,2019(3):96-101.
[5] 安子建.基于Scrapy框架的網絡爬蟲實現與數據抓取分析 [D].長春:吉林大學,2017.
[6] 蟲師.Selenium 2自動化測試實戰(zhàn) [M].北京:電子工業(yè)出版社,2016.
[7] 余芳,姜云飛.一種基于樸素貝葉斯分類的特征選擇方法 [J].中山大學學報(自然科學版),2004(5):118-120.
[8] FRIEDMAN N,GEIGER D,GOLDSZMIDT M.Bayesian Network Classifiers [J].Machine Learning,1997,29(2-3):131-163.
作者簡介:鄒維(1996—),女,漢族,四川宜賓人,碩士研究生,研究方向:機器學習自然語言處理;李廷元(1967—),男,漢族,四川眉山人,教授,碩士研究生,研究方向:大數據分析、機器學習、人工智能。