国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Python的專業(yè)網(wǎng)絡(luò)爬蟲的設(shè)計與實現(xiàn)

2016-05-30 10:48姜杉彪黃凱林盧昱江張俊杰曾志高劉強(qiáng)
企業(yè)科技與發(fā)展 2016年8期
關(guān)鍵詞:網(wǎng)絡(luò)爬蟲搜索引擎數(shù)據(jù)挖掘

姜杉彪 黃凱林 盧昱江 張俊杰 曾志高 劉強(qiáng)

【摘 要】網(wǎng)絡(luò)爬蟲,又稱網(wǎng)頁蜘蛛、網(wǎng)絡(luò)機(jī)器人。隨著計算機(jī)技術(shù)的高速發(fā)展,互聯(lián)網(wǎng)中的信息量越來越大,搜索引擎應(yīng)運(yùn)而生。傳統(tǒng)的搜索引擎會有返回結(jié)果不精確等局限性。為了解決傳統(tǒng)搜索引擎的局限性,專用型網(wǎng)絡(luò)爬蟲在互聯(lián)網(wǎng)中越來越常見。同時,專用型網(wǎng)絡(luò)爬蟲具有專用性,可以根據(jù)制定的規(guī)則和特征,最后只體現(xiàn)和篩選出有用的信息。

【關(guān)鍵詞】Python;網(wǎng)絡(luò)爬蟲;數(shù)據(jù)挖掘;搜索引擎

【中圖分類號】TP393 【文獻(xiàn)標(biāo)識碼】A 【文章編號】1674-0688(2016)08-0017-03

0 引言

在搜索引擎的使用過程中,用戶認(rèn)為通用搜索引擎都有一個局限性,那就是在搜索結(jié)果中附帶太多不必要的信息。用戶在使用搜索引擎后,仍然需要人為地從搜索結(jié)果中尋找檢索最終需要的信息。然而,在互聯(lián)網(wǎng)飛速發(fā)展的狀況下,網(wǎng)絡(luò)信息量突發(fā)式的暴增,計算機(jī)硬件設(shè)備的技術(shù)不斷進(jìn)步,網(wǎng)絡(luò)的信息容量和帶寬也是日新月異,在互聯(lián)網(wǎng)中出現(xiàn)了多媒體和富文本的新技術(shù)。隨著這些信息的不斷增加和積累,通用搜索引擎對類似這種多媒體或者富文本的搜索能力越來越差[1-2]。

為了解決部分用戶對信息的檢索要求,專用型網(wǎng)絡(luò)爬蟲應(yīng)運(yùn)而生,為用戶提供特定的信息抓取,開發(fā)出不同特性的專用型網(wǎng)絡(luò)爬蟲[3]。本文以網(wǎng)易新聞爬蟲實例為引導(dǎo),對如何開發(fā)出專用型網(wǎng)絡(luò)爬蟲及制定不同的爬蟲策略進(jìn)行了深入的研究。

1 爬蟲系統(tǒng)需求分析與設(shè)計

為了保證網(wǎng)絡(luò)爬蟲系統(tǒng)的開發(fā)過程順利,以及保證最終的開發(fā)結(jié)果能滿足基本的功能需求,必須在開發(fā)系統(tǒng)之前進(jìn)行分析,并設(shè)計出符合該系統(tǒng)的代碼規(guī)范及功能模塊等。整個網(wǎng)絡(luò)爬蟲系統(tǒng)均使用模塊化設(shè)計,一個功能類作為一個功能模塊。這樣做的目的是一方面可以便于代碼的維護(hù),另一方面可以增加代碼的重用性。通過將整個系統(tǒng)進(jìn)行模塊劃分,每個功能模塊只實現(xiàn)一個功能,最后所有的模塊功能完成后,整個網(wǎng)絡(luò)爬蟲系統(tǒng)就能實現(xiàn)當(dāng)初進(jìn)行定義的系統(tǒng)功能[4-5]。本系統(tǒng)的需求分析的任務(wù)是通過調(diào)查特定用戶的上網(wǎng)行為習(xí)慣,開發(fā)符合一類上網(wǎng)用戶使用的專用型網(wǎng)絡(luò)爬蟲,根據(jù)用戶的功能需求明確系統(tǒng)需要實現(xiàn)的各個功能。并且,在設(shè)計系統(tǒng)的同時,需要考慮系統(tǒng)今后的維護(hù)及改進(jìn)問題。本文以網(wǎng)易新聞爬蟲系統(tǒng)為例,探討專用爬蟲系統(tǒng)的設(shè)計與實現(xiàn)。

1.1 功能性需求分析

網(wǎng)易新聞爬蟲的具體功能包括對新聞標(biāo)題、新聞ID、新聞來源等信息進(jìn)行抓取并存入數(shù)據(jù)庫中。網(wǎng)易新聞爬蟲需要抓取的URL鏈接是變化的,而不是固定的,因此在爬蟲的URL策略中,需要解決URL鏈接的訪問策略和去重。原站點(diǎn)網(wǎng)易新聞中的各類新聞,根據(jù)分析可以看出,所有新聞一旦發(fā)布就不會對新聞內(nèi)容進(jìn)行二次更新,因此網(wǎng)易新聞爬蟲最終的抓取結(jié)果不需要對數(shù)據(jù)庫中已存在的新聞進(jìn)行更新操作,只需將網(wǎng)站更新的新聞進(jìn)行入庫操作。網(wǎng)易新聞爬蟲架構(gòu)圖如圖1所示。

當(dāng)中,Scarpy Engine是一個抽象的爬蟲框架引擎,控制爬蟲的所有操作;Spider類為爬蟲主要的頁面處理模塊類,Item Pipleline組件可以實現(xiàn)清理HTML數(shù)據(jù),或者驗證抓取的數(shù)據(jù)。

1.2 爬蟲功能設(shè)計

網(wǎng)易新聞爬蟲功能的具體設(shè)計思路如下:首先,網(wǎng)易新聞爬蟲不會與前端頁面進(jìn)行直接交互,而是通過系統(tǒng)設(shè)置的定時任務(wù),對爬蟲進(jìn)行定時執(zhí)行,從而達(dá)到一個自動定時向原站點(diǎn)抓取新聞的爬蟲功能。其次,網(wǎng)易爬蟲被系統(tǒng)定時任務(wù)激活后,爬蟲根據(jù)定義的URL規(guī)則對原站點(diǎn)的站點(diǎn)目錄進(jìn)行正則匹配,符合正則匹配的URL鏈接則進(jìn)行抓取,并且對抓取結(jié)果進(jìn)行過濾和提取需要的信息。最后,將抓取的新聞信息和數(shù)據(jù)庫進(jìn)行對比,數(shù)據(jù)庫中沒有該新聞則進(jìn)行插入更新,有則停止爬蟲,其流程如圖2所示。

2 爬蟲頁面抓取模塊

爬蟲的頁面抓取模塊是爬蟲程序的第一個執(zhí)行模塊。在頁面抓取實施之前,需要獲得目標(biāo)站點(diǎn)的狀態(tài),以及DNS解析和記錄去重等各種功能。在爬蟲進(jìn)行頁面抓取的時候,必須保證目標(biāo)站點(diǎn)的狀態(tài)是可抓取的。因此,部分目標(biāo)站點(diǎn)如果要用戶登錄后才可以請求相應(yīng)的服務(wù)器資源,則必須對該目標(biāo)站點(diǎn)進(jìn)行模擬登錄后才可進(jìn)行頁面抓取。

通過模擬登錄可以解決目標(biāo)站點(diǎn)的登錄限制。模擬登錄采用完全遵循目標(biāo)站點(diǎn)的登錄規(guī)則,使用用戶的用戶名、密碼、cookies和偽造User-Agent及Referer。最后通過返回的session與服務(wù)器進(jìn)行請求交互并且進(jìn)行頁面抓取,完成整個頁面抓取的過程。

DNS解析和URL記錄去重是頁面抓取模塊比較重要的一環(huán)。當(dāng)大量的頁面需要進(jìn)行頁面抓取,以為頁面抓取都是通過URL地址進(jìn)行抓取,因此在請求URL時,需要對URL進(jìn)行解析。當(dāng)需要解析URL的記錄非常多時,DNS解析就有可能是頁面抓取的瓶頸部分,要處理DNS解析的瓶頸,最直接的方法是對DNS解析結(jié)果進(jìn)行本地緩存。

記錄去重是一種對已經(jīng)抓取的URL地址進(jìn)行記錄去重。頁面抓取在一定的時間內(nèi),只需要進(jìn)行一次抓取。為了避免重復(fù)抓取的現(xiàn)象造成系統(tǒng)性能差及提升信息的高效性,因此在頁面抓取過程中,做好對應(yīng)的記錄去重。

3 爬蟲頁面處理模塊

對頁面抓取結(jié)果需要進(jìn)行相應(yīng)的處理。頁面處理包含了對HTML源碼的處理和過濾,過濾出需要的信息,最后對過濾出的信息進(jìn)行整合,并進(jìn)行入庫操作。通常利用正則表達(dá)式來進(jìn)行頁面處理,但是當(dāng)HTML源碼非常多時,在編寫正則表達(dá)式時會顯得非常困難。

接下來利用XPath對HTML源碼進(jìn)行過濾操作,通常不同的處理需求,定義不同的XPath語法。例如,get_title方法的XPath語法如下所示:title=response.xpath("/ html/head/

title/text ()").extract()。僅需通過該XPath語法,就能過濾出新聞的標(biāo)題,而不需要編寫復(fù)雜的正則表達(dá)式對象。再如,get_source方法的XPath語法如下所示:source=response.xpath("http://div[@class='ep-time-sourec-

DGray']/text()").extract()。經(jīng)過get_title和get_source這幾種方法后,頁面處理模塊最終可以得到一條新聞中例如新聞編號、新聞標(biāo)題、新聞來源等這些信息。得到這些原始數(shù)據(jù)后,將這些數(shù)據(jù)整合為一個列表,傳遞到爬蟲入庫模塊中。流程如圖3所示。

4 爬蟲系統(tǒng)功能實現(xiàn)

網(wǎng)易新聞的功能界面中,由于網(wǎng)易新聞的不定期更新,為了節(jié)約服務(wù)器的資源利用,設(shè)置網(wǎng)易爬蟲的工作時間是每一個小時自動執(zhí)行一次。在網(wǎng)易新聞的功能界面中,顯示的是當(dāng)天所有的新聞,點(diǎn)擊新聞的標(biāo)題,就可以跳轉(zhuǎn)到原網(wǎng)站網(wǎng)易新聞的對應(yīng)新聞界面中(如圖4所示)。

爬蟲程序根據(jù)定義的URL規(guī)則,可以對原站點(diǎn)所有符合正則匹配的URL鏈接進(jìn)行抓取處理。

day = time.strftime('%m%d')

name = "news"

allowed_domains = ["tech.163.com"]

start_urls = ['http://tech.163.com']

rules = [

Rule(LinkExtractor(allow=r"/15/" + day + "/\d+/*"),

callback="parse_news",follow=True)]

5 結(jié)論

本文通過使用Python語言的庫的調(diào)用,實現(xiàn)了一個簡單的網(wǎng)絡(luò)爬蟲系統(tǒng)。頁面抓取的效率及結(jié)果也是對爬蟲性能的一個考驗。整個互聯(lián)網(wǎng)的站點(diǎn)數(shù)量龐大,所有站點(diǎn)的開發(fā)過程中遵循的原則不一致,代碼風(fēng)格不一致。因此對整個爬蟲的頁面抓取模塊是非常大的挑戰(zhàn),需要對不同的代碼風(fēng)格做不同的處理,但是最終得到的結(jié)果需要是一樣的。在將來的工作中,我們將進(jìn)一步提高爬蟲的速度。

參 考 文 獻(xiàn)

[1]李勇,韓亮.主題搜索引擎中網(wǎng)絡(luò)爬蟲的搜索策略研究[J].計算機(jī)與數(shù)字工程,2008,228(10):50-53.

[2]羅剛,王振東.自己動手寫網(wǎng)絡(luò)爬蟲[M].北京:清華大學(xué)出版社,2010.

[3](美)Miguel Grinberg.Flask Web開發(fā)[M].安道,譯.北京:人民郵電出版社,2015.

[4]Magnus Lie Hetland.Python基礎(chǔ)教程(第二版)[M].司維,曾軍崴,譚穎華,等,譯.北京:人民郵電出版社,2010.

[5]葉允明,于水,馬范援,等.分布式Web Crawler的研究:結(jié)構(gòu)、算法和策略[J].電子學(xué)報,2002,30(12):2008-2011.

[責(zé)任編輯:鐘聲賢]

猜你喜歡
網(wǎng)絡(luò)爬蟲搜索引擎數(shù)據(jù)挖掘
探討人工智能與數(shù)據(jù)挖掘發(fā)展趨勢
基于并行計算的大數(shù)據(jù)挖掘在電網(wǎng)中的應(yīng)用
煉鐵廠鐵量網(wǎng)頁數(shù)據(jù)獲取系統(tǒng)的設(shè)計與實現(xiàn)
基于社會網(wǎng)絡(luò)分析的權(quán)威網(wǎng)頁挖掘研究
主題搜索引擎中網(wǎng)絡(luò)爬蟲的實現(xiàn)研究
淺析如何應(yīng)對網(wǎng)絡(luò)爬蟲流量
一種基于Hadoop的大數(shù)據(jù)挖掘云服務(wù)及應(yīng)用
網(wǎng)絡(luò)搜索引擎亟待規(guī)范
Nutch搜索引擎在網(wǎng)絡(luò)輿情管控中的應(yīng)用
基于Nutch的醫(yī)療搜索引擎的研究與開發(fā)