霍柄良 武警后勤學(xué)院基礎(chǔ)部
在現(xiàn)階段大數(shù)據(jù)的時(shí)代中,想要實(shí)現(xiàn)對(duì)數(shù)據(jù)的獲取和分析,要先具備足夠的數(shù)據(jù)源,網(wǎng)絡(luò)爬蟲技術(shù)就為其數(shù)據(jù)獲取提供了良好的條件,且還能夠?qū)崿F(xiàn)對(duì)數(shù)據(jù)源的目的性采集。在網(wǎng)絡(luò)爬蟲技術(shù)應(yīng)用中,Python 腳本語言的使用十分廣泛,此腳本語言具有著顯著的優(yōu)勢(shì),也提高了網(wǎng)絡(luò)爬蟲技術(shù)運(yùn)用的水平,而基于Python 的網(wǎng)絡(luò)爬蟲技術(shù)如何實(shí)現(xiàn)就是本文主要研究的內(nèi)容。
所謂網(wǎng)絡(luò)爬蟲,又被稱作網(wǎng)頁蜘蛛和網(wǎng)絡(luò)的機(jī)器人,主要是根據(jù)一定規(guī)則自動(dòng)進(jìn)行網(wǎng)絡(luò)信息抓取的一種程序或腳本。這種網(wǎng)絡(luò)爬蟲常被用在互聯(lián)網(wǎng)的搜索引擎和其它類似的網(wǎng)站中,對(duì)這些網(wǎng)站內(nèi)的內(nèi)容進(jìn)行獲取、更新和檢索。往往通過網(wǎng)絡(luò)爬蟲能夠自動(dòng)采集所訪問頁面的內(nèi)容,后讓搜索的引擎實(shí)施進(jìn)一步的處理,如對(duì)下載頁面的分檢、整理等,從而使用戶能夠迅速進(jìn)行所需信息的檢索。
Python 是一種網(wǎng)絡(luò)爬蟲腳本語言類型,其在對(duì)網(wǎng)絡(luò)爬蟲編寫中具有著顯著的優(yōu)點(diǎn)。首先,Python 的語言十分簡(jiǎn)潔,使用起來十分簡(jiǎn)單、易學(xué),通過Python 進(jìn)行編寫就像使用英語進(jìn)行寫作一樣;然后,Python 在使用中十分方便,并不需要IDE,而僅僅通過sublime text 就能夠?qū)Υ蟛糠值闹行?yīng)用進(jìn)行開發(fā);同時(shí),Python 爬蟲的框架功能十分強(qiáng)大,其框架能夠?qū)W(wǎng)絡(luò)數(shù)據(jù)進(jìn)行爬取,還能對(duì)結(jié)構(gòu)性的數(shù)據(jù)進(jìn)行提取,經(jīng)常用在數(shù)據(jù)的挖掘、歷史數(shù)據(jù)的存儲(chǔ)和信息的處理等程序內(nèi);另外,Python 網(wǎng)絡(luò)的支持庫和html 的解析器功能十分強(qiáng)大,借助網(wǎng)絡(luò)的支持庫通過較少代碼的編寫,就能夠進(jìn)行網(wǎng)頁的下載,且通過網(wǎng)頁的解析庫就能夠?qū)W(wǎng)頁內(nèi)各標(biāo)簽進(jìn)行解析,和正則的表達(dá)式進(jìn)行結(jié)合,十分便于進(jìn)行網(wǎng)頁內(nèi)容的抓取。
此模塊作用主要是對(duì)URL 進(jìn)行管理,包括那些已抓取和未被抓取URL 的集合,且能夠?qū)χ貜?fù)和循環(huán)等抓取問題進(jìn)行有效的預(yù)防。Python 在網(wǎng)址的管理中,主要有三種類型的途徑。首先,在內(nèi)存中進(jìn)行存儲(chǔ),且URL 的數(shù)據(jù)比較少,則通過Python 內(nèi)Set()的集合就能夠?qū)崿F(xiàn)管理,還能夠?qū)?shù)據(jù)重復(fù)進(jìn)行消除和重復(fù)抓取問題的避免;然后,在關(guān)系的數(shù)據(jù)庫內(nèi)進(jìn)行存儲(chǔ),能夠達(dá)到永久性的存儲(chǔ)目的,先進(jìn)行URL 表的建立,在此表內(nèi)包含兩個(gè)的字段,其中一個(gè)字段表示URL 的地址,而另一個(gè)的字段則體現(xiàn)是否抓取URL;另外,在緩存的數(shù)據(jù)庫內(nèi)進(jìn)行儲(chǔ)存,若URL 數(shù)據(jù)比較多,也能夠借助Set()的集合實(shí)現(xiàn),對(duì)待爬以及已爬URL 的地址進(jìn)行存取。
對(duì)于網(wǎng)頁的下載器來說,主要是把URL 所對(duì)應(yīng)網(wǎng)頁在本地內(nèi)進(jìn)行下載,并把其存作字符串,便于后續(xù)對(duì)數(shù)據(jù)實(shí)施處理。在Python可以使用網(wǎng)頁的下載工具主要有兩種,一種是Python 內(nèi)自己所具有URLlib2的模塊,對(duì)那些簡(jiǎn)單類型網(wǎng)絡(luò)爬蟲就能夠?qū)ζ渚W(wǎng)頁進(jìn)行下載,對(duì)用戶的數(shù)據(jù)進(jìn)行提交,并具有訪問代理和客戶的登錄等功能;另一種是第三方的工具包,如request 等,這種工具包的功能一般較為強(qiáng)大,但是一種第三方的軟件[2]。將百度當(dāng)作例子,對(duì)其網(wǎng)絡(luò)爬蟲的代碼進(jìn)行分析:
Import urllib2
Response.urllib2.urlopen(“http://www.baidu.com”)
Print response.read()
在此例子中,先進(jìn)行urllib2 內(nèi)url.open()方法的調(diào)入,對(duì)百度URL 進(jìn)行傳送,后對(duì)一個(gè)response 的對(duì)象進(jìn)行返回,再進(jìn)行response 對(duì)象read()方法的調(diào)入,最后返回獲取網(wǎng)頁的內(nèi)容并打印。
通過網(wǎng)頁的解析器,主要是對(duì)網(wǎng)頁內(nèi)進(jìn)行想要數(shù)據(jù)的提取,一般所提取內(nèi)容主要有URL 的列表和目標(biāo)的數(shù)據(jù)等部分。在Python 內(nèi)網(wǎng)頁的解析器存在兩種類型,一種是借助正則的表達(dá)式,其把網(wǎng)頁作為字符串進(jìn)行處理,此種類型一般用在簡(jiǎn)單網(wǎng)頁內(nèi),若網(wǎng)頁比較復(fù)雜就不適合使用此類型;另一種是借助網(wǎng)頁DOM 的結(jié)構(gòu),而DOM 呈現(xiàn)出樹形標(biāo)簽的結(jié)構(gòu),網(wǎng)頁的解析器會(huì)吧HTML 的文檔作為DOM樹并對(duì)其上下級(jí)的結(jié)構(gòu)進(jìn)行遍歷,后進(jìn)行有用信息的提取,同時(shí)這種方法通過樹形的結(jié)構(gòu)能夠?qū)W(wǎng)頁內(nèi)具體的信息節(jié)點(diǎn)和屬性等實(shí)施定位。
綜上所述,Python 是網(wǎng)絡(luò)爬蟲的技術(shù)實(shí)現(xiàn)中重要的語言腳本類型,其具有著顯著的特點(diǎn)和優(yōu)勢(shì),因此這就需要認(rèn)識(shí)到Python 的優(yōu)越性,在做好網(wǎng)絡(luò)爬蟲的良好引入同時(shí),還要對(duì)此技術(shù)進(jìn)行不斷研究和探索,從而更好發(fā)揮其在網(wǎng)絡(luò)爬蟲中的效果。