汪洋 姜新通
【摘 要】人類社會(huì)已經(jīng)進(jìn)入大數(shù)據(jù)時(shí)代,這正在改變著我們的工作和生活。隨著互聯(lián)網(wǎng)的興起和發(fā)展,同時(shí)也產(chǎn)生了各種對(duì)人類有價(jià)值的數(shù)據(jù)。快速搜索數(shù)據(jù)和充分利用數(shù)據(jù)信息已成為一個(gè)巨大挑戰(zhàn)。這樣的需求催生了搜索引擎的出現(xiàn)和發(fā)展,搜素引擎是用戶獲取網(wǎng)絡(luò)信息的重要途徑,給人們帶來了極大的便利。然而,隨著互聯(lián)網(wǎng)的不斷發(fā)展,搜索引擎已不能滿足各個(gè)領(lǐng)域的需求了,因此網(wǎng)絡(luò)爬蟲技術(shù)就應(yīng)運(yùn)而生了。而Python作為一種強(qiáng)大的語言,使得網(wǎng)絡(luò)爬蟲技術(shù)能夠更好地提取數(shù)據(jù)。
【關(guān)鍵詞】Python;搜索引擎;爬蟲技術(shù)
一、引言
隨著互聯(lián)網(wǎng)時(shí)代的快速發(fā)展,人們對(duì)網(wǎng)絡(luò)信息和數(shù)據(jù)的檢索和提取的要求也逐漸提高。由于部分信息數(shù)據(jù)搜索過于復(fù)雜,而且訪問Web檢索工具又一般都是些傳統(tǒng)的搜索引擎,它們則具有一定的局限性,往往不能滿足用戶的檢索目的和需求。因而引入網(wǎng)絡(luò)爬蟲技術(shù)則具有重大意義,考慮到Python語言目前在市場(chǎng)上十分火熱,而且在編寫爬蟲領(lǐng)域方面具有一定的優(yōu)勢(shì),為此,本文將對(duì)基于Python的網(wǎng)絡(luò)爬蟲技術(shù)展開初步的研究。
二、國(guó)內(nèi)外基于Python爬蟲技術(shù)概況
(一)網(wǎng)絡(luò)爬蟲技術(shù)概述
網(wǎng)絡(luò)爬蟲技術(shù)作為搜索引擎的重要組成部分,可以自動(dòng)地對(duì)相關(guān)頁面和內(nèi)容進(jìn)行爬蟲和保存。網(wǎng)絡(luò)爬蟲又被稱為網(wǎng)絡(luò)蜘蛛,所以可以看出爬蟲就是一只蜘蛛,而互聯(lián)網(wǎng)其實(shí)就是一張巨大的蜘蛛網(wǎng),爬蟲的目的就是將蜘蛛網(wǎng)上的獵物全部抓取起來。
(二)國(guó)內(nèi)外研究現(xiàn)狀
隨著互聯(lián)網(wǎng)的快速發(fā)展,全球互聯(lián)網(wǎng)網(wǎng)站和網(wǎng)頁的數(shù)量也在迅速增長(zhǎng),互聯(lián)網(wǎng)的信息量也呈指數(shù)級(jí)的增長(zhǎng)?;ヂ?lián)網(wǎng)是一個(gè)巨大的高度開放,缺乏管理的信息空間。雖然信息量十分巨大,但是對(duì)于用戶來說,真正有價(jià)值的信息就變得非常有限。如果用戶想要從互聯(lián)網(wǎng)上獲取有用的信息,他們需要搜素引擎的幫助,如信息檢索系統(tǒng)。搜索引擎是根據(jù)一定的策略和特定的計(jì)算機(jī)程序從互聯(lián)網(wǎng)進(jìn)行搜索的軟件系統(tǒng),在處理和處理信息后為用戶提供檢索服務(wù)。目前市場(chǎng)上比較流行的搜索引擎有百度、Google等。搜索引擎的發(fā)展伴隨著信息檢索技術(shù)的發(fā)展。1972年,APPNET實(shí)驗(yàn)網(wǎng)絡(luò)的成功標(biāo)志著互聯(lián)網(wǎng)的誕生。1993年瀏覽器的發(fā)展更是促進(jìn)了搜索引擎的快速發(fā)展。1994年由美籍華人楊致遠(yuǎn)和DavidFilo共同創(chuàng)建了世界上第一個(gè)網(wǎng)絡(luò)檢索工具Web Crawler,也就是大家所熟悉的Yahoo。
(三)爬蟲技術(shù)現(xiàn)狀和爬蟲從業(yè)者面臨的問題
網(wǎng)絡(luò)爬蟲技術(shù)發(fā)展至今,已經(jīng)有無數(shù)的開源庫和開源框架為我們提供了便利而更好地開發(fā)。例如scrapy等其他框架。有了這些開源框架就可以幫助我們根據(jù)自己想要爬取的內(nèi)容來定制爬取規(guī)則并快速地獲取到我們想要的數(shù)據(jù),而不需要我們?cè)偃?gòu)建一個(gè)符合條件的、完整的搜索器。但是在網(wǎng)絡(luò)資源爆炸的情況下,網(wǎng)頁的內(nèi)容更新的速度極為迅速,網(wǎng)頁的結(jié)構(gòu)也在時(shí)刻變化。爬蟲能否及時(shí)檢測(cè)網(wǎng)頁更新并采取相應(yīng)的對(duì)策,已成為了爬行技術(shù)是否成熟的標(biāo)識(shí)之一。在爬蟲設(shè)計(jì)過程中存在著對(duì)于統(tǒng)一資源地址的去重問題?,F(xiàn)在的網(wǎng)絡(luò)資源的規(guī)模十分龐大早已超出了我們以前的認(rèn)知范圍,所以在網(wǎng)絡(luò)中存在許多相同的統(tǒng)一資源地址。在數(shù)據(jù)的爬行過程中,網(wǎng)絡(luò)爬蟲必然會(huì)收集重復(fù)的內(nèi)容。這不僅浪費(fèi)時(shí)間成本,而且浪費(fèi)服務(wù)器等其他硬件資源。所以設(shè)計(jì)一個(gè)網(wǎng)絡(luò)爬蟲的時(shí)候,應(yīng)該考慮到爬蟲是否能夠分析網(wǎng)頁內(nèi)容結(jié)構(gòu),分辨相同內(nèi)容的腳本變化,從而找到不重復(fù)的內(nèi)容下載保存并提高運(yùn)行效率。同樣,在對(duì)網(wǎng)站信息進(jìn)行爬行的過程中,網(wǎng)站可能會(huì)限制每個(gè)IP的訪問速度或訪問次數(shù),或者有時(shí)會(huì)直接禁止訪問網(wǎng)站。由于出現(xiàn)這樣限制IP訪問的情況,會(huì)導(dǎo)致用戶不能及時(shí)獲取到信息以至于不能完成任務(wù)。所以在設(shè)計(jì)爬蟲的過程中要將IP的因素考慮到,這樣才不會(huì)出現(xiàn)限制或封鎖IP的問題。在爬取目標(biāo)網(wǎng)頁信息的過程中,多線程會(huì)提高爬蟲的速度,而所有線程在同一進(jìn)程下,線程的問題是共存空間,通訊效率高,切換開銷小。而在Python中又由于GIL全局解釋器鎖的存在,一個(gè)線程需要執(zhí)行任務(wù)必須獲取GIL,但是在Python的進(jìn)程里只有一個(gè)GIL。所以多線程在爬蟲技術(shù)設(shè)計(jì)的過程中的選擇是不可缺少的條件之一。
三、爬蟲技術(shù)中問題的解決方案介紹
網(wǎng)絡(luò)爬蟲技術(shù)中遇到的問題層出不窮,就我在爬蟲中得到的經(jīng)驗(yàn)提出以下幾種解決方案。某些網(wǎng)頁具有反爬機(jī)制,目的就是為了不讓爬蟲爬取到數(shù)據(jù)。所以當(dāng)同一個(gè)IP爬取次數(shù)過多時(shí),IP會(huì)被禁止爬取數(shù)據(jù)。使用代理后,我們可以讓爬蟲偽裝其真實(shí)的IP,所以我們使用大量的隨機(jī)的代理進(jìn)行爬行,但網(wǎng)站不知道是我們的爬蟲一直在爬行數(shù)據(jù),有效地解決了IP封鎖等反爬行的問題。在高速運(yùn)行的爬蟲工作過程中,難免會(huì)碰到URL重復(fù)的問題,我通常會(huì)采取一種簡(jiǎn)單的方式就是將訪問過的URL保存到數(shù)據(jù)庫中,這樣當(dāng)我們?cè)L問下一個(gè)URL的時(shí)候,打開數(shù)據(jù)庫去查詢這個(gè)URL是否被訪問過即可,雖然會(huì)導(dǎo)致效率下降,但是卻十分方便。IO密集型代碼在Python的多線程中占據(jù)了更好的位置。當(dāng)我們使用多線程爬取數(shù)據(jù)時(shí),會(huì)出現(xiàn)爬蟲每次都會(huì)把URL列表里URL在沒有爬取到內(nèi)容的時(shí)候就已經(jīng)生成了一個(gè)線程,如果出現(xiàn)斷網(wǎng)等其他特殊情況的話,就會(huì)有很多的URL其實(shí)沒有被爬取,之后對(duì)存儲(chǔ)文件就會(huì)變得很麻煩。對(duì)于任務(wù)數(shù)量不斷增加的程序來說,每有一個(gè)任務(wù)就會(huì)有一個(gè)新的線程生成,線程會(huì)越來越多以至于到最后不能控制,所以固定線程數(shù)量的線程是必不可少的。
四、結(jié)語
本文主要介紹基于Python的網(wǎng)絡(luò)爬蟲技術(shù)的定義和特點(diǎn),網(wǎng)絡(luò)爬蟲技術(shù)的產(chǎn)生和發(fā)展,還重點(diǎn)介紹了在爬蟲過程中遇到的問題和解決辦法。在這個(gè)大數(shù)據(jù)時(shí)代,網(wǎng)絡(luò)爬蟲技術(shù)可以有效準(zhǔn)確地抓取目標(biāo)數(shù)據(jù),可以為我們節(jié)省大量的時(shí)間和資源,對(duì)信息檢索起著十分重要的作用。尤其基于Python的網(wǎng)絡(luò)爬蟲技術(shù)更具有必要性,它更能夠滿足未來信息檢索的要求。因此它具有很高的發(fā)展前景,同樣也具有一定的推廣價(jià)值和研究?jī)r(jià)值。
【參考文獻(xiàn)】
[1]許劍穎.搜索引擎發(fā)展趨勢(shì)研究[J].中國(guó)科技縱橫,2013(2):51-55
[2]郭麗蓉.基于Python的網(wǎng)絡(luò)爬蟲程序設(shè)計(jì)[J].電子技術(shù)與軟件工程,2017(12):23-24
[3]王曉東.基于元搜索引擎的網(wǎng)絡(luò)視頻搜索系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].東南大學(xué).2014