聶莉娟 方志偉 趙心宇
(1.金肯職業(yè)技術(shù)學(xué)院 江蘇省南京市 210000 2.視若飛信息科技(上海)有限公司 江蘇省南京市 210000)
在現(xiàn)代科學(xué)技術(shù)水平發(fā)展日新月異的背景下,大數(shù)據(jù)技術(shù)與云計算技術(shù)得到了快速發(fā)展,于此同時越來越多的行業(yè)領(lǐng)域在日常生產(chǎn)與運營過程中均會出現(xiàn)海量的數(shù)據(jù)信息,怎樣有效的處理這些海量的數(shù)據(jù)信息,并從中獲取擁有較高價值的信息,慢慢成為了現(xiàn)代人員探究的關(guān)鍵所在。隨著這種訴求的越來越強烈,數(shù)據(jù)挖掘技術(shù)慢慢浮出水面,正式進入到人們視野當(dāng)中。隨著數(shù)據(jù)挖掘技術(shù)的不斷發(fā)展,Python語言在其中占據(jù)了極其關(guān)鍵的地位,并慢慢發(fā)展成為了運用非常廣泛的數(shù)據(jù)挖掘技術(shù)。當(dāng)下Web信息的呈現(xiàn)出指數(shù)級增長,要想實現(xiàn)對龐大數(shù)據(jù)信息的準(zhǔn)確分析與篩查,同時充分發(fā)揮數(shù)據(jù)信息的價值,必須要加強數(shù)據(jù)挖掘技術(shù)的改革與創(chuàng)新。Python是一個面向?qū)ο蟮拈_源程序設(shè)計語言,相比較于C語言以及C++等其它編程語言,Python語言的語法結(jié)構(gòu)較為簡單,并且因為Python語言是建立在Guido van Rossum基礎(chǔ)之上開發(fā)的,這使得Python語言具備較多類型的庫與API[1]。正確巧妙運用Python語言中的不同工具庫,比如說sklearn工具庫等,可以逐步改善Python語言的運用價值,為強化Web數(shù)據(jù)挖掘速度與效果提供有力支持,以此來提升社會生產(chǎn)力[2]。本文重點闡述了Python語言特征及其在Web中的應(yīng)用,指出了Web數(shù)據(jù)架構(gòu),提出了基于Python語言的Web數(shù)據(jù)挖掘與分析方法,不斷改善Web數(shù)據(jù)挖掘效率與效果。
Python語言是在現(xiàn)代社會環(huán)境下產(chǎn)生的一種新型程序編程語言,該語言以第四代程序為載體,面向的關(guān)鍵性目標(biāo)是交互性與分析性對象,在Web技術(shù)以及非Web技術(shù)中有著廣泛而深入的應(yīng)用,并在其中發(fā)揮了至關(guān)重要的作用[3]。比如, Google公司以及豆瓣網(wǎng)等許多網(wǎng)站在進行程序編寫過程中都使用了Python語言。Python是現(xiàn)代非常重要的腳本類語言之一,有著比其它編程語言更好的代碼開發(fā)率,結(jié)合第三方數(shù)據(jù)庫,只需要依托于少量的代碼便能夠展現(xiàn)出其十分強悍的性能[4]。
在Python語言當(dāng)中只存在少量的可讀性代碼,相比之下,當(dāng)C語言要達到與其一樣的性能時,自身包含的可讀性代碼通常在20%左右[5]。除此之外,Python語言的實際使用優(yōu)勢還體現(xiàn)在其它方面,比如說編程過程中省略了括號。當(dāng)存在begin…end…類型語句時,在Python語言中科學(xué)合理運用冒號便能夠完成代碼的不同分層。例如在面向某個條件語句ifTrue:print“Yes”中,句中ifTrue后面便運用了冒號,表示下一行print為下部基礎(chǔ)語句,這種情況下要達到既定的條件才會往下執(zhí)行。
相比較于其它編程語言,Python語言擁有非常好的跨平臺與開源性優(yōu)勢,將其應(yīng)用到Web程序中以后,使其優(yōu)勢得到進一步擴大[6]。Python語言運用的WSGI模型涵蓋在該語言服務(wù)器范疇之中,期間使用的各種程序和中間層都建立在官方標(biāo)準(zhǔn)之上,盡管如此也存在一定的不足,即無法準(zhǔn)確辨別異步模型。除此之外,在Python語言快速發(fā)展的背景下,其運用優(yōu)勢愈加顯著,慢慢轉(zhuǎn)變成為智能手機游戲產(chǎn)業(yè)編程的關(guān)鍵性語言,逐步取代了傳統(tǒng)的C語言與C++等傳統(tǒng)編程語言。
將Python語言和云計算技術(shù)充分融合到一起,進一步推動了基層程序從傳統(tǒng)方式轉(zhuǎn)型為虛擬化模式。充分發(fā)揮云計算技術(shù)運用優(yōu)勢與價值,為使用者提供更加高效、便捷的信息資源服務(wù),具體涵蓋了Saas/ Iaas 等,例如,在線辦公平臺易度平臺建設(shè)過程中便融入了較多的Python語言。需要特別留意的是,Python語言可基于標(biāo)準(zhǔn)化數(shù)據(jù)庫科學(xué)合理彌補大數(shù)據(jù)中存在的多個問題,實現(xiàn)對大數(shù)據(jù)的處理、轉(zhuǎn)化以及分析等,之后歸納與總結(jié)出大數(shù)據(jù)的本質(zhì)屬性,充分展現(xiàn)出其結(jié)構(gòu)方式的各項要求。
Django是一種應(yīng)用非常普遍的Python Web開發(fā)結(jié)構(gòu)。這種Web開發(fā)結(jié)構(gòu)當(dāng)中,自身表現(xiàn)出較高的開源性,包含有不同類型的組件,可以對存儲、顯示界面以及映射關(guān)系等性能開展動態(tài)管理。Django架構(gòu)的設(shè)計通常建立在DRY原則基礎(chǔ)之上,由于本身包含有單獨的、輕量性的Web服務(wù)器,只需要投入小部分時間便可以改善Web技術(shù)開發(fā)與使用效果[7]。
在進行Django設(shè)計時,需要嚴(yán)格依照遵守MVC模式原則,共計包含三個方面,即控制、視圖以及模型。從應(yīng)用程度方面來分析,模型層處于最底層,該層的關(guān)鍵性任務(wù)便是科學(xué)合理的處理與數(shù)據(jù)緊密相連的事務(wù),例如對多種類型數(shù)據(jù)的查驗、對龐大數(shù)據(jù)的規(guī)范存儲等。因為在Django中用戶發(fā)出的命令均要依托于基本框架來處理與實現(xiàn),所以該層也被叫做模塊層。模塊層的主要工作職責(zé)便是全面展現(xiàn)各類數(shù)據(jù),同時需要實現(xiàn)對存取模塊以及對模塊的科學(xué)合理使用。設(shè)計人員在選擇應(yīng)用模塊語言實現(xiàn)對HTML界面渲染時,需要賦予模塊層相應(yīng)的數(shù)據(jù),采用個性化的模板得到需要的渲染效果。視圖層是應(yīng)用程序中十分重要的一部分,其關(guān)鍵性工作任務(wù)便是展現(xiàn)界面以及相關(guān)文檔等信息之中的主要數(shù)據(jù)。
Django的實際操作流程主要包含以下幾個部分:
(1)瀏覽器將HTTP請求發(fā)送到Web服務(wù)器。
(2)當(dāng)HTTP請求送達到Web服務(wù)器以后,服務(wù)器轉(zhuǎn)變?yōu)檫\用Django。
(3)Django會下達指令要求中間層根據(jù)URLconf模型對各項數(shù)據(jù)進行匹配,同時與相關(guān)函數(shù)聯(lián)系起來;函數(shù)以不同模板與模型為基礎(chǔ),依照具體需求產(chǎn)生不同的響應(yīng);之后中間層將產(chǎn)生的各種響應(yīng)轉(zhuǎn)化為HTTP響應(yīng),最后將該響應(yīng)反饋給Web服務(wù)器。
(4)Web服務(wù)器在接收到反饋響應(yīng)以后,將其發(fā)送到使用者瀏覽器。
Pyramid屬于開源架構(gòu)中的一種,在執(zhí)行工作過程中表現(xiàn)出較高的效率,能夠有效節(jié)省較多的設(shè)計時間,提高設(shè)計人員開發(fā)效率與效果。Pyramid不僅涵蓋了Python、Perl等特性,同時還擁有快捷高效的開發(fā)性能[8]。
Flask一般廣泛使用在輕量級Web當(dāng)中。通常情況下,輕量級Web 服務(wù)器的網(wǎng)關(guān)接口主要是Werkzeug,選擇的模塊引擎主要是jinja2,并使用BSD對其進行授權(quán)[9]。事實上,單一的Flask既不包含有抽象的數(shù)據(jù)庫,也沒有對各項表單進行查驗的基層性能,在實際運行過程中,F(xiàn)lask主要是依托于其它數(shù)據(jù)庫來實現(xiàn)相關(guān)功能。Flask架構(gòu)表現(xiàn)出顯著的拓展性特征,能夠十分方便的增設(shè)相關(guān)功能,從而更好達到使用需求。
CherryPy是以Python面向?qū)ο蟮腍TTP架構(gòu)為載體,主要服務(wù)的群體是Python設(shè)計人員。設(shè)計人員在開展Web技術(shù)開發(fā)與應(yīng)用過程中,可以引入CherryPy技術(shù),然而需要特別注意的是,CherryPy自身不存在完善的語言體系。在CherryPy當(dāng)中包含有Web服務(wù)器,在這種情況下,使用者可以直接使用CherryPy自帶的服務(wù)器,免去了搭建Web服務(wù)器的麻煩,便能夠依托于內(nèi)置程序?qū)崿F(xiàn)運行。服務(wù)器的主要職能體現(xiàn)在以下兩個部分:首先,將從底層傳輸來的TCP套接字信息統(tǒng)一轉(zhuǎn)變?yōu)镠TTP請求,之后將轉(zhuǎn)換好的信息發(fā)送到處理程序中。其次,當(dāng)接受到從上層軟件發(fā)送來的數(shù)據(jù)時,及時將這些數(shù)據(jù)變化為HTTP響應(yīng),同時將信息傳輸?shù)交鶎拥腡CP套接字。
相比較于其它Web設(shè)計架構(gòu),TurboGear不能夠單獨存在,必須要依附在相關(guān)架構(gòu)之上,致力于充分挖掘與發(fā)揮各個架構(gòu)的優(yōu)勢與價值。依托于TurboGear設(shè)計架構(gòu),開發(fā)者可以先從基礎(chǔ)性的文件服務(wù)方面入手,之后不斷拓展到全棧式服務(wù)[10]。
Flask應(yīng)用的場景主要是一些較為簡單的小應(yīng)用,屬于微框架范疇,相比之下,Diango以及Pyramid主要應(yīng)用在一些大規(guī)模功能當(dāng)中。盡管Diango與Pyramid面向的對象較為相似,但是在靈活性以及拓展性方面兩者又存在顯著差異。Pyramid具有較高的靈活性,開發(fā)人員在實際開展設(shè)計工作過程中能夠靈活運用不同工具進行選取。例如基于URL架構(gòu)以及數(shù)據(jù)庫等選擇流程。Diango能夠為Web開發(fā)者提供多種處理方法,并且由于其包含各式各樣的模板,可以有效提高設(shè)計便捷性與效率。
在Diango設(shè)計架構(gòu)中涵蓋有ORM模塊,開發(fā)人員在進行Pyrami以及dFlask設(shè)計時,可以依照實際需求靈活使用數(shù)據(jù)儲存工具,在ORM模塊當(dāng)中SQLAIchemy模塊擁有十分廣泛的應(yīng)用范疇,也可以選擇MongoDB 和Dynamo 等其它模塊。
Diango設(shè)計架構(gòu)能夠為開發(fā)人員提供一系列完整的服務(wù),在實際開展設(shè)計過程中,開發(fā)人員不再需要花費較多時間來確定基礎(chǔ)的設(shè)備架構(gòu)等事務(wù)。Diango架構(gòu)包含基礎(chǔ)模板管理、表單、查驗與數(shù)據(jù)庫等深層次的創(chuàng)建性能。Pyramid主要體現(xiàn)在查驗與路由兩個方面,基礎(chǔ)模塊管理以及數(shù)據(jù)庫合理使用通常需要由第三方來實現(xiàn),也可以基于Pyramid與Flask進行相關(guān)建設(shè),開發(fā)人員必須要親自完成構(gòu)建選擇,這樣才能夠更好發(fā)揮其靈活特性。
當(dāng)下在開展設(shè)計環(huán)節(jié)腳本過程中,Python語言的應(yīng)用十分廣泛,由于Python語言表現(xiàn)出顯著的交互性、解釋性等特性,從而使得依托于Python語言編寫完成的程序代碼表現(xiàn)出較高的可讀性,除了該優(yōu)勢之外,使用Python語言完成的結(jié)構(gòu)代碼還有助于降低后期程序二次開發(fā)與維護的難度,有效改善后續(xù)工作開展的效率與效果。除此之外,相比較于C語言、C++編程語言,Python語言對初學(xué)者表現(xiàn)出更高的誠意,能夠為其提供通俗易懂的運用環(huán)境,使其在實際編程過程中擁有更高的靈活性,正因為如此Python語言才得到了大范圍運用,越來越多的開發(fā)人員習(xí)慣使用Python語言來完成編程任務(wù)。
(1)Web數(shù)據(jù)挖掘的定義。在許多學(xué)者看來,也可以將Web數(shù)據(jù)挖掘叫做Web信息挖掘、網(wǎng)絡(luò)信息挖掘等,是指通過模擬用戶正常的瀏覽器行為,并設(shè)置一定的規(guī)則,從而獲取Web頁面指定信息,實質(zhì)上是一種聯(lián)系數(shù)據(jù)挖掘與Web的新型技術(shù)[11]。Web數(shù)據(jù)挖掘技術(shù)的重要功能便是能夠在較短時間內(nèi)從龐大的雜亂無章數(shù)據(jù)信息中尋找出有用的信息,同時依托于數(shù)據(jù)轉(zhuǎn)化、分析以及建模等一系列操作,對獲得的數(shù)據(jù)信息開展深入分析與研究,緊接著依照分析結(jié)果對現(xiàn)狀進行審視與考察,同時給出有效的預(yù)測性決策,由此可見Web數(shù)據(jù)挖掘表現(xiàn)出極高的科研價值與商業(yè)發(fā)展前景,如圖1所示為Web數(shù)據(jù)挖掘的工作流程圖。
圖1:Web數(shù)據(jù)挖掘的工作流程
(2)Web數(shù)據(jù)挖掘的類別與特性。Web數(shù)據(jù)挖掘開展的最終目標(biāo)是將網(wǎng)頁超鏈接、網(wǎng)絡(luò)界面內(nèi)容與Web應(yīng)用日志等中的信息整合起來,并對其開展深入分析與挖掘,進而得到較多有用的信息,所以依照Web數(shù)據(jù)挖掘目的的差異和數(shù)據(jù)類型的不同,通常將Web數(shù)據(jù)挖掘分成以下三個部分, 分別是Web結(jié)構(gòu)挖掘、Web應(yīng)用挖掘與Web內(nèi)容挖掘。上述三種挖掘方式中,Web內(nèi)容挖掘涵蓋了文本挖掘和多媒體挖掘兩種類別。因為Web本身擁有顯著的特征,這使得Web數(shù)據(jù)挖掘也表現(xiàn)出較強的繁瑣性、動態(tài)性與異構(gòu)性等特征。在具體運用過程中,Web數(shù)據(jù)挖掘涵蓋了五大部分,分別是Web資源收集、Web數(shù)據(jù)簡單處理、Web數(shù)據(jù)變幻和整合、模式辨別與模式分析,現(xiàn)階段使用較為普遍的Web數(shù)據(jù)挖掘技術(shù)是分類、聚類與統(tǒng)計分析等。
現(xiàn)階段應(yīng)用較為普遍的網(wǎng)絡(luò)爬蟲算法主要有廣度與深度優(yōu)先策略、Opic策略以及Partial PageRank策略等,不同的網(wǎng)絡(luò)爬蟲算法的方式差異較大,每種算法都有著自身獨到的優(yōu)勢,在具體應(yīng)用過程中必須要聯(lián)系應(yīng)用場景科學(xué)選取網(wǎng)絡(luò)爬蟲算法方式。
5.2.1 廣度優(yōu)先策略
廣度優(yōu)先算法方式是嚴(yán)格按照Web內(nèi)容各個目錄級進行的,首先是對初始界面同一層級的頁面進行爬取,緊接著將得到的鏈接依照相應(yīng)的規(guī)律排列到隊列當(dāng)中,以此來達到向外拓展的目的,盡量得到更多的鏈接信息,同時繼續(xù)向下一個層級深入。廣度優(yōu)先策略能夠在同一時間對多個層級進行爬蟲,從而有效改善Web信息抓取效率。正因為如此,在當(dāng)下多個網(wǎng)絡(luò)爬蟲算法當(dāng)中廣度優(yōu)先策略有著非常大的應(yīng)用范圍。然而該算法也存在一定的弊端,即當(dāng)需要對一個擁有較多層次的目錄進行挖掘時,通常要消耗非常多的時間,難以獲得較高的挖掘效率。
5.2.2 深度優(yōu)先策略
從字面意思來理解,深度優(yōu)先策略是指爬蟲以某個特定的順序依次訪問各個頁面,并確保每個頁面都挖掘到最底層的目錄,當(dāng)一個分支挖掘完成之后,才會退出并進行下一個分支的爬取,當(dāng)對每一個鏈接的內(nèi)容都爬取后,爬蟲任務(wù)才全部完成。采用這種爬蟲算法策略,可以實現(xiàn)對深層次信息內(nèi)容的挖掘,然而當(dāng)在對這些較深的站點內(nèi)容進行爬取時,往往需要占據(jù)較多的系統(tǒng)資源。
5.2.3 Partial PageRank策略
Partial PageRank網(wǎng)絡(luò)爬蟲算法首先需要獲取初始頁信息,在此基礎(chǔ)之上對Web層面的Partial PageRank的數(shù)值進行核算,并基于計算結(jié)果確定頁面內(nèi)在的價值大小,之后依照PageRank數(shù)值從大到小的方式依次開展各個頁面的爬取,以此來有效改善完了爬蟲開展的速度,同時還可以獲得較好的遍歷效果。然而這種網(wǎng)絡(luò)爬蟲算法也存在一定的不足,即最終獲得的爬取結(jié)果和實際的遍歷結(jié)果有著較大區(qū)別,無法確保數(shù)據(jù)的精準(zhǔn)性與可靠性。
5.2.4 Opic策略
Opic策略可以看成是在Partial PageRank策略基礎(chǔ)之上的改進策略,在爬取準(zhǔn)備階段中,所有頁面的數(shù)值均是一樣的,當(dāng)所有頁面都完成下載任務(wù)以后,最高值將會平均配置給頁面中的各個鏈接,于此同時初始化當(dāng)前頁面的數(shù)值,爬蟲基于數(shù)值的高低對各個頁面開展優(yōu)先級排列,基于從大到小的原則進行頁面的下載。Opic策略不用進行迭代計算,能夠很好的滿足實際的計算要求[12]。
5.2.5 數(shù)據(jù)結(jié)構(gòu)化存儲
一般來說,現(xiàn)有的信息當(dāng)中絕大多數(shù)均是基于非結(jié)構(gòu)的文本出現(xiàn)的,在實際進行信息的歸類與應(yīng)用過程中,都面臨較大的難題,而將信息轉(zhuǎn)變?yōu)榻Y(jié)構(gòu)化方式存儲起來便能很好的解決上述問題。具體來說,首先從Web頁面眾多信息中將各個非結(jié)構(gòu)信息單獨挖掘出來,將其轉(zhuǎn)變?yōu)榻Y(jié)構(gòu)化數(shù)據(jù)以后保存到計算機磁盤當(dāng)中,以此來提高數(shù)據(jù)存儲的規(guī)范性與標(biāo)準(zhǔn)性。值得注意的是,整個過程均可以實現(xiàn)自動化運行,工作人員不必進行相應(yīng)的操作,使用者可以聯(lián)系具體使用場景靈活選取數(shù)據(jù)庫、CSV等與之相匹配的存儲途徑。當(dāng)確定選擇數(shù)據(jù)庫進行數(shù)據(jù)的存儲時,Web數(shù)據(jù)便會依托于二維表架構(gòu)的方式完成各項數(shù)據(jù)的保存,這種數(shù)據(jù)存儲方式不僅效率高,同時還擁有較高的精準(zhǔn)性,可以很好的契合多線程數(shù)據(jù)挖掘的要求。
5.2.6 正則表達方式
事實上,絕大部分Web頁面均是依托于Html格式呈現(xiàn)的,但是Html頁面則是基于各種類型語義對象的基礎(chǔ)之上,當(dāng)對象不同時其標(biāo)記也存在較大差異,當(dāng)針對Html頁面開展深入分析與探究后,結(jié)合正則表達方式進行配置,便可以有效查找與獲取需要的字符串信息。例如,當(dāng)希望獲取到Web頁面中涵蓋“is”的程序代碼時,需要利用matchObj = re.match( r'(.*) is (.*?) .*', line, re.M|re.I)的途徑挖掘相關(guān)信息,以此來達到對涵蓋“is”字符串的自主配置,同時輸入相應(yīng)的內(nèi)容。在該示例當(dāng)中,( r'(.*) is (.*?) .*', line, re.M|re.I)便是為其配置的正則表達式,能夠在數(shù)據(jù)挖掘過程中給予切實可行的方法。除此之外,為了能夠妥善的解決頁面健全、網(wǎng)站優(yōu)化等問題,保障匹配過程的穩(wěn)定性,使用者也能夠選擇Python自身擁有的模塊和第三方數(shù)據(jù)庫,實現(xiàn)對Web頁面信息內(nèi)容準(zhǔn)確解析與獲取。
綜上所述,本文重點闡述了Python語言的特征及其在Web數(shù)據(jù)挖掘中的應(yīng)用優(yōu)勢,總結(jié)了網(wǎng)絡(luò)爬蟲算法優(yōu)勢與適用環(huán)境,同時對正則表達式、數(shù)據(jù)存儲方式以及數(shù)據(jù)信息抓取過程進行了深入分析,得出Python語言可以很好的滿足網(wǎng)絡(luò)爬蟲的數(shù)據(jù)抓取要求,可以進行數(shù)據(jù)的自主性、差異化抓取,有效改善了數(shù)據(jù)查找和分析的速度和質(zhì)量。