分布式網(wǎng)絡(luò)爬蟲-總體設(shè)計(jì)說明_第1頁
分布式網(wǎng)絡(luò)爬蟲-總體設(shè)計(jì)說明_第2頁
分布式網(wǎng)絡(luò)爬蟲-總體設(shè)計(jì)說明_第3頁
分布式網(wǎng)絡(luò)爬蟲-總體設(shè)計(jì)說明_第4頁
分布式網(wǎng)絡(luò)爬蟲-總體設(shè)計(jì)說明_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

39/43中國礦業(yè)大學(xué)計(jì)算機(jī)學(xué)院2014級本科生課程報(bào)告課程名稱應(yīng)用軟件開發(fā)實(shí)踐報(bào)告時(shí)間2017.6.28學(xué)生朱少杰、胥鐵馨學(xué)號08143334、08143336專業(yè)14級計(jì)科6班任課教師徐慧任課教師評語任課教師評語(①對課程基礎(chǔ)理論的掌握;②對課程知識應(yīng)用能力的評價(jià);③對課程報(bào)告相關(guān)實(shí)驗(yàn)、作品、軟件等成果的評價(jià);④課程學(xué)習(xí)態(tài)度和上課紀(jì)律;⑤課程成果和報(bào)告工作量;⑥總體評價(jià)和成績;⑦存在問題等):成績:任課教師簽字:年月日摘要網(wǎng)絡(luò)爬蟲(WebCrawler),通常被稱為爬蟲,是搜索引擎的重要組成部分。隨著信息技術(shù)的飛速進(jìn)步,作為搜索引擎的一個(gè)組成部分——網(wǎng)絡(luò)爬蟲,一直是研究的熱點(diǎn),它的好壞會直接決定搜索引擎的未來。目前,網(wǎng)絡(luò)爬蟲的研究包括Web搜索策略研究的研究和網(wǎng)絡(luò)分析的算法,兩個(gè)方向,其中在Web爬蟲網(wǎng)絡(luò)搜索主題是一個(gè)研究方向,根據(jù)一些的分析算法,過濾不相關(guān)的,連接到合格的網(wǎng)頁,并放置在一個(gè)隊(duì)列被抓取。把互聯(lián)網(wǎng)比喻成一個(gè)蜘蛛網(wǎng),那么Spider就是在網(wǎng)上爬來爬去的蜘蛛。網(wǎng)絡(luò)蜘蛛是通過網(wǎng)頁的地址來尋找網(wǎng)頁,從某一個(gè)頁面(通常是首頁)開始,讀取網(wǎng)頁的容,找到在網(wǎng)頁中的其它地址,然后通過這些地址尋找下一個(gè)網(wǎng)頁,這樣一直循環(huán)下去,直到把這個(gè)所有的網(wǎng)頁都抓取完為止。如果把整個(gè)互聯(lián)網(wǎng)當(dāng)成一個(gè),那么網(wǎng)絡(luò)爬蟲就可以用這個(gè)原理把互聯(lián)網(wǎng)上所有的網(wǎng)頁都抓取下來。關(guān)鍵詞:網(wǎng)絡(luò)爬蟲;Java;多線程;MySQL;Webmagic;CsdnblogABSTRACTWebCrawler,usuallycalledCrawlerforshort,isanimportantpartofsearchengine.Withthehigh-speeddevelopmentofinformation,WebCrawler--thesearchenginecannotlackof--whichisahotresearchtopicthoseyears.ThequalityofasearchengineismostlydependedonthequalityofaWebCrawler.Nowadays,thedirectionofresearchingWebCrawlermainlydividesintotwoparts:oneisthesearchingstrategytowebpages;theotheristhealgorithmofanalysisURLs.Amongthem,theresearchofTopic-FocusedWebCrawleristhetrend.Itusessomewebpageanalysisstrategytofiltertopic-lessURLsandaddfitURLsintoURL-WAITqueue.Themetaphorofaspiderwebinternet,thenSpiderspideriscrawlingaroundontheInternet.Webspiderthroughweblinkaddresstofindpages,startingfromaonepagewebsite(usuallyhome),readthecontentsofthepage,findtheaddressoftheotherlinksonthepage,andthenlookforthenextWebpageaddressesthroughtheselinks,sohasbeenthecyclecontinues,untilallthepagesofthissitearecrawledexhausted.IftheentireInternetasasite,thenyoucanusethisWebcrawlerprincipleallthepagesontheInternetarecrawlingdown..Keywords:Webcrawler;Java;Multithreading;MySQL;Webmagic;Csdnblog目錄 一.網(wǎng)絡(luò)爬蟲的簡介11.1定義11.2產(chǎn)生背景11.3組成11.4分類21.4.1通用網(wǎng)絡(luò)爬蟲21.4.2焦網(wǎng)絡(luò)爬蟲21.4.3增量式網(wǎng)絡(luò)爬蟲21.4.4DeepWeb爬蟲21.5發(fā)展趨勢3二.環(huán)境需求與配置32.1Java版本與配置32.2Eclipse配置52.3Maven配置6三.網(wǎng)絡(luò)爬蟲模型的具體設(shè)計(jì)93.1框架webmagic93.1.1WebMagic概覽93.1.2Webmagic總體架構(gòu)93.1.3Webmagic項(xiàng)目組成103.2網(wǎng)頁搜索策略113.2.1拓?fù)浞治鏊惴?13.2.2網(wǎng)頁容分析算法123.3爬行策略133.4爬蟲的配置173.5頁面元素的抽取213.5.1XPath213.5.2CSS選擇器223.5.3正則表達(dá)式223.6的發(fā)現(xiàn)223.7具體代碼實(shí)現(xiàn)223.7.1CsdnblogPageProcessor.java223.7.2App.java26四.導(dǎo)入MySQL數(shù)據(jù)庫274.1MySQL簡介274.2MySQL的安裝與配置284.3安裝MySQLWorkbench314.4編寫數(shù)據(jù)庫文件35一.網(wǎng)絡(luò)爬蟲的簡介1.1定義網(wǎng)絡(luò)爬蟲(又被稱為網(wǎng)頁蜘蛛,網(wǎng)絡(luò)機(jī)器人,在FOAF社區(qū)中間,更經(jīng)常的稱為網(wǎng)頁追逐者),是一種按照一定的規(guī)則,自動地抓取萬維網(wǎng)信息的程序或者腳本。另外一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲。1.2產(chǎn)生背景隨著網(wǎng)絡(luò)的迅速發(fā)展,萬維網(wǎng)成為大量信息的載體,如何有效地提取并利用這些信息成為一個(gè)巨大的挑戰(zhàn)。搜索引擎(SearchEngine),例如傳統(tǒng)的通用搜索引擎AltaVista,Yahoo!和Google等,作為一個(gè)輔助人們檢索信息的工具成為用戶訪問萬維網(wǎng)的入口和指南。但是,這些通用性搜索引擎也存在著一定的局限性,如:(1)不同領(lǐng)域、不同背景的用戶往往具有不同的檢索目的和需求,通用搜索引擎所返回的結(jié)果包含大量用戶不關(guān)心的網(wǎng)頁。(2)通用搜索引擎的目標(biāo)是盡可能大的網(wǎng)絡(luò)覆蓋率,有限的搜索引擎服務(wù)器資源與無限的網(wǎng)絡(luò)數(shù)據(jù)資源之間的矛盾將進(jìn)一步加深。(3)萬維網(wǎng)數(shù)據(jù)形式的豐富和網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,圖片、數(shù)據(jù)庫、音頻、視頻多媒體等不同數(shù)據(jù)大量出現(xiàn),通用搜索引擎往往對這些信息含量密集且具有一定結(jié)構(gòu)的數(shù)據(jù)無能為力,不能很好地發(fā)現(xiàn)和獲取。(4)通用搜索引擎大多提供基于關(guān)鍵字的檢索,難以支持根據(jù)語義信息提出的查詢。\o"\"網(wǎng)絡(luò)爬蟲\"為了解決上述問題,定向抓取相關(guān)網(wǎng)頁資源的聚焦爬蟲應(yīng)運(yùn)而生。聚焦爬蟲是一個(gè)自動下載網(wǎng)頁的程序,它根據(jù)既定的抓取目標(biāo),有選擇的訪問萬維網(wǎng)上的網(wǎng)頁與相關(guān)的,獲取所需要的信息。與通用爬蟲(generalpurposewebcrawler)不同,聚焦爬蟲并不追求大的覆蓋,而將目標(biāo)定為抓取與某一特定主題容相關(guān)的網(wǎng)頁,為面向主題的用戶查詢準(zhǔn)備數(shù)據(jù)資源。1.3組成在網(wǎng)絡(luò)爬蟲的系統(tǒng)框架中,主過程由控制器,解析器,資源庫三部分組成??刂破鞯闹饕ぷ魇秦?fù)責(zé)給多線程中的各個(gè)爬蟲線程分配工作任務(wù)。解析器的主要工作是下載網(wǎng)頁,進(jìn)行頁面的處理,主要是將一些JS腳本標(biāo)簽、CSS代碼容、空格字符、HTML標(biāo)簽等容處理掉,爬蟲的基本工作是由解析器完成。資源庫是用來存放下載到的網(wǎng)頁資源,一般都采用大型的數(shù)據(jù)庫存儲,如Oracle數(shù)據(jù)庫,并對其建立索引??刂破骺刂破魇蔷W(wǎng)絡(luò)爬蟲的中央控制器,它主要是負(fù)責(zé)根據(jù)系統(tǒng)傳過來的URL,分配一線程,然后啟動線程調(diào)用爬蟲爬取網(wǎng)頁的過程。解析器解析器是負(fù)責(zé)網(wǎng)絡(luò)爬蟲的主要部分,其負(fù)責(zé)的工作主要有:下載網(wǎng)頁的功能,對網(wǎng)頁的文本進(jìn)行處理,如過濾功能,抽取特殊HTML標(biāo)簽的功能,分析數(shù)據(jù)功能。資源庫主要是用來存儲網(wǎng)頁中下載下來的數(shù)據(jù)記錄的容器,并提供生成索引的目標(biāo)源。型的數(shù)據(jù)庫產(chǎn)品有:Oracle、SqlServer等。1.4分類1.4.1通用網(wǎng)絡(luò)爬蟲通用網(wǎng)絡(luò)爬蟲又稱全網(wǎng)爬蟲(ScalableWebCrawler),爬行對象從一些種子URL擴(kuò)充到整個(gè)Web,主要為門戶站點(diǎn)搜索引擎和大型Web服務(wù)提供商采集數(shù)據(jù)。由于商業(yè)原因,它們的技術(shù)細(xì)節(jié)很少公布出來。這類網(wǎng)絡(luò)爬蟲的爬行圍和數(shù)量巨大,對于爬行速度和存儲空間要求較高,對于爬行頁面的順序要求相對較低,同時(shí)由于待刷新的頁面太多,通常采用并行工作方式,但需要較長時(shí)間才能刷新一次頁面。雖然存在一定缺陷,通用網(wǎng)絡(luò)爬蟲適用于為搜索引擎搜索廣泛的主題,有較強(qiáng)的應(yīng)用價(jià)值。1.4.2焦網(wǎng)絡(luò)爬蟲聚焦網(wǎng)絡(luò)爬蟲(FocusedCrawler),又稱主題網(wǎng)絡(luò)爬蟲(TopicalCrawler),是指選擇性地爬行那些與預(yù)先定義好的主題相關(guān)頁面的網(wǎng)絡(luò)爬蟲[8]。和通用網(wǎng)絡(luò)爬蟲相比,聚焦爬蟲只需要爬行與主題相關(guān)的頁面,極節(jié)省了硬件和網(wǎng)絡(luò)資源,保存的頁面也由于數(shù)量少而更新快,還可以很好地滿足一些特定人群對特定領(lǐng)域信息的需求。1.4.3增量式網(wǎng)絡(luò)爬蟲增量式網(wǎng)絡(luò)爬蟲(IncrementalWebCrawler)是指對已下載網(wǎng)頁采取增量式更新和只爬行新產(chǎn)生的或者已經(jīng)發(fā)生變化網(wǎng)頁的爬蟲,它能夠在一定程度上保證所爬行的頁面是盡可能新的頁面。和周期性爬行和刷新頁面的網(wǎng)絡(luò)爬蟲相比,增量式爬蟲只會在需要的時(shí)候爬行新產(chǎn)生或發(fā)生更新的頁面,并不重新下載沒有發(fā)生變化的頁面,可有效減少數(shù)據(jù)下載量,與時(shí)更新已爬行的網(wǎng)頁,減小時(shí)間和空間上的耗費(fèi),但是增加了爬行算法的復(fù)雜度和實(shí)現(xiàn)難度。增量式網(wǎng)絡(luò)爬蟲的體系結(jié)構(gòu)[包含爬行模塊、排序模塊、更新模塊、本地頁面集、待爬行URL集以與本地頁面URL集。1.4.4DeepWeb爬蟲Web頁面按存在方式可以分為表層網(wǎng)頁(SurfaceWeb)和深層網(wǎng)頁(DeepWeb,也稱InvisibleWebPages或HiddenWeb)。表層網(wǎng)頁是指傳統(tǒng)搜索引擎可以索引的頁面,以超可以到達(dá)的靜態(tài)網(wǎng)頁為主構(gòu)成的Web頁面。DeepWeb是那些大部分容不能通過靜態(tài)獲取的、隱藏在搜索表單后的,只有用戶提交一些關(guān)鍵詞才能獲得的Web頁面。例如那些用戶注冊后容才可見的網(wǎng)頁就屬于DeepWeb。2000年BrightPlanet指出:DeepWeb中可訪問信息容量是SurfaceWeb的幾百倍,是互聯(lián)網(wǎng)上最大、發(fā)展最快的新型信息資源。1.5發(fā)展趨勢目前,大多數(shù)的搜索引擎都是基于關(guān)鍵詞的搜索引擎?;陉P(guān)鍵字匹配的搜索技術(shù)有較大的局限性:首先,它不能區(qū)分同形異義。其次,不能聯(lián)想到關(guān)鍵字的同義詞。Web商業(yè)化至今,搜索引擎始終保持著網(wǎng)絡(luò)上被使用最多的服務(wù)項(xiàng)目的地位,然而,隨著網(wǎng)上容的爆炸式增長和容形式花樣的不斷翻新,搜索引擎越來越不能滿足挑剔的網(wǎng)民們的各種信息需求。搜索引擎的發(fā)展面臨著兩大難題:一是如何跟上Internet的發(fā)展速度,二是如何為用戶提供更精確的查詢結(jié)果。所以,傳統(tǒng)的引擎不能適應(yīng)信息技術(shù)的高速發(fā)展,新一代智能搜索引擎作為一種高效搜索引擎技術(shù)的在當(dāng)今的網(wǎng)絡(luò)信息時(shí)代日益引起業(yè)界人士的關(guān)注。搜索引擎己成為一個(gè)新的研究、開發(fā)領(lǐng)域。因?yàn)樗玫叫畔z索、人工智能、計(jì)算機(jī)網(wǎng)絡(luò)、分布式處理、數(shù)據(jù)庫、數(shù)據(jù)挖掘、數(shù)字圖書館、自然語言處理等多領(lǐng)域的理論和技術(shù),所以具有綜合性和挑戰(zhàn)性。又由于搜索引擎有大量的用戶,有很好的經(jīng)濟(jì)價(jià)值,所以引起了世界各國計(jì)算機(jī)科學(xué)界和信息產(chǎn)業(yè)界的高度關(guān)注,目前的研究、開發(fā)十分活躍,并出現(xiàn)了很多值得注意的動向。二.環(huán)境需求與配置2.1Java版本與配置圖1Java版本號圖2Java配置一圖3Java配置二圖4Java配置三2.2Eclipse配置下載Eclipse壓縮包,并將Eclipse壓縮包解壓圖5解壓后2.3Maven配置下載maven的bin,在apache官方可以下載。版本類型下載下來之后,解壓,找個(gè)路徑放進(jìn)去,把bin的位置設(shè)在環(huán)境變量里,新建環(huán)境變量MAVEN_HOME圖6環(huán)境變量配置一在PATH里加入maven的bin的路徑圖7環(huán)境變量配置二配置完畢后,在Windows命令提示符下,輸入mvn-v測試一下,配置成功顯示如圖:圖8配置成功配置成功后開始在Eclipse中配置Maven,點(diǎn)擊eclipse菜單欄Help->EclipseMarketplace搜索關(guān)鍵字maven到插件MavenIntegrationforEclipse并點(diǎn)擊安裝即可,如下圖:圖9在Eclipse中配置maven重啟后,為了使得Eclipse中安裝的Maven插件,同windows中安裝的那個(gè)一樣,需要讓eclipse中的maven重新定位一下,點(diǎn)擊Window->Preference->Maven->Installation->Add進(jìn)行設(shè)置圖10配置二三.網(wǎng)絡(luò)爬蟲模型的具體設(shè)計(jì)3.1框架webmagic3.1.1WebMagic概覽WebMagic項(xiàng)目代碼分為核心和擴(kuò)展兩部分。核心部分(webmagic-core)是一個(gè)精簡的、模塊化的爬蟲實(shí)現(xiàn),而擴(kuò)展部分則包括一些便利的、實(shí)用性的功能。WebMagic的架構(gòu)設(shè)計(jì)參照了Scrapy,目標(biāo)是盡量的模塊化,并體現(xiàn)爬蟲的功能特點(diǎn)。3.1.2Webmagic總體架構(gòu)WebMagic的結(jié)構(gòu)分為Downloader、PageProcessor、Scheduler、Pipeline四大組件,并由Spider將它們彼此組織起來。這四大組件對應(yīng)爬蟲生命周期中的下載、處理、管理和持久化等功能。WebMagic的設(shè)計(jì)參考了Scapy,但是實(shí)現(xiàn)方式更Java化一些。而Spider則將這幾個(gè)組件組織起來,讓它們可以互相交互,流程化的執(zhí)行,可以認(rèn)為Spider是一個(gè)大的容器,它也是WebMagic邏輯的核心。WebMagic總體架構(gòu)圖如下:圖11WebMagic總體架構(gòu)3.1.3Webmagic項(xiàng)目組成WebMagic項(xiàng)目代碼包括幾個(gè)部分,在根目錄下以不同目錄名分開。它們都是獨(dú)立的Maven項(xiàng)目。主要部分WebMagic主要包括兩個(gè)包,這兩個(gè)包經(jīng)過廣泛實(shí)用,已經(jīng)比較成熟:webmagic-corewebmagic-core是WebMagic核心部分,只包含爬蟲基本模塊和基本抽取器。WebMagic-core的目標(biāo)是成為網(wǎng)頁爬蟲的一個(gè)教科書般的實(shí)現(xiàn)。webmagic-extensionwebmagic-extension是WebMagic的主要擴(kuò)展模塊,提供一些更方便的編寫爬蟲的工具。包括注解格式定義爬蟲、JSON、分布式等支持。外圍功能除此之外,WebMagic項(xiàng)目里還有幾個(gè)包,這些都是一些實(shí)驗(yàn)性的功能,目的只是提供一些與外圍工具整合的樣例。因?yàn)榫τ邢?,這些包沒有經(jīng)過廣泛的使用和測試,推薦使用方式是自行下載源碼,遇到問題后再修改。webmagic-samples這里是作者早期編寫的一些爬蟲的例子。因?yàn)闀r(shí)間有限,這些例子有些使用的仍然是老版本的API,也可能有一些因?yàn)槟繕?biāo)頁面的結(jié)構(gòu)變化不再可用了。最新的、精選過的例子,請看webmaigc-core的cessor.example包和webmaigc-core的us.codecraft.webmagic.example包webmagic-scriptsWebMagic對于爬蟲規(guī)則腳本化的一些嘗試,目標(biāo)是讓開發(fā)者脫離Java語言,來進(jìn)行簡單、快速的開發(fā)。同時(shí)強(qiáng)調(diào)腳本的共享。webmagic-seleniumWebmMgic與Selenium結(jié)合的模塊。Selenium是一個(gè)模擬瀏覽器進(jìn)行頁面渲染的工具,WebMagic依賴Selenium進(jìn)行動態(tài)頁面的抓取。webmagic-saxonWebMagic與Saxon結(jié)合的模塊。Saxon是一個(gè)XPath、XSLT的解析工具,webmagic依賴Saxon來進(jìn)行XPath2.0語法解析支持。webmagic-avalonwebmagic-avalon是一個(gè)特殊的項(xiàng)目,它想基于WebMagic實(shí)現(xiàn)一個(gè)產(chǎn)品化的工具,涵蓋爬蟲的創(chuàng)建、爬蟲的管理等后臺工具。3.2網(wǎng)頁搜索策略廣度優(yōu)先搜索策略是指在抓取過程中,在完成當(dāng)前層次的搜索后,才進(jìn)行下一層次的搜索。該算法的設(shè)計(jì)和實(shí)現(xiàn)相對簡單。在目前為覆蓋盡可能多的網(wǎng)頁,一般使用廣度優(yōu)先搜索方法。也有很多研究將廣度優(yōu)先搜索策略應(yīng)用于聚焦爬蟲中。其基本思想是認(rèn)為與初始URL在一定距離的網(wǎng)頁具有主題相關(guān)性的概率很大。另外一種方法是將廣度優(yōu)先搜索與網(wǎng)頁過濾技術(shù)結(jié)合使用,先用廣度優(yōu)先策略抓取網(wǎng)頁,再將其中無關(guān)的網(wǎng)頁過濾掉。這些方法的缺點(diǎn)在于,隨著抓取網(wǎng)頁的增多,大量的無關(guān)網(wǎng)頁將被下載并過濾,算法的效率將變低。3.2.1拓?fù)浞治鏊惴ɑ诰W(wǎng)頁之間的,通過已知的網(wǎng)頁或數(shù)據(jù),來對與其有直接或間接關(guān)系的對象(可以是網(wǎng)頁或等)作出評價(jià)的算法。又分為網(wǎng)頁粒度、粒度和網(wǎng)頁塊粒度這三種。1網(wǎng)頁(Webpage)粒度的分析算法PageRank和HITS算法是最常見的分析算法,兩者都是通過對網(wǎng)頁間度的遞歸和規(guī)化計(jì)算,得到每個(gè)網(wǎng)頁的重要度評價(jià)。PageRank算法雖然考慮了用戶訪問行為的隨機(jī)性和Sink網(wǎng)頁的存在,但忽略了絕大多數(shù)用戶訪問時(shí)帶有目的性,即網(wǎng)頁和與查詢主題的相關(guān)性。針對這個(gè)問題,HITS算法提出了兩個(gè)關(guān)鍵的概念:權(quán)威型網(wǎng)頁(authority)和中心型網(wǎng)頁(hub)?;诘淖ト〉膯栴}是相關(guān)頁面主題團(tuán)之間的隧道現(xiàn)象,即很多在抓取路徑上偏離主題的網(wǎng)頁也指向目標(biāo)網(wǎng)頁,局部評價(jià)策略中斷了在當(dāng)前路徑上的抓取行為。文獻(xiàn)[21]提出了一種基于反向(BackLink)的分層式上下文模型(ContextModel),用于描述指向目標(biāo)網(wǎng)頁一定物理跳數(shù)半徑的網(wǎng)頁拓?fù)鋱D的中心Layer0為目標(biāo)網(wǎng)頁,將網(wǎng)頁依據(jù)指向目標(biāo)網(wǎng)頁的物理跳數(shù)進(jìn)行層次劃分,從外層網(wǎng)頁指向?qū)泳W(wǎng)頁的稱為反向。2粒度的分析算法粒度的資源發(fā)現(xiàn)和管理策略也比網(wǎng)頁粒度的更簡單有效。粒度的爬蟲抓取的關(guān)鍵之處在于站點(diǎn)的劃分和站點(diǎn)等級(SiteRank)的計(jì)算。SiteRank的計(jì)算方法與PageRank類似,但是需要對之間的作一定程度抽象,并在一定的模型下計(jì)算的權(quán)重。劃分情況分為按域名劃分和按IP地址劃分兩種。文獻(xiàn)[18]討論了在分布式情況下,通過對同一個(gè)域名下不同主機(jī)、服務(wù)器的IP地址進(jìn)行站點(diǎn)劃分,構(gòu)造站點(diǎn)圖,利用類似PageRank的方法評價(jià)SiteRank。同時(shí),根據(jù)不同文件在各個(gè)站點(diǎn)上的分布情況,構(gòu)造文檔圖,結(jié)合SiteRank分布式計(jì)算得到DocRank。文獻(xiàn)[18]證明,利用分布式的SiteRank計(jì)算,不僅大大降低了單機(jī)站點(diǎn)的算法代價(jià),而且克服了單獨(dú)站點(diǎn)對整個(gè)網(wǎng)絡(luò)覆蓋率有限的缺點(diǎn)。附帶的一個(gè)優(yōu)點(diǎn)是,常見PageRank造假難以對SiteRank進(jìn)行欺騙。3網(wǎng)頁塊粒度的分析算法在一個(gè)頁面中,往往含有多個(gè)指向其他頁面的,這些中只有一部分是指向主題相關(guān)網(wǎng)頁的,或根據(jù)網(wǎng)頁的錨文本表明其具有較高重要性。但是,在PageRank和HITS算法中,沒有對這些作區(qū)分,因此常常給網(wǎng)頁分析帶來廣告等噪聲的干擾。在網(wǎng)頁塊級別(Blocklevel)進(jìn)行分析的算法的基本思想是通過VIPS網(wǎng)頁分割算法將網(wǎng)頁分為不同的網(wǎng)頁塊(pageblock),然后對這些網(wǎng)頁塊建立pagetoblock和blocktopage的矩陣,分別記為Z和X。于是,在pagetopage圖上的網(wǎng)頁塊級別的PageRank為?Wp=X×Z;在blocktoblock圖上的BlockRank為Wb=Z×X。已經(jīng)有人實(shí)現(xiàn)了塊級別的PageRank和HITS算法,并通過實(shí)驗(yàn)證明,效率和準(zhǔn)確率都比傳統(tǒng)的對應(yīng)算法要好。3.2.2網(wǎng)頁容分析算法基于網(wǎng)頁容的分析算法指的是利用網(wǎng)頁容(文本、數(shù)據(jù)等資源)特征進(jìn)行的網(wǎng)頁評價(jià)。網(wǎng)頁的容從原來的以超文本為主,發(fā)展到后來動態(tài)頁面(或稱為HiddenWeb)數(shù)據(jù)為主,后者的數(shù)據(jù)量約為直接可見頁面數(shù)據(jù)(PIW,PubliclyIndexableWeb)的400~500倍。另一方面,多媒體數(shù)據(jù)、WebService等各種網(wǎng)絡(luò)資源形式也日益豐富。因此,基于網(wǎng)頁容的分析算法也從原來的較為單純的文本檢索方法,發(fā)展為涵蓋網(wǎng)頁數(shù)據(jù)抽取、機(jī)器學(xué)習(xí)、數(shù)據(jù)挖掘、語義理解等多種方法的綜合應(yīng)用。本節(jié)根據(jù)網(wǎng)頁數(shù)據(jù)形式的不同,將基于網(wǎng)頁容的分析算法,歸納以下三類:第一種針對以文本和超為主的無結(jié)構(gòu)或結(jié)構(gòu)很簡單的網(wǎng)頁;第二種針對從結(jié)構(gòu)化的數(shù)據(jù)源(如RDBMS)動態(tài)生成的頁面,其數(shù)據(jù)不能直接批量訪問;第三種針對的數(shù)據(jù)界于第一和第二類數(shù)據(jù)之間,具有較好的結(jié)構(gòu),顯示遵循一定模式或風(fēng)格,且可以直接訪問。基于文本的網(wǎng)頁分析算法1)純文本分類與聚類算法很大程度上借用了文本檢索的技術(shù)。文本分析算法可以快速有效的對網(wǎng)頁進(jìn)行分類和聚類,但是由于忽略了網(wǎng)頁間和網(wǎng)頁部的結(jié)構(gòu)信息,很少單獨(dú)使用。2)超文本分類和聚類算法根據(jù)網(wǎng)頁網(wǎng)頁的相關(guān)類型對網(wǎng)頁進(jìn)行分類,依靠相關(guān)聯(lián)的網(wǎng)頁推測該網(wǎng)頁的類型3.3爬行策略下述的三種網(wǎng)絡(luò)特征,造成了設(shè)計(jì)網(wǎng)頁爬蟲抓取策略變得很難:它巨大的數(shù)據(jù)量;它快速的更新頻率;

動態(tài)頁面的產(chǎn)生它們?nèi)齻€(gè)特征一起產(chǎn)生了很多種類的爬蟲抓取。巨大的數(shù)據(jù)量暗示了爬蟲,在給定的時(shí)間,只可以抓取所下載網(wǎng)絡(luò)的一部分,所以,它需要對它的抓取頁面設(shè)置優(yōu)先級;快速的更新頻率說明在爬蟲抓取下載某一個(gè)網(wǎng)頁的時(shí)候,很有可能在這個(gè)站點(diǎn)又有新的網(wǎng)頁被添加進(jìn)來,或者這個(gè)頁面被更新或者刪除了。最近新增的很多頁面都是通過服務(wù)器端腳本語言產(chǎn)生的,無窮的參數(shù)組合也增加了爬蟲抓取的難度,只有一小部分這種組合會返回一些獨(dú)特的容。例如,一個(gè)很小照片存儲庫僅僅通過get方式可能提供就給用戶三種操作方式。如果這里存著四種分類方式,三種縮略圖方式,兩種文件格式,和一個(gè)禁止用戶提供容的選項(xiàng),那么,同樣的容就可以通過48種方式訪問。這種數(shù)學(xué)組合給網(wǎng)絡(luò)爬蟲創(chuàng)造的難處就是,為了獲取不同的容,他們必須篩選無窮僅有微小變化的組合。正如愛德華等人所說的:“用于檢索的帶寬不是無限的,也不是免費(fèi)的;所以,如果引入衡量爬蟲抓取質(zhì)量或者新鮮度的有效指標(biāo)的話,不但伸縮性,連有效性都將變得十分必要”(愛德華等人,2001年)。一個(gè)爬蟲就必須小心的選擇下一步要訪問什么頁面。網(wǎng)頁爬蟲的行為通常是四種策略組合的結(jié)果。?選擇策略,決定所要下載的頁面;?重新訪問策略,決定什么時(shí)候檢查頁面的更新變化;?平衡禮貌策略,指出怎樣避免站點(diǎn)超載;?并行策略,指出怎么協(xié)同達(dá)到分布式抓取的效果;選擇策略:就現(xiàn)在網(wǎng)絡(luò)資源的大小而言,即使很大的搜索引擎也只能獲取網(wǎng)絡(luò)上可得到資源的一小部分。由勞倫斯河蓋爾斯共同做的一項(xiàng)研究指出,沒有一個(gè)搜索引擎抓取的容達(dá)到網(wǎng)絡(luò)的16%(勞倫斯河蓋爾斯,2001)。網(wǎng)絡(luò)爬蟲通常僅僅下載網(wǎng)頁容的一部分,但是大家都還是強(qiáng)烈要求下載的部分包括最多的相關(guān)頁面,而不僅僅是一個(gè)隨機(jī)的簡單的站點(diǎn)。這就要求一個(gè)公共標(biāo)準(zhǔn)來區(qū)分網(wǎng)頁的重要程度,一個(gè)頁面的重要程度與他自身的質(zhì)量有關(guān),與按照數(shù)、訪問數(shù)得出的受歡迎程度有關(guān),甚至與他本身的網(wǎng)址(后來出現(xiàn)的把搜索放在一個(gè)頂級域名或者一個(gè)固定頁面上的垂直搜索)有關(guān)。設(shè)計(jì)一個(gè)好的搜索策略還有額外的困難,它必須在不完全信息下工作,因?yàn)檎麄€(gè)頁面的集合在抓取時(shí)是未知的。Cho等人(Choetal,1998)做了第一份抓取策略的研究。他們的數(shù)據(jù)是斯坦福大學(xué)中的18萬個(gè)頁面,使用不同的策略分別模仿抓取。排序的方法使用了廣度優(yōu)先,后鏈計(jì)數(shù),和部分pagerank算法。計(jì)算顯示,如果你想要優(yōu)先下載pagerank高的頁面,那么,部分PageRank策略是比較好的,其次是廣度優(yōu)先和后鏈計(jì)數(shù)。并且,這樣的結(jié)果僅僅是針對一個(gè)站點(diǎn)的。Najork和Wiener(NajorkandWiener,2001)采用實(shí)際的爬蟲,對3.28億個(gè)網(wǎng)頁,采用廣度優(yōu)先研究。他們發(fā)現(xiàn)廣度優(yōu)先會較早的抓到PageRank高的頁面(但是他們沒有采用其他策略進(jìn)行研究)。作者給出的解釋是:“最重要的頁面會有很多的主機(jī)連接到他們,并且那些會較早的發(fā)現(xiàn),而不用考慮從哪一個(gè)主機(jī)開始。”Abiteboul(Abiteboul等人,2003),設(shè)計(jì)了一種基于OPIC(在線頁面重要指數(shù))的抓取戰(zhàn)略。在OPIC中,每一個(gè)頁面都有一個(gè)相等的初始權(quán)值,并把這些權(quán)值平均分給它所指向的頁面。這種算法與Pagerank相似,但是他的速度很快,并且可以一次完成。OPIC的程序首先抓取獲取權(quán)值最大的頁面,實(shí)驗(yàn)在10萬個(gè)冪指分布的模擬頁面中進(jìn)行。并且,實(shí)驗(yàn)沒有和其它策略進(jìn)行比較,也沒有在真正的WEB頁面測試。Boldi等人(Boldietal.,2004)的模擬檢索實(shí)驗(yàn)進(jìn)行在從.it網(wǎng)絡(luò)上取下的4000萬個(gè)頁面和從webbase得到的1億個(gè)頁面上,測試廣度優(yōu)先和深度優(yōu)先,隨機(jī)序列和有序序列。比較的基礎(chǔ)是真實(shí)頁面pageRank值和計(jì)算出來的pageRank值的接近程度。令人驚奇的是,一些計(jì)算pageRank很快的頁面(特別明顯的是廣度優(yōu)先策略和有序序列)僅僅可以達(dá)到很小的接近程度。Baeza-Yates等人(Baeza-Yatesetal.,2005)在從.gr域名和.cl域名子上獲取的300萬個(gè)頁面上模擬實(shí)驗(yàn),比較若干個(gè)抓取策略。結(jié)果顯示OPIC策略和站點(diǎn)隊(duì)列長度,都比廣度優(yōu)先要好;并且如果可行的話,使用之前的爬行抓取結(jié)果來指導(dǎo)這次抓取,總是十分有效的。Daneshpajouh等人(Daneshpajouhetal.,2008)設(shè)計(jì)了一個(gè)用于尋找好種子的社區(qū)。它們從來自不同社區(qū)的高PageRank頁面開始檢索的方法,迭代次數(shù)明顯小于使用隨機(jī)種子的檢索。使用這種方式,可以從以前抓取頁面之中找到好的種子,使用這些種子是十分有效的。限定訪問一個(gè)爬蟲可能僅僅想找到html頁面的種子而避免其他的文件類型。為了僅僅得到html的資源,一個(gè)爬蟲可以首先做一個(gè)head的請求,以在使用request方法獲取所有的資源之前,決定這個(gè)網(wǎng)絡(luò)文件的類型。為了避免要發(fā)送過多的head請求,爬蟲可以交替的檢查url并且僅僅對以html,htm和反斜杠結(jié)尾的文件發(fā)送資源請求。這種策略會導(dǎo)致很多的html資源在無意中錯(cuò)過,一種相似的策略是將網(wǎng)絡(luò)資源的擴(kuò)展名同已知是html文件類型的一組擴(kuò)展名(如.html,.htm,.asp,.php,.aspx,反斜杠)進(jìn)行比較。一些爬蟲也會限制對任何含有“?”的資源(這些是動態(tài)生成的)進(jìn)行獲取請求,以避免蜘蛛爬行在某一個(gè)站點(diǎn)中陷入下載無窮無盡的URL的困境。路徑檢索一些爬蟲會盡可能多的嘗試下載一個(gè)特定站點(diǎn)的資源。Cothey(Cothey,2004)引入了一種路徑檢索的爬蟲,它會嘗試抓取需要檢索資源的所有URL。例如,給定一個(gè)種子地址:它將會嘗試檢索/hamster/menkey/,/hamster/和/。Cothey發(fā)現(xiàn)路徑檢索對發(fā)現(xiàn)獨(dú)立資源,或者一些通常爬蟲檢索不到的的連接是非常有效的。一些路徑檢索的爬蟲也被稱為收割機(jī)軟件,因?yàn)樗麄兺ǔS糜谑崭罨蛘呤占械娜?,可能是從特定的頁面或者主機(jī)收集相冊的照片。聚焦抓取爬蟲所抓取頁面的重要程度也可以表述成它與給定查詢之間相似程度的函數(shù)。網(wǎng)絡(luò)爬蟲嘗試下載相似頁面,可以稱為聚焦檢索或者主題檢索。關(guān)于主題檢索和聚焦檢索的概念,最早是由Menczer(Menczer1997;MenczerandBelew,1998)和Chakrabarti等人首先提出來的(Chakrabartietal.,1999)。聚焦檢索的主要問題是網(wǎng)頁爬蟲的使用環(huán)境,我們希望在實(shí)際下載頁面之前,就可以知道給定頁面和查詢之間的相似度。一個(gè)可能的方法就是在之中設(shè)置錨點(diǎn),這就是在早期時(shí)候,Pinkerton(Pinkerton,1994)曾經(jīng)在一個(gè)爬蟲中采用的策略。Diligenti等人(Diligenti等人,2000)建議使用已經(jīng)抓取頁面的容去推測查詢和未訪問頁的相似度。一個(gè)聚焦查詢的表現(xiàn)的好壞主要依賴于查詢主題容的豐富程度,通常還會依賴頁面查詢引擎提供的查詢起點(diǎn)。抓取深層的網(wǎng)頁很多的頁面隱藏的很深或隱藏在在看不到的網(wǎng)絡(luò)之中。這些頁面通常只有在向數(shù)據(jù)庫提交查詢的時(shí)候才可以訪問到,如果沒有指向他們的話,一般的爬蟲是不能訪問到這些頁面的。谷歌站點(diǎn)地圖協(xié)議和modoai(Nelson等人,2005)嘗試允許發(fā)現(xiàn)這些深層次的資源。深層頁面抓取器增加了抓取網(wǎng)頁的數(shù)。一些爬蟲僅僅抓取形如<ahref=”url”。某些情況下,例如Googlebot,WEB抓取的是所有超文本所包含的容,標(biāo)簽和文本。WEB3.0檢索Web3.0為下一代搜索技術(shù)定義了更先進(jìn)的技術(shù)和新的準(zhǔn)則,可以概括為語義網(wǎng)絡(luò)和模板解析的概念。第三代檢索技術(shù)將建立在人機(jī)巧妙的聯(lián)系的基礎(chǔ)上。重新訪問策略網(wǎng)絡(luò)具有動態(tài)性很強(qiáng)的特性。抓取網(wǎng)絡(luò)上的一小部分容可能會花費(fèi)真的很長的時(shí)間,通常用周或者月來衡量。當(dāng)爬蟲完成它的抓取的任務(wù)以后,很多操作是可能會發(fā)生的,這些操作包括新建,更新和刪除。從搜索引擎的角度來看,不檢測這些事件是有成本的,成本就是我們僅僅擁有一份過時(shí)的資源。最常使用的成本函數(shù),是新鮮度和過時(shí)性(2000年,Cho和Garcia-Molina)新鮮度:這是一個(gè)衡量抓取容是不是準(zhǔn)確的二元值。在時(shí)間t,倉庫中頁面p的新鮮度是這樣定義的:新鮮度過時(shí)性:這是一個(gè)衡量本地已抓取的容過時(shí)程度的指標(biāo)。在時(shí)間t時(shí),倉庫中頁面p的時(shí)效性的定義如下:過時(shí)性在頁面抓取中,新鮮度和過時(shí)性的發(fā)展Coffman等人(EdwardG.Coffman,1998)是從事爬蟲對象定義的,他們提出了一個(gè)相當(dāng)于新鮮度的概念,但是使用了不同的措詞:他們建議爬蟲必須最小化過時(shí)頁面部分。他們指出網(wǎng)絡(luò)爬行的問題就相當(dāng)于多個(gè)隊(duì)列,一個(gè)投票系統(tǒng);這里,爬蟲是服務(wù)器,不同的站點(diǎn)是隊(duì)列。頁面修改是到達(dá)的顧客,頁面切換的時(shí)間是頁面進(jìn)入一個(gè)單一站點(diǎn)的間隔。在這個(gè)模型下,每一個(gè)顧客在投票系統(tǒng)的平均時(shí)間,相當(dāng)于爬蟲的平均過時(shí)性。爬蟲的目標(biāo)是盡可能高的提高頁面的新鮮度,同時(shí)降低頁面的過時(shí)性。這一目標(biāo)并不是完全一樣的,第一種情況,爬蟲關(guān)心的是有多少頁面時(shí)過時(shí)的;在第二種情況,爬蟲關(guān)心的頁面過時(shí)了多少。兩種最簡單的重新訪問策略是由Cho和Garcia-Molina研究的(Cho和Garcia-Molina,2003):統(tǒng)一策略:使用一樣的頻率,重新訪問收藏中的所有的,而不考慮他們更新頻率。正比策略:對變化越多的網(wǎng)頁,重新訪問的頻率也越高。網(wǎng)頁訪問的頻率和網(wǎng)頁變化的頻率直接相關(guān)。(兩種情況下,爬蟲的重新抓取都可以采用隨機(jī)方式,或者固定的順序)Cho和Garcia-Molina證明了一個(gè)出人意料的結(jié)果。以平均新鮮度方式衡量,統(tǒng)一策略在模擬頁面和真實(shí)的網(wǎng)絡(luò)抓取中都比正比策略出色。對于這種結(jié)果的解釋是:當(dāng)一個(gè)頁面變化太快的時(shí)候,爬蟲將會將會在不斷的嘗試重新抓取而浪費(fèi)很多時(shí)間,但是卻還是不能保證頁面的新鮮度。為了提高頁面的新鮮度,我們應(yīng)該宣判變化太快的頁面死罪(Cho和Garcia-Molina,2003a)。最佳的重新訪問策略既不是統(tǒng)一策略,也不是正比策略;保持平均頁面新鮮度高的最佳方法策略包括忽略那些變化太快的頁面,而保持頁面平均過時(shí)性低的方法則是對每一頁按照頁面變化率單調(diào)變化的策略訪問。兩種情況下,最佳的策略較正比策略,都更接近統(tǒng)一策略。正如Coffman等人(EdwardG.Coffman,1998)所注意到的:“為了最小化頁面過時(shí)的時(shí)間,對任一個(gè)頁面的訪問都應(yīng)該盡可能的均勻間隔地訪問?!睂τ谥匦略L問的詳盡的策略在大體上是不可以達(dá)到的,但是他們可以從數(shù)學(xué)上得到,因?yàn)樗麄円蕾囉陧撁娴淖兓?。(Cho和Garcia-Molina,2003a)指出指數(shù)變化是描述頁面變化的好方法,同時(shí)(Ipeirotis等人,2005)指出了怎么使用統(tǒng)計(jì)工具去發(fā)現(xiàn)適合這些變化的參數(shù)。注意在這里的重新訪問策略認(rèn)為每一個(gè)頁面都是一樣的(網(wǎng)絡(luò)上所有的頁面價(jià)值都是一樣的)這不是現(xiàn)實(shí)的情況,所以,為了獲取更好的抓取策略,更多有關(guān)網(wǎng)頁質(zhì)量的信息應(yīng)該考慮進(jìn)去。平衡禮貌策略爬蟲相比于人,可以有更快的檢索速度和更深的層次,所以,他們可能使一個(gè)站點(diǎn)癱瘓。不需要說一個(gè)單獨(dú)的爬蟲一秒鐘要執(zhí)行多條請求,下載大的文件。一個(gè)服務(wù)器也會很難響應(yīng)多線程爬蟲的請求。就像Koster(Koster,1995)所注意的那樣,爬蟲的使用對很多工作都是很有用的,但是對一般的社區(qū),也需要付出代價(jià)。使用爬蟲的代價(jià)包括:網(wǎng)絡(luò)資源:在很長一段時(shí)間,爬蟲使用相當(dāng)?shù)膸捀叨炔⑿械毓ぷ?。服?wù)器超載:尤其是對給定服務(wù)器的訪問過高時(shí)。質(zhì)量糟糕的爬蟲,可能導(dǎo)致服務(wù)器或者路由器癱瘓,或者會嘗試下載自己無法處理的頁面。個(gè)人爬蟲,如果過多的人使用,可能導(dǎo)致網(wǎng)絡(luò)或者服務(wù)器阻塞。對這些問題的一個(gè)部分解決方法是漫游器排除協(xié)議(Robotsexclusionprotocol),也被稱為robots.txt議定書(Koster,1996),這份協(xié)議對于管理員指明網(wǎng)絡(luò)服務(wù)器的那一部分不能到達(dá)是一個(gè)標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)沒有包括重新訪問一臺服務(wù)器的間隔的建議,雖然訪問間隔是避免服務(wù)器超載的最有效的辦法。最近的商業(yè)搜索軟件,如AskJeeves,MSN和Yahoo可以在robots.txt中使用一個(gè)額外的“Crawl-delay”參數(shù)來指明請求之間的延遲。對連接間隔時(shí)間的第一個(gè)建議由Koster1993年給出,時(shí)間是60秒。按照這個(gè)速度,如果一個(gè)站點(diǎn)有超過10萬的頁面,即使我們擁有零延遲和無窮帶寬的完美連接,它也會需要兩個(gè)月的時(shí)間來下載整個(gè)站點(diǎn),并且,這個(gè)服務(wù)器中的資源,只有一小部分可以使用。這似乎是不可以接受的。Cho(Cho和Garcia-Molina,2003)使用10秒作為訪問的間隔時(shí)間,WIRE爬蟲(Baeza-YatesandCastillo,2002)使用15秒作為默認(rèn)間隔。MercatorWeb(Heydon和Najork,1999)爬蟲使用了一種自適應(yīng)的平衡策略:如果從某一服務(wù)器下載一個(gè)文檔需要t秒鐘,爬蟲就等待10t秒的時(shí)間,然后開始下一個(gè)頁面。Dill等人(Dilletal.,2002)使用1秒。對于那些使用爬蟲用于研究目的的,一個(gè)更詳細(xì)的成本-效益分析是必要的,當(dāng)決定去哪一個(gè)站點(diǎn)抓取,使用多快的速度抓取的時(shí)候,倫理的因素也需要考慮進(jìn)來。訪問記錄顯示已知爬蟲的訪問間隔從20秒鐘到3-4分鐘不等。需要注意的是即使很禮貌,采取了所有的安全措施來避免服務(wù)器超載,還是會引來一些網(wǎng)絡(luò)服務(wù)器管理員的抱怨的。Brin和Page注意到:運(yùn)行一個(gè)針對超過50萬服務(wù)器的爬蟲,會產(chǎn)生很多的和。這是因?yàn)橛袩o數(shù)的人在上網(wǎng),而這些人不知道爬蟲是什么,因?yàn)檫@是他們第一次見到。(Brin和Page,1998)并行策略一個(gè)并行爬蟲是并行運(yùn)行多個(gè)進(jìn)程的爬蟲。它的目標(biāo)是最大化下載的速度,同時(shí)盡量減少并行的開銷和下載重復(fù)的頁面。為了避免下載一個(gè)頁面兩次,爬蟲系統(tǒng)需要策略來處理爬蟲運(yùn)行時(shí)新發(fā)現(xiàn)的URL,因?yàn)橥粋€(gè)URL地址,可能被不同的爬蟲進(jìn)程抓到。3.4爬蟲的配置第一部分關(guān)于爬蟲的配置,包括編碼、抓取間隔、超時(shí)時(shí)間、重試次數(shù)等,也包括一些模擬的參數(shù),例如UserAgent、cookie,以與代理的設(shè)置Spider是爬蟲啟動的入口。在啟動爬蟲之前,我們需要使用一個(gè)PageProcessor創(chuàng)建一個(gè)Spider對象,然后使用run()進(jìn)行啟動。同時(shí)Spider的其他組件(Downloader、Scheduler、Pipeline)都可以通過set方法來進(jìn)行設(shè)置。表1爬蟲函數(shù)與其功能表方法說明示例create(PageProcessor)創(chuàng)建SpiderSpider.create(newGithubRepoProcessor())addUrl(String…)添加初始的URLspider.addUrl("webmagic.io/docs/")addRequest(Request...)添加初始的Requestspider.addRequest("webmagic.io/docs/")thread(n)開啟n個(gè)線程spider.thread(5)run()啟動,會阻塞當(dāng)前線程執(zhí)行spider.run()start()/runAsync()異步啟動,當(dāng)前線程繼續(xù)執(zhí)行spider.start()stop()停止爬蟲spider.stop()test(String)抓取一個(gè)頁面進(jìn)行測試spider.test("webmagic.io/docs/")addPipeline(Pipeline)添加一個(gè)Pipeline,一個(gè)Spider可以有多個(gè)Pipelinespider.addPipeline(newConsolePipeline())setScheduler(Scheduler)設(shè)置Scheduler,一個(gè)Spider只能有個(gè)一個(gè)Schedulerspider.setScheduler(newRedisScheduler())setDownloader(Downloader)設(shè)置Downloader,一個(gè)Spider只能有個(gè)一個(gè)Downloaderspider.setDownloader(newSeleniumDownloader())get(String)同步調(diào)用,并直接取得結(jié)果ResultItemsresult=spider.get("webmagic.io/docs/")getAll(String…)同步調(diào)用,并直接取得一堆結(jié)果List<ResultItems>results=spider.getAll("webmagic.io/docs/","webmagic.io/xxx")對站點(diǎn)本身的一些配置信息,例如編碼、頭、超時(shí)時(shí)間、重試策略等、代理等,都可以通過設(shè)置Site對象來進(jìn)行配置。方法說明示例setCharset(String)設(shè)置編碼site.setCharset("utf-8")setUserAgent(String)設(shè)置UserAgentsite.setUserAgent("Spider")setTimeOut(int)設(shè)置超時(shí)時(shí)間,單位是毫秒site.setTimeOut(3000)setRetryTimes(int)設(shè)置重試次數(shù)site.setRetryTimes(3)setCycleRetryTimes(int)設(shè)置循環(huán)重試次數(shù)site.setCycleRetryTimes(3)addCookie(String,String)添加一條cookiesite.addCookie("dotcomt_user","code4craft")setDomain(String)設(shè)置域名,需設(shè)置域名后,addCookie才可生效site.setDomain("github.")addHeader(String,String)添加一條addHeadersite.addHeader("Referer","s://github.")setProxy(Host)設(shè)置代理site.setProxy(newHost("",8080))publicclassAppimplementsPageProcessor{privateSitesite=Site.me().setSleepTime(1);inttemp=1;//執(zhí)行這個(gè)main方法,即可在控制臺看到抓取結(jié)果。webmagic默認(rèn)有3秒抓取間隔,請耐心等待。publicstaticvoidmain(String[]args){//Spider是爬蟲的入口類,addurl為入口url SpideroschinaSpider=Spider.create(newApp()).addUrl("/CHENYUFENG1991/article/list/1")//Pipeline是結(jié)果輸出和持久化的接口,這里ConsolePipeline表示結(jié)果輸出到控制臺 .addPipeline(newConsolePipeline());try{//添加到JMT監(jiān)控中 SpiderMonitor.instance().register(oschinaSpider);//設(shè)置線程數(shù)//oschinaSpider.thread(5);oschinaSpider.run(); }catch(JMExceptione){e.printStackTrace(); }}3.5頁面元素的抽取第二部分是爬蟲的核心部分:對于下載到的Html頁面,你如何從中抽取到你想要的信息?WebMagic里主要使用了三種抽取技術(shù):XPath、正則表達(dá)式和CSS選擇器。另外,對于JSON格式的容,可使用JsonPath進(jìn)行解析。3.5.1XPathXPath本來是用于XML中獲取元素的一種查詢語言,但是用于Html也是比較方便的。例如:page.getHtml().xpath("http://h1[class='entry-titlepublic']/strong/a/text()")這段代碼使用了XPath,它的意思是“查找所有class屬性為'entry-titlepublic'的h1元素,并找到他的strong子節(jié)點(diǎn)的a子節(jié)點(diǎn),并提取a節(jié)點(diǎn)的文本信息”。對應(yīng)的Html是這樣子的:圖12html導(dǎo)航3.5.2CSS選擇器CSS選擇器是與XPath類似的語言。如果大家做過前端開發(fā),肯定知道$('h1.entry-title')這種寫法的含義??陀^的說,它比XPath寫起來要簡單一些,但是如果寫復(fù)雜一點(diǎn)的抽取規(guī)則,就相對要麻煩一點(diǎn)。3.5.3正則表達(dá)式正則表達(dá)式則是一種通用的文本抽取語言。page.addTargetRequests(page.getHtml().links().regex("(s://github\\./\\w+/\\w+)").all());這段代碼就用到了正則表達(dá)式,它表示匹配所有"s://github./code4craft/webmagic"這樣的。JsonPath是于XPath很類似的一個(gè)語言,它用于從Json中快速定位一條容。WebMagic中使用的JsonPath格式可以參考這里:s://code.google./p/json-path/3.6的發(fā)現(xiàn)有了處理頁面的邏輯,我們的爬蟲就接近完工了!但是現(xiàn)在還有一個(gè)問題:一個(gè)站點(diǎn)的頁面是很多的,一開始我們不可能全部列舉出來,于是如何發(fā)現(xiàn)后續(xù)的,是一個(gè)爬蟲不可缺少的一部分。page.addTargetRequests(page.getHtml().links().regex("(s://github\\./\\w+/\\w+)").all());這段代碼的分為兩部分,page.getHtml().links().regex("(s://github\\./\\w+/\\w+)").all()用于獲取所有滿足"(s://github\./\w+/\w+)"這個(gè)正則表達(dá)式的,page.addTargetRequests()則將這些加入到待抓取的隊(duì)列中去。3.7具體代碼實(shí)現(xiàn)3.7.1CsdnblogPageProcessor.javapackage.xf.cs.en.DB;importjava.util.List;importus.codecraft.webmagic.Page;importus.codecraft.webmagic.Site;importus.codecraft.webmagic.Spider;cessor.PageProcessor;/***CSDN博客爬蟲**可以爬取指定用戶的csdn博客所有文章,并保存到數(shù)據(jù)庫中。*/publicclassCsdnBlogPageProcessorimplementsPageProcessor{privatestaticStringusername="CHENYUFENG1991";//設(shè)置csdn用戶名privatestaticintsize=0;//共抓取到的文章數(shù)量//抓取的相關(guān)配置,包括:編碼、抓取間隔、重試次數(shù)等privateSitesite=Site.me().setRetryTimes(3).setSleepTime(1000);publicSitegetSite(){returnsite; }//process是定制爬蟲邏輯的核心接口,在這里編寫抽取邏輯publicvoidprocess(Pagepage){//列表頁if(!page.getUrl().regex("blog\\.csdn\\.net/"+username+"/article/details/\\d+").match()){//添加所有文章頁page.addTargetRequests(page.getHtml().xpath("http://div[id='article_list']").links()//限定文章列表獲取區(qū)域 .regex("/"+username+"/article/details/\\d+") .replace("/"+username+"/","/"+username+"/")//巧用替換給把相對url轉(zhuǎn)換成絕對url .all());//添加其他列表頁page.addTargetRequests(page.getHtml().xpath("http://div[id='papelist']").links()//限定其他列表頁獲取區(qū)域 .regex("/"+username+"/article/list/\\d+") .replace("/"+username+"/","/"+username+"/")//巧用替換給把相對url轉(zhuǎn)換成絕對url .all());//文章頁 }else{size++;//文章數(shù)量加1//用CsdnBlog類來存抓取到的數(shù)據(jù),方便存入數(shù)據(jù)庫 CsdnBlogcsdnBlog=newCsdnBlog();//設(shè)置編號csdnBlog.setKey(Integer.parseInt(page.getUrl().regex("blog\\.csdn\\.net/"+username+"/article/details/(\\d+)").get()));//設(shè)置標(biāo)題csdnBlog.setTitle(page.getHtml().xpath("http://div[class='article_title']//span[class='link_title']/a/text()").get());//設(shè)置容csdnBlog.setContent(page.getHtml().xpath("http://div[clas

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論