劉文輝 李麗
摘 要:面對(duì)數(shù)據(jù)大爆炸,人們很難獲取有用的信息。網(wǎng)絡(luò)爬蟲(chóng)技術(shù)成為了搜索引擎中最為重要的部分,能夠有效的在海量數(shù)據(jù)中找到有價(jià)值的信息。本論文從不同方面基于python的網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的研究,希望為研究網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的專家和學(xué)者提供理論參考依據(jù)。
關(guān)鍵詞:python;網(wǎng)絡(luò)爬蟲(chóng)技術(shù);分析
隨著我國(guó)社會(huì)化和移動(dòng)互聯(lián)網(wǎng)的逐步發(fā)展,網(wǎng)絡(luò)上的數(shù)據(jù)呈爆炸式增長(zhǎng)。數(shù)據(jù)大爆炸,導(dǎo)致了那些有需要的人們?cè)诰W(wǎng)上找他們所需的信息愈發(fā)的困難,由此搜索引擎根據(jù)這種需求產(chǎn)生了。這個(gè)時(shí)候我們需要搜索引擎去解決的困難,不僅僅是幫助人們從大量的數(shù)據(jù)里找到答案,還要在大量的答案里面找到人們最需要的結(jié)果,迅速快捷的找到精準(zhǔn)答案比找到很多無(wú)用答案更被人們所需要。搜素引擎要做什么呢?搜索引擎需要從海量數(shù)據(jù)中提取價(jià)值,即為數(shù)據(jù)挖掘。從本質(zhì)上看,搜索引擎是一個(gè)典型的大數(shù)據(jù)應(yīng)用。網(wǎng)絡(luò)爬蟲(chóng)技術(shù)在搜索引擎中,是很關(guān)鍵也很基礎(chǔ)的構(gòu)件。搜索引擎聚集了網(wǎng)絡(luò)中成千上萬(wàn)的信息網(wǎng)頁(yè),并為網(wǎng)頁(yè)中逐個(gè)詞建立索引。在人們?cè)O(shè)立搜索引擎的過(guò)程中,采集信息網(wǎng)頁(yè)是一個(gè)很重要的部分。爬蟲(chóng)程序就是用來(lái)搜集網(wǎng)頁(yè)的程序。網(wǎng)絡(luò)爬蟲(chóng)是搜索引擎中信息采集的部分,整個(gè)搜索引擎索引網(wǎng)頁(yè)的質(zhì)量、數(shù)量和更新周期,都會(huì)受網(wǎng)絡(luò)爬蟲(chóng)技術(shù)性能的影響。因此對(duì)于網(wǎng)絡(luò)爬蟲(chóng)的研究具有深遠(yuǎn)的意義。
1 網(wǎng)絡(luò)爬蟲(chóng)以及網(wǎng)絡(luò)爬行
網(wǎng)絡(luò)爬蟲(chóng)(Web Crawler)是搜索引擎的最基礎(chǔ)部分,主要是一個(gè)能夠下載網(wǎng)頁(yè)的計(jì)算機(jī)程序或者腳本,又被稱為網(wǎng)絡(luò)蜘蛛(Web Spider)。一般而言,網(wǎng)絡(luò)爬蟲(chóng)從種子集的URL 集合開(kāi)始運(yùn)行,先將 URL 放入一個(gè)有序隊(duì)列中,然后按照一定的順序?qū)?URL 取出,然后下載所對(duì)應(yīng)的頁(yè)面。經(jīng)過(guò)對(duì)網(wǎng)絡(luò)頁(yè)面的分析,獲取新的 URL,并將其放入有序隊(duì)列中,如此反復(fù),直到隊(duì)列為空或者是滿足停止爬行的條件,從而遍歷整個(gè)網(wǎng)絡(luò)。這便是網(wǎng)絡(luò)爬蟲(chóng)的運(yùn)行過(guò)程,稱為網(wǎng)絡(luò)爬行(Web Crawling)。
2 網(wǎng)絡(luò)爬蟲(chóng)的分類
網(wǎng)絡(luò)爬蟲(chóng)的分類比較多,根據(jù)其結(jié)構(gòu)和實(shí)現(xiàn)技術(shù)主要可以分為通用網(wǎng)絡(luò)爬蟲(chóng)、聚焦網(wǎng)絡(luò)爬蟲(chóng)、增量式網(wǎng)絡(luò)爬蟲(chóng)以及深層網(wǎng)絡(luò)爬蟲(chóng)四種,實(shí)際應(yīng)用中的網(wǎng)絡(luò)爬蟲(chóng)一般是多種及技術(shù)結(jié)合實(shí)現(xiàn)的。
2.1通用網(wǎng)絡(luò)爬蟲(chóng)
一般情況下,通用網(wǎng)絡(luò)爬蟲(chóng)對(duì)爬行頁(yè)面的順序要求不高,大多采用并行的工作方式,刷新頁(yè)面需要的時(shí)間比較長(zhǎng)。因此,通用網(wǎng)絡(luò)爬蟲(chóng)往往會(huì)采用一定的爬行策略來(lái)縮短爬行時(shí)間,比較常用的有深度優(yōu)先和廣度優(yōu)先兩種。深度優(yōu)先是指按照深度由低到高訪問(wèn)鏈接,直到無(wú)法再深入;廣度優(yōu)先是指首先爬行網(wǎng)頁(yè)的淺目錄內(nèi)容,然后爬行深目錄內(nèi)容。比較常見(jiàn)的通用網(wǎng)絡(luò)爬蟲(chóng)有 Mercator 和Google Crawler。Google Crawler 是一個(gè)分布式的爬蟲(chóng),它利用異步 I/O 來(lái)實(shí)現(xiàn)并行化,并且擁有獨(dú)立的進(jìn)程來(lái)維護(hù) URL 隊(duì)列,Google Crawler 還使用了PageRank 等多種算法來(lái)提高系統(tǒng)的性能。
2.2聚焦網(wǎng)絡(luò)爬蟲(chóng)
聚焦網(wǎng)絡(luò)爬蟲(chóng)能夠選擇性的爬行與預(yù)設(shè)主題相關(guān)的頁(yè)面。聚焦爬蟲(chóng)的爬行范圍小,能夠有效的節(jié)省網(wǎng)絡(luò)資源,并且頁(yè)面更新比較快。聚焦網(wǎng)絡(luò)爬蟲(chóng)的爬行策略主要由頁(yè)面的內(nèi)容評(píng)價(jià)以及連接的結(jié)構(gòu)評(píng)價(jià)決定。在基于內(nèi)容評(píng)價(jià)的爬行策略中,主要采用 Fish Search 算法來(lái)評(píng)價(jià)查詢頁(yè)面與查詢主題的相關(guān)度;在基于連接結(jié)構(gòu)評(píng)價(jià)的爬行策略中,主要 PageRank 算法來(lái)評(píng)價(jià)鏈接的重要性,具體就是優(yōu)先訪問(wèn) PageRank 值最大的頁(yè)面;在基于增強(qiáng)學(xué)習(xí)的爬行策略中,利用貝葉斯分類器對(duì)文本進(jìn)行分類,從而計(jì)算出不同鏈接的重要性,從而確定訪問(wèn)順序。
2.3增量式網(wǎng)絡(luò)爬蟲(chóng)
增量式網(wǎng)頁(yè)爬蟲(chóng)主要是對(duì)已經(jīng)下載的網(wǎng)頁(yè)進(jìn)行更新,只爬行更新的網(wǎng)頁(yè),從而保證刷新出的網(wǎng)頁(yè)是最新的。增量式網(wǎng)絡(luò)爬蟲(chóng)一般只在頁(yè)面需要時(shí)才會(huì)開(kāi)始爬行,不會(huì)重復(fù)下載沒(méi)有發(fā)生變化的網(wǎng)頁(yè),因此在很大程度上減少了網(wǎng)絡(luò)資源的浪費(fèi),但是算法比較復(fù)雜且實(shí)現(xiàn)難度比較大。
3 基于Python的網(wǎng)絡(luò)爬蟲(chóng)分析
3.1 Python語(yǔ)言的優(yōu)越性
(1)方便簡(jiǎn)單,容易上手。Python幾乎能在所有的操作系統(tǒng)上運(yùn)行,很容易上手,初學(xué)者可以快速適應(yīng)。
(2)Python是一個(gè)廣泛使用的腳本語(yǔ)言,其自帶了urllib、url-lib2等爬蟲(chóng)最基本的庫(kù),可以抓取Url的內(nèi)容。
(3)Python擅長(zhǎng)處理字節(jié)流的各種模式,具有很好的開(kāi)發(fā)速度。
3.2 Python網(wǎng)絡(luò)爬蟲(chóng)模塊
3.2.1 Url管理模塊
Url管理模塊的作用是管理Url,包括已經(jīng)被抓取的Url集合和還未被抓取的Url集合。Url管理模塊可以有效預(yù)防重復(fù)抓取循環(huán)抓取的問(wèn)題。
Python中實(shí)現(xiàn)網(wǎng)址管理有三種途徑:
(1)存儲(chǔ)在內(nèi)存中,針對(duì)于Url數(shù)據(jù)較少的情況。在Python中用Set()集合加以實(shí)現(xiàn),Set()可以消除重復(fù)數(shù)據(jù),避免重復(fù)抓取的問(wèn)題。
(2)存儲(chǔ)在關(guān)系數(shù)據(jù)庫(kù),實(shí)現(xiàn)永久存儲(chǔ)。建立Url表,該表中有兩個(gè)字段,一個(gè)字段是Url地址,另一個(gè)字段用來(lái)表示Url是否被抓取。
(3)存儲(chǔ)在緩存數(shù)據(jù)庫(kù)redis中,針對(duì)于Url數(shù)據(jù)較多的情況下。也可以用Set()集合來(lái)實(shí)現(xiàn),來(lái)存取“待爬”的Url地址和“已爬”的Url地址。
3.2.2 網(wǎng)頁(yè)下載器
網(wǎng)頁(yè)下載器將Url對(duì)應(yīng)的網(wǎng)頁(yè)下載到本地,將其存儲(chǔ)為字符串,以便接下來(lái)對(duì)數(shù)據(jù)進(jìn)行處理。
Python支持的網(wǎng)頁(yè)下載工具有兩種:Python自身攜帶的urllib2模塊。urllib2針對(duì)于簡(jiǎn)單的網(wǎng)絡(luò)爬蟲(chóng),能夠完成網(wǎng)頁(yè)下載,提交用戶數(shù)據(jù),代理訪問(wèn),客戶登錄等多種功能。
3.2.3 網(wǎng)頁(yè)解析器
網(wǎng)頁(yè)解析器用來(lái)從網(wǎng)頁(yè)中提取從最初想要的數(shù)據(jù)。實(shí)則上提取的是兩部分:(1)Url列表;(2)目標(biāo)數(shù)據(jù)。Python中的網(wǎng)頁(yè)解析器有兩種類型:
(1)利用正則表達(dá)式。正則表達(dá)式將網(wǎng)頁(yè)當(dāng)作字符串來(lái)處理,只適用于簡(jiǎn)單的網(wǎng)頁(yè)。一般網(wǎng)頁(yè)較為復(fù)雜時(shí),不采用此類方法。
(2)基于網(wǎng)頁(yè)的DOM結(jié)構(gòu)。DOM樹(shù)是一種樹(shù)形標(biāo)簽結(jié)構(gòu)。網(wǎng)頁(yè)解析器會(huì)將HTML文檔當(dāng)成DOM樹(shù),對(duì)其進(jìn)行上下級(jí)結(jié)構(gòu)的遍歷來(lái)提取有用信息。使用樹(shù)形結(jié)構(gòu)可以對(duì)網(wǎng)頁(yè)中的具體信息來(lái)進(jìn)行定位,定位到具體的某個(gè)節(jié)點(diǎn)、屬性等。其中BeautifulSoup解析器功能強(qiáng)大,更為盛行。BeautifulSoup利用find_all()和find()方法來(lái)搜索節(jié)點(diǎn),find_all()可以查找所有符合查詢條件的標(biāo)簽節(jié)點(diǎn),并返回一個(gè)列表。find()方法查找符合查詢條件的第一個(gè)標(biāo)簽節(jié)點(diǎn)。用這兩種方法搜索節(jié)點(diǎn),提取有價(jià)值信息。
參考文獻(xiàn)
[1]大數(shù)據(jù)環(huán)境下的網(wǎng)絡(luò)爬蟲(chóng)設(shè)計(jì)[J].郭麗蓉.山西電子技術(shù).2018(02)
[2]基于網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的時(shí)令旅游信息獲取[J].鄭鑫臻,吳韶波.物聯(lián)網(wǎng)技術(shù).2018(05)
[3]主題網(wǎng)絡(luò)爬蟲(chóng)抓取策略的研究[J].劉清.科技廣場(chǎng).2017(04)
[4]網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的研究與實(shí)現(xiàn)[J].繆治.中國(guó)新通信.2019(06)
[5]基于匿名網(wǎng)絡(luò)的網(wǎng)絡(luò)爬蟲(chóng)設(shè)計(jì)與實(shí)現(xiàn)分析[J].劉煥欣.計(jì)算機(jī)產(chǎn)品與流通.2017(12)
[6]主題網(wǎng)絡(luò)爬蟲(chóng)關(guān)鍵技術(shù)的應(yīng)用探討[J].楊凌云.電腦編程技巧與維護(hù).2018(11)
[7]網(wǎng)絡(luò)爬蟲(chóng)技術(shù)在電力產(chǎn)業(yè)中的應(yīng)用[J].賀冠博,蘇宇琦,黃源.電子技術(shù)與軟件工程.2017(18)
[8]一種新的主題網(wǎng)絡(luò)爬蟲(chóng)爬行策略[J].宋海洋,劉曉然,錢海俊.計(jì)算機(jī)應(yīng)用與軟件.2011(11)