魯鑫 肖小玲
摘要:本文先簡述scrapy框架的平臺(tái)架構(gòu),然后介紹了網(wǎng)絡(luò)爬蟲的流程,并說明了爬蟲程序的設(shè)計(jì)與實(shí)現(xiàn)的基本流程?;谶@些技術(shù),本文設(shè)計(jì)實(shí)現(xiàn)了基于Scrapy框架下的網(wǎng)絡(luò)爬蟲。本文給出了網(wǎng)絡(luò)爬蟲的主要流程,以及主要的模塊,包括item模塊、spider模塊以及scheduler模塊。并且,本文對(duì)網(wǎng)絡(luò)爬蟲的具體實(shí)現(xiàn)進(jìn)行了介紹,包括UA的實(shí)現(xiàn)、頁面抓取的實(shí)現(xiàn)、數(shù)據(jù)提取的實(shí)現(xiàn)等。最后,本設(shè)計(jì)在Linux操作系統(tǒng)下進(jìn)行了相關(guān)測(cè)試。對(duì)網(wǎng)絡(luò)爬蟲的功能和性能進(jìn)行了測(cè)試,爬蟲的運(yùn)行總體來說較為順利,且對(duì)電腦性能的要求不高。該爬蟲基本完成了本文的研究目的。通過本次的研究,對(duì)網(wǎng)絡(luò)爬蟲的設(shè)計(jì)與實(shí)現(xiàn)有了更深的理解。也對(duì)scrapy框架有了更加深刻的認(rèn)識(shí)。
關(guān)鍵詞:網(wǎng)絡(luò)爬蟲;Scrapy框架;數(shù)據(jù)提取;頁面抓取
中圖分類號(hào):TP311? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2021)23-0134-03
1 前言
在如今信息高速發(fā)展的萬維網(wǎng)上,像百度、谷歌這些傳統(tǒng)引擎對(duì)信息的搜索全都是在對(duì)關(guān)鍵字處理的方式的基礎(chǔ)上進(jìn)行的,并不能精確的定位用戶的需求,這種對(duì)信息的搜索處理方式有著天然的劣勢(shì)和局限。首先,它不能很好地定位用戶所需的精確數(shù)據(jù),其次,它所返回的數(shù)據(jù)是非常繁多冗雜的,其中包含大量用戶所不關(guān)心的數(shù)據(jù),這對(duì)用戶在進(jìn)行數(shù)據(jù)查看是非常沉重的。
為了對(duì)萬維網(wǎng)上的數(shù)據(jù)進(jìn)行特定的搜索,各種搜索引擎也是層出不窮,搜索引擎在數(shù)據(jù)搜集中站著越來越重要的地位,但正是因?yàn)樾畔⒌母咚侔l(fā)展,用戶對(duì)信息的搜索也是越來越嚴(yán)苛,如今的搜索引擎也越來越難以滿足用戶的需求[1]。
萬維網(wǎng)其實(shí)就是一個(gè)巨大信息和數(shù)據(jù)的集合,只是這種集合并沒有規(guī)律可言。但如果我們將這種集合通過特定的技術(shù)和手段進(jìn)行有效的檢索,在擁有巨大用戶的情況下,這種檢索將會(huì)具有不可衡量的價(jià)值和作用。而傳統(tǒng)搜索引擎對(duì)數(shù)據(jù)的處理并不能完全滿足用戶的需求。用戶在不同的地點(diǎn)和不同的時(shí)間,往往有著不一樣的數(shù)據(jù)需求。傳統(tǒng)引擎所返回的數(shù)據(jù)包含大量用戶完全不關(guān)心的內(nèi)容,也并不能對(duì)用戶的需求進(jìn)行精確的定位。一個(gè)靈活高效又能完全符合用戶需求的爬蟲設(shè)計(jì)就越來越具有現(xiàn)實(shí)意義。
2 發(fā)展現(xiàn)狀及存在問題
此課題主要的目的是利用scrapy_redis 框架類建立分布式的斷點(diǎn)續(xù)爬的網(wǎng)絡(luò)爬蟲程序,同時(shí)要保證爬取數(shù)據(jù)時(shí)代碼的穩(wěn)定性和高效性,又能完全滿足用戶對(duì)數(shù)據(jù)精確抓取的需求[2]。
爬蟲的基本原理是運(yùn)用xpath 進(jìn)行對(duì)url 進(jìn)行定位,并用文本定位工具對(duì)用戶所需求的數(shù)據(jù)進(jìn)行精確抓取。為了使網(wǎng)絡(luò)爬蟲的效率更高,在設(shè)計(jì)爬蟲程序時(shí)就必須利用redis 數(shù)據(jù)庫進(jìn)行服務(wù)器之間的連接,實(shí)現(xiàn)多臺(tái)服務(wù)器共同爬取數(shù)據(jù)的功能。通過對(duì)IP池和UA的設(shè)置,避免了我們爬蟲被對(duì)方服務(wù)器識(shí)別為惡意程序的情況。在以上技術(shù)理論的支持下,我們所設(shè)計(jì)的爬蟲程序要既能實(shí)現(xiàn)高效抓取數(shù)據(jù)、又能根據(jù)用戶的需求對(duì)數(shù)據(jù)進(jìn)行精確定位的功能[3]。
其實(shí),傳統(tǒng)搜索引擎的缺點(diǎn)早就20世紀(jì)已經(jīng)被發(fā)現(xiàn)了,對(duì)于爬蟲的研究也早已開始了。隨著年代的發(fā)展,爬蟲的技術(shù)也越來越多,越來越完善穩(wěn)定。萬維網(wǎng)上的數(shù)據(jù)是以完全虛擬的方式存在于我們的認(rèn)知中,由于傳統(tǒng)搜索引擎的存在,我們才能將萬維網(wǎng)上的數(shù)據(jù)以實(shí)體的形式呈現(xiàn)在我們的眼前,變成一個(gè)我們可知、可感的真實(shí)存在體。但是,不能對(duì)數(shù)據(jù)進(jìn)行特定搜索和特定抓取的傳統(tǒng)搜索引擎,只能以web1.0的形式存在。
未來的發(fā)展中,萬維網(wǎng)中的數(shù)據(jù)抓取、精確定位和特定篩選,是會(huì)占據(jù)主流地位的。這種對(duì)數(shù)據(jù)的篩選會(huì)越來越滿足用戶的需求。利用scrapy_redis 框架所設(shè)計(jì)的爬蟲程序正好定位了用戶的精確需求,日后,也會(huì)越來越盛行。如今網(wǎng)絡(luò)上的各種數(shù)據(jù)篩選和文本定位及分析工具會(huì)為未來的爬蟲奠定基調(diào)。這種基調(diào)的奠定,可能會(huì)促使傳統(tǒng)搜索引擎的改革,而這種改革,將會(huì)成為一次重大意義的蛻變,對(duì)用戶來說,也是具有促進(jìn)意義的。本課題主要研究scrapy分布式爬蟲框架的搭建和 在scrapy框架下設(shè)計(jì)與實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲,實(shí)現(xiàn)在終端控制、后臺(tái)自動(dòng)運(yùn)行的爬蟲程序[4]。3 爬蟲發(fā)展需求分析
網(wǎng)絡(luò)爬蟲其實(shí)就是一個(gè)專門從互聯(lián)網(wǎng)上下載網(wǎng)頁并分析網(wǎng)頁的自動(dòng)化程序。它將下載的網(wǎng)頁內(nèi)容和采集到的數(shù)據(jù)儲(chǔ)存在數(shù)據(jù)庫中。伴隨著起始url的抓取又不斷從抓取到的網(wǎng)頁中抽取新的url 放入到待抓取url 隊(duì)列中,直到爬蟲程序所抓取的數(shù)去能夠滿足用戶的精確需求,這是搜索程序的重要組成部分[6]。
(1)網(wǎng)頁下載功能
1)下載任何能滿足http協(xié)議和https協(xié)議的網(wǎng)頁。
2)HTTP響應(yīng)中構(gòu)造GET請(qǐng)求。
3)HTTP響應(yīng)請(qǐng)求分析。
(2)網(wǎng)頁分析功能
1)網(wǎng)頁標(biāo)題提取。
2)網(wǎng)頁關(guān)鍵字提取。
3)網(wǎng)頁摘要提取。
4)網(wǎng)頁鏈接并統(tǒng)計(jì)數(shù)量提取。
5)將新url 加入待爬取URL隊(duì)列。
(3)內(nèi)存池功能
1)固定大小內(nèi)存分配。
2)內(nèi)存對(duì)象回收。
3)內(nèi)存對(duì)象釋放。
4)內(nèi)存池銷毀。
(4)保存功能
1)能夠正確將網(wǎng)頁內(nèi)容以及數(shù)據(jù)保存到數(shù)據(jù)庫中。
2)將程序運(yùn)行時(shí)的異常寫入日志文件。
4 通用爬蟲和聚焦爬蟲
結(jié)合使用場(chǎng)景的不同,網(wǎng)絡(luò)爬蟲有通用爬蟲與聚焦爬蟲兩種。
百度、谷歌、雅虎等傳統(tǒng)的大型搜索引擎的基本原理就是通用網(wǎng)絡(luò)爬蟲的基本原理,將萬維網(wǎng)上的網(wǎng)頁采集到本地時(shí)它的主要目的,這樣可以創(chuàng)造一個(gè)互聯(lián)網(wǎng)網(wǎng)頁內(nèi)容的鏡像備份。
通用網(wǎng)絡(luò)爬蟲從互聯(lián)網(wǎng)中搜集網(wǎng)頁,采集信息,這些網(wǎng)頁信息用于為搜索引擎建立索引從而提供支持,它決定著整個(gè)引擎系統(tǒng)的內(nèi)容是否豐富,信息是否即時(shí)。