歡迎您訪問上(shàng)海先予工業自動化(huà)設備有限公司官方網站(zhàn)! 服務(wù)熱線 021-68148262
上(shàng)海先予工業自動化(huà)設備有限公司
新(xīn)聞動态 NEWS
技術知識 當前位置:首頁 >> 新(xīn)聞中心 >> 技術知識>> 詳細信息
網絡爬蟲技術淺析
來(lái)源: 日期:2016-12-20 11:04:15 浏覽次數:92

在萬維網飛速發展的網絡背景下(xià),搜索引擎在人(rén)們的生(shēng)活工作(zuò)中無疑扮演着重要的角色,而網絡爬蟲則是搜索引擎技術的最基礎部分(fēn)。


一(yī)、網絡爬蟲概述


在搜索引擎成為(wèi)主流檢索工具的今天,互聯網上(shàng)的網絡爬蟲各式各樣,但(dàn)爬蟲爬取網頁的基本步驟大緻相同:


1) 人(rén)工給定一(yī)個(gè)URL作(zuò)為(wèi)入口,從這(zhè)裏開始爬取。


萬維網的可視(shì)圖呈蝴蝶型,網絡爬蟲一(yī)般從蝴蝶型左邊結構出發。這(zhè)裏有一(yī)些(xiē)門戶網站(zhàn)的主頁,而門戶網站(zhàn)中包含大量有價值的鏈接。


2) 用運行隊列和完成隊列來(lái)保存不同狀态的鏈接。


    對于大型數據量而言,内存中的隊列是不夠的,通常采用數據庫模拟隊列。用這(zhè)種方法既可以進行海量的數據抓取,還可以擁有斷點續抓功能(néng)。


3) 線程從運行隊列讀取隊首URL,如(rú)果存在,則繼續執行,反之則停止爬取。


4) 每處理(lǐ)完一(yī)個(gè)URL,将其放(fàng)入完成隊列,防止重複訪問。


5) 每次抓取網頁之後分(fēn)析其中的URL(URL是字符串形式,功能(néng)類似指針),将經過過濾的合法鏈接寫入運行隊列,等待提取。


6) 重複步驟 3)、4)、5)。


 

1.1網頁搜索策略


萬維網高闊無邊,為(wèi)了(le)最大限度利用有限的資源,我們需要進行資源配置,并運用某些(xiē)策略使爬蟲優先爬取重要性較高的網頁。


目前主流的網頁搜索策略主要有三,即:深度優先、廣度優先、最佳優先。


 

深度優先,即從起始網頁開始,選擇一(yī)個(gè)URL,進入,分(fēn)析這(zhè)個(gè)網頁中的URL,選擇一(yī)個(gè)再進入。如(rú)此一(yī)個(gè)鏈接一(yī)個(gè)鏈接地深入追蹤下(xià)去,處理(lǐ)完一(yī)條路(lù)線之後再處理(lǐ)下(xià)一(yī)條路(lù)線。


有一(yī)個(gè)例子(zǐ)是:在封建制度中,封建帝王的繼承制度是長子(zǐ)優先級最高,長孫次之,次子(zǐ)随後。即如(rú)果長子(zǐ)去世,那麽長孫的優先級比次子(zǐ)高。


該類爬蟲設計時(shí)較為(wèi)簡單。然而深度優先型網絡爬蟲存在一(yī)個(gè)問題:門戶網站(zhàn)提供的鏈接往往最具價值,PageRank也(yě)很高,而每深入一(yī)層,網頁價值和PageRank都會相應地有所下(xià)降。這(zhè)暗示了(le)重要網頁通常距離種子(zǐ)較近,而過度深入抓取到的網頁卻價值很低(dī)。


由于這(zhè)個(gè)缺陷,廣度優先策略産生(shēng)了(le)。


 

廣度優先(又稱寬度優先),即從起始網頁開始,抓取其中所有鏈接的網頁,然後從中選擇一(yī)個(gè),繼續抓取該網頁中的所有鏈接頁面。


網絡爬蟲在抓取網頁時(shí)普遍采用這(zhè)種策略,這(zhè)其中有兩個(gè)原因:


第一(yī),萬維網的實際深度最大能(néng)達到17層,網頁之間(jiān)四通八達,因此存在從一(yī)個(gè)網頁到另一(yī)個(gè)網頁的最短路(lù)徑問題。如(rú)果采用深度優先,則有可能(néng)從一(yī)個(gè)PageRank很低(dī)的網頁爬取到一(yī)個(gè)PageRank實際很高的網頁,不方便計算(suàn)PageRank(個(gè)人(rén)理(lǐ)解)。


第二,采用寬度優先策略有利于多個(gè)爬蟲并行爬取。這(zhè)種多爬蟲合作(zuò)抓取通常是先抓取站(zhàn)内鏈接,遇到站(zhàn)外連接就(jiù)爬出去,抓取的封閉性很強。


廣度優先策略的優點在于其設計和實現(xiàn)相對簡單,且這(zhè)種策略的基本思想是:與種子(zǐ)在一(yī)定距離内的網頁重要度較高,符合實際。


在聚焦爬蟲的應用中,廣度優先策略可以與網頁過濾技術結合,即先用廣度優先抓取一(yī)些(xiē)網頁,再将其中與主題無關(guān)的過濾掉。但(dàn)這(zhè)種方法的缺點是随着抓取網頁的增多,算(suàn)法的效率會變低(dī)。


 

另外,還有一(yī)種常用于聚焦爬蟲的網頁搜索策略——最佳優先策略。


最佳優先,即按照某種網頁分(fēn)析算(suàn)法預測候選URL與目标網頁的相似度,或主題的相關(guān)性,并選取其中評價最好(hǎo)(hǎo)的一(yī)個(gè)或幾個(gè)URL進行進一(yī)步的爬取。


這(zhè)種策略的缺陷是可能(néng)會有很多相關(guān)網頁被忽略,但(dàn)相對的,這(zhè)種策略可以将無關(guān)網頁數量降低(dī)30%—90%。


 

1.2對URL的獲取和處理(lǐ)


網絡爬蟲訪問的是後台html代碼,它分(fēn)析出URL之後,對其進行過濾并将結果放(fàng)入運行隊列。


在取得URL時(shí)要提防一(yī)種“爬蟲陷阱”。因為(wèi)即使一(yī)個(gè)URL能(néng)訪問到相應内容,也(yě)不能(néng)保證服務(wù)器(qì)端有一(yī)個(gè)相應頁面存在,例如(rú)動态網頁的應用可能(néng)會使網站(zhàn)中存在一(yī)些(xiē)無法窮盡的地址,讓爬蟲在一(yī)個(gè)位置上(shàng)無限循環而無法終結。


針對“爬蟲陷阱”,其中一(yī)種應對方法是:檢查URL長度(或“”的數量),一(yī)旦超出某個(gè)阈值就(jiù)不再獲取。


 

鏈接過濾處理(lǐ)涉及兩個(gè)數組,第一(yī)個(gè)是“必須存在的關(guān)鍵字”組。分(fēn)析鏈接時(shí),鏈接中必須存在這(zhè)個(gè)數組中所有關(guān)鍵字(例如(rú)關(guān)鍵字為(wèi)http和index,則httpwww.mysite.comindex符合要求,而httpwww.mysite.comhtml不符合要求)。另一(yī)個(gè)是“不可存在的關(guān)鍵字”組。分(fēn)析鏈接時(shí),鏈接中必須不存在這(zhè)個(gè)數組中任何一(yī)個(gè)關(guān)鍵字(例如(rú)關(guān)鍵字為(wèi)index,則httpwww.mysite.comindex不符合要求)。


對關(guān)鍵字的過濾方法包括以下(xià)兩種:


1) 隻取得包含給定關(guān)鍵字的鏈接,這(zhè)樣取得的鏈接為(wèi)内部鏈接。


2) 隻取得不包含給定關(guān)鍵字的鏈接,這(zhè)樣取得的鏈接為(wèi)外部鏈接。


  

1.3頁面選取問題


為(wèi)提高資源利用率,我們需要盡可能(néng)提取最為(wèi)重要的網頁。


網頁的重要程度判斷有許多依據,如(rú):鏈接的歡迎程度(通過反向鏈接判斷)、鏈接的重要度(通過某種URL函數判斷,如(rú)認為(wèi)包含.com和home的URL重要度高于包含.cc和map的網頁)、鏈接平均深度(通過距離種子(zǐ)的深度判斷)、曆史權重、網頁質量等。


當需要判斷網頁與某些(xiē)給定關(guān)鍵字的相關(guān)性時(shí),我們需要利用網頁分(fēn)析算(suàn)法。


網頁分(fēn)析算(suàn)主要有以下(xià)三種:基于網頁拓補、基于網頁内容、基于用戶訪問。


 

基于網頁拓補,即通過已知的網頁或數據,對其有間(jiān)接關(guān)系的網頁或網站(zhàn)做出評價的算(suàn)法,這(zhè)種算(suàn)法廣泛應用于實時(shí)搜索,其中又包括:網頁粒度分(fēn)析算(suàn)法、網站(zhàn)粒度分(fēn)析算(suàn)法、網頁塊粒度分(fēn)析算(suàn)法三種。


1、網頁粒度分(fēn)析算(suàn)法


常見的有鏈接分(fēn)析算(suàn)法PageRank和hits,兩者都得到網頁的重要度評價。


其中PageRank考慮了(le)用戶訪問行為(wèi)的随機性和sink網頁,但(dàn)忽略了(le)大多數用戶訪問時(shí)具有目的性的事(shì)實。針對這(zhè)個(gè)問題,hits提出了(le)權威性網頁和中心型網頁兩個(gè)概念。


2、網站(zhàn)粒度分(fēn)析算(suàn)法


比網頁粒度分(fēn)析算(suàn)法更加簡單有效,其關(guān)鍵在于站(zhàn)點的劃分(fēn)和評級,SiteRank的計算(suàn)方法與PageRank類似。利用分(fēn)布式SiteRank計算(suàn),不僅降低(dī)了(le)單機站(zhàn)點的算(suàn)法代價,而且克服了(le)單獨站(zhàn)點對整個(gè)網絡覆蓋率有限的缺點。另外,SiteRank不會被常見的針對PageRank的造假所蒙騙。


3、網頁塊粒度分(fēn)析算(suàn)法


基本思想是通過某種網頁分(fēn)割算(suàn)法,将網頁分(fēn)為(wèi)不同網頁塊,排除其中與主題無關(guān)的鏈接後在進行進一(yī)步處理(lǐ)。這(zhè)種分(fēn)析算(suàn)法可以避免廣告等噪聲鏈接的幹擾。


 

基于網頁内容,即利用網頁内容(文本、錨文本、其他數據等)特征進行的網頁評價。其針對網頁數據形式不同可分(fēn)為(wèi)三類:


1、針對以文本和超鏈接為(wèi)主的無結構或結構很簡單的網頁。


   随着如(rú)今網頁内容的多樣化(huà),該方法已不再單獨使用。


2、針對從結構化(huà)的數據源(RDBMS)動态生(shēng)成的頁面,其數據不能(néng)直接批量訪問。


3、介于1和2之間(jiān)的,具有較好(hǎo)(hǎo)結構,遵循一(yī)定模式或風(fēng)格,可直接訪問的網頁。


在提取html文檔的文本信息時(shí)要過濾标識符,但(dàn)同時(shí)還要注意依照标識符來(lái)取得版式信息(如(rú)标題、粗體(tǐ)、關(guān)鍵字等),另外還要過濾無用鏈接(如(rú)廣告鏈接)。


錨文本可以作(zuò)為(wèi)所在頁面内容的評估和所指向的頁面内容的評估,還可以收集一(yī)些(xiē)搜索引擎不能(néng)索引的文件(例如(rú)圖片)。


多媒體(tǐ),圖片等文件一(yī)般通過錨文本和相關(guān)文件注釋來(lái)判斷文件内容。


對于doc、pdf等有專業廠商(shāng)提供的軟件生(shēng)成的文檔,廠商(shāng)會會為(wèi)爬蟲提供相應的文本提取接口的插件。


 

Google對網頁優先性的考慮因素有以下(xià)幾點:


1)查詢驅動的爬取


   此方法适于實時(shí)搜索。對于一(yī)些(xiē)最新(xīn)出現(xiàn)的熱門話(huà)題,或随時(shí)變動的數據(如(rú)股市(shì)信息),數據庫裏沒有這(zhè)些(xiē)網頁的信息,如(rú)果此時(shí)接受了(le)用戶的查詢,則會通過已爬取的其他網頁來(lái)判斷未爬取的網頁的相關(guān)性。


2)反向鏈接數


3)PageRank值


4)前向鏈接數


5)路(lù)徑深度


路(lù)徑深度淺的頁面被認為(wèi)更重要。


 

1.4網頁去重方法


網頁之間(jiān)的鏈接關(guān)系錯綜複雜,為(wèi)了(le)避免重複抓取同一(yī)頁面,要把需要入庫的鏈接與數據庫中的運行隊列和完成隊列都進行比較。


另外,大型搜索引擎多采取多爬蟲并行合作(zuò)抓取的方法,這(zhè)也(yě)産生(shēng)了(le)一(yī)些(xiē)問題。


例如(rú)Google為(wèi)了(le)避免多爬蟲合作(zuò)時(shí)重複抓取同一(yī)頁面,而采用了(le)Crawl Caching Proxy(緩存代理(lǐ))。


 

網絡爬蟲在工作(zuò)時(shí),首先通過DNS解析一(yī)個(gè)URL的主機IP地址,然後連接相應服務(wù)器(qì)的端口并發送請求,通過服務(wù)器(qì)響應來(lái)獲取相關(guān)頁面内容。


URL與IP之間(jiān)的對應關(guān)系可能(néng)是一(yī)對一(yī)、一(yī)對多或多對一(yī)的。


一(yī)個(gè)URL對應多個(gè)IP通常出現(xiàn)在訪問量較大的域名,将一(yī)個(gè)URL與多個(gè)IP綁定以分(fēn)流訪問量,減小單個(gè)服務(wù)器(qì)的訪問壓力(如(rú)Baidu、Google);一(yī)個(gè)IP對應多個(gè)URL則是出于節約服務(wù)器(qì)的目的,或是由于公網IP地址匮乏而産生(shēng)的策略,當客戶端對該IP進行訪問時(shí),先通過請求的協議(yì)頭部來(lái)獲取需要訪問的URL,再将該請求通過反向代理(lǐ)或虛拟主機的方式轉發到相應服務(wù)。


由于這(zhè)種情況,若用IP作(zuò)為(wèi)判斷重複網頁的标準,則可能(néng)因為(wèi)URL與IP的一(yī)對多而出現(xiàn)重複獲取,或因為(wèi)URL與IP的多對一(yī)而出現(xiàn)遺漏。因此,爬蟲在判斷重複頁面時(shí)主要以URL所謂判斷标準,以保證服務(wù)的唯一(yī)性。


 

1.5網絡爬蟲的效率


單線程的爬蟲由于頁面的分(fēn)析和下(xià)載不能(néng)同時(shí)而效率較低(dī),因此出現(xiàn)了(le)多線程爬蟲。有一(yī)個(gè)例子(zǐ)可以幫助理(lǐ)解多線程的意義:現(xiàn)在很多下(xià)載軟件都支持多線程同步下(xià)載,即将下(xià)載内容分(fēn)成幾部分(fēn)同步下(xià)載,速度比單線程要快(kuài)上(shàng)很多。


爬蟲采用線程進行循環,但(dàn)這(zhè)存在一(yī)定弊端:一(yī)旦發生(shēng)網絡阻塞,整個(gè)線程就(jiù)一(yī)直處于等待狀态而導緻死亡。


一(yī)般采取線程監控的方法來(lái)解決,即存在一(yī)個(gè)主線程和一(yī)個(gè)監控線程,監控線程每隔一(yī)段時(shí)間(jiān)去訪問一(yī)次主線程并與其分(fēn)享的變量,一(yī)旦發現(xiàn)超時(shí),就(jiù)認為(wèi)網絡阻塞,這(zhè)時(shí)終止主線程并重新(xīn)啓動,由此避免了(le)網絡阻塞導緻線程一(yī)直等待的問題。


 

1.6網頁更新(xīn)


對于搜索引擎而言,評價網絡爬蟲效率的一(yī)個(gè)重要标準是爬蟲的開銷。


爬蟲開銷 = 重複抓取的老頁面數  發掘的新(xīn)頁面數


即是說(shuō),爬蟲應當盡量發掘新(xīn)頁面而減少重複頁面的爬取,而決定對某個(gè)網頁的更新(xīn)頻率涉及到時(shí)間(jiān)更新(xīn)控制。


一(yī)般做法是将這(zhè)次抓取到的頁面上(shàng)的數據與上(shàng)一(yī)次相比較,如(rú)果進行連續五次這(zhè)樣的比較都沒有變化(huà),則将以後爬取該網頁的時(shí)間(jiān)擴大為(wèi)原來(lái)的2倍;如(rú)果進行連續五次這(zhè)樣的比較都有變化(huà),則将以後爬取該網頁的時(shí)間(jiān)縮短為(wèi)原來(lái)的12。


另外,爬蟲在更新(xīn)網頁内容時(shí),不需要将網頁重新(xīn)抓取一(yī)遍,隻需對網頁的一(yī)些(xiē)屬性加以判斷(如(rú)日期),并與上(shàng)次結果相比即可,如(rú)果相同則無需更新(xīn)。


 

1.7實時(shí)搜索


設想當用戶查詢一(yī)個(gè)熱門話(huà)題,而爬蟲還未抓取相關(guān)網頁,這(zhè)時(shí)就(jiù)不能(néng)在用PageRank來(lái)評價網頁重要性了(le)。PageRank的計算(suàn)對象是已經抓取下(xià)來(lái)的網頁,即,在計算(suàn)PageRank過程中不會有新(xīn)頁面加入,這(zhè)種方法被稱為(wèi)“離線”(off-line)的計算(suàn)方法。這(zhè)種方法适合于對結果的排序,但(dàn)不适用于爬蟲的調度(即動态決定URL的抓取順序),因而誕生(shēng)了(le)一(yī)種OPIC (On-line Page Importance Computation)的新(xīn)型算(suàn)法策略。


OPIC的基本思想是:每個(gè)頁面有一(yī)個(gè)初始cash,在抓取過程中,通過前向鏈接将cash平均分(fēn)給該網頁指向的所有頁面(分(fēn)配過程一(yī)次完成),而爬蟲在爬取過程中隻需優先抓取cash較多的頁面。


 

1.8其他


1、對于一(yī)些(xiē)出售資料的網站(zhàn),他們希望搜索引擎能(néng)所引導他們的資料,但(dàn)又不能(néng)無償将資料的全部内容提供給搜索用戶。因此,他們為(wèi)網絡爬蟲提供了(le)專門的用戶名和密碼,設置一(yī)定的權限,是爬蟲能(néng)夠對網頁進行爬取而又不會讓用戶看到全部内容(用戶點開網頁時(shí),需要提供權限驗證)。


2、每個(gè)網絡爬蟲都有自己的名字。在抓取網頁時(shí)會向服務(wù)器(qì)端發送請求,該請求中包含一(yī)個(gè)用于表示爬蟲身(shēn)份的字段,這(zhè)個(gè)請求會留在訪問日志記錄中,便于網站(zhàn)管理(lǐ)員(yuán)查看。


3、爬蟲進入網站(zhàn)時(shí)會先訪問網站(zhàn)服務(wù)器(qì)根目錄下(xià)的robots.txt,這(zhè)個(gè)協議(yì)告訴爬蟲網站(zhàn)中那些(xiē)内容希望被抓取,那些(xiē)内容不希望被抓取。該協議(yì)不具備強制力。


 

二、網絡爬蟲實例


2.1 Heritrix


Heritrix是一(yī)個(gè)爬蟲框架,可以加入一(yī)些(xiē)可互換的組件。Heritrix是用來(lái)獲取完整精确的網站(zhàn)内容的爬蟲,除文本内容之外,它還獲取其他非文本内容(如(rú)圖片等)并對其進行處理(lǐ),且不對網頁内容進行修改。當重複爬行相同URL時(shí),不會對先前網頁進行替換。


Heritrix主要有以下(xià)幾步:


1)在預定的URL中選擇一(yī)個(gè)并獲取。


2)分(fēn)析,并将結果歸檔。


3)選擇已經發現(xiàn)的感興趣的URL,加入運行隊列。


4)标記已經處理(lǐ)過的URL


Heritrix利用廣度優先策略來(lái)進行網頁獲取,其主要部件都具有高效性和可擴展性。然而Heritrix也(yě)有其一(yī)定的局限性,如(rú):


隻支持單線程爬蟲,多爬蟲之間(jiān)不能(néng)合作(zuò);


操作(zuò)複雜,對有限的資源來(lái)說(shuō)是一(yī)個(gè)問題;


在硬件是系統失敗時(shí),其恢複能(néng)力較差等等。


 

2.2 Nutch


Nutch深度遍曆網站(zhàn)資源,将這(zhè)些(xiē)資源抓取到本地,使用的方法都是分(fēn)析網站(zhàn)每一(yī)個(gè)有效的URL并向服務(wù)器(qì)端提交請求來(lái)獲得相應結果,生(shēng)成本地文件及相應的日志信息等。


Nutch與Heritrix有幾點差異,即:


1)Nutch隻獲取并保存可索引的内容。


2)Nutch 可以修剪内容,或者對内容格式進行轉換。


3)Nutch 保存内容為(wèi)數據庫優化(huà)格式,便于以後索引;且對重複URL,刷新(xīn)替換舊的内容。


4)Nutch 從命令行運行、控制。


5)Nutch 的定制能(néng)力不夠強(不過現(xiàn)在已經有了(le)一(yī)定改進)。


 

2.3 Larbin


Larbin不同于以上(shàng)兩種網絡爬蟲,它隻抓取網頁,而不提供包括分(fēn)析網頁、将結果存儲到數據庫以及建立索引等服務(wù)。


Larbin的目的是對頁面上(shàng)的URL進行擴展性的抓取,為(wèi)搜索引擎提供廣泛的數據來(lái)源。雖然工作(zuò)能(néng)力較為(wèi)單一(yī),但(dàn)Larbin勝在其高度可配置性和良好(hǎo)(hǎo)的工作(zuò)效率(一(yī)個(gè)簡單的larbin的爬蟲可以每天獲取500萬的網頁),這(zhè)也(yě)是Larbin最初的設計理(lǐ)念。


 

2.4 Lucene


Lucene 是一(yī)個(gè)基于Java的全文信息檢索工具包,它本身(shēn)不是一(yī)個(gè)完整的全文索引應用程序,而是為(wèi)各種應用程序提供索引和搜索功能(néng)。隻要能(néng)把要索引的數據轉化(huà)的文本格式,Lucene 就(jiù)能(néng)對該文檔進行索引和搜索。


Lucene采用的是一(yī)種稱為(wèi)反向索引(inverted index)的方法。因此,在用戶輸入查詢條件的時(shí)候,Lucebne能(néng)非常快(kuài)地得到搜索結果。


對文檔建立好(hǎo)(hǎo)索引後,搜索引擎首先會對關(guān)鍵詞進行解析,然後在建立好(hǎo)(hǎo)的索引上(shàng)面進行查找并返回和用戶輸入的關(guān)鍵詞相關(guān)聯的文檔。


上(shàng)海先予工業自動化(huà)設備有限公司以自主核心技術和系統集成優勢為(wèi)依托,針對企業用戶在生(shēng)産過程控制中的各種複雜控制要求,采用DCS和PLC等控制系統為(wèi)企業量身(shēn)定制,技術先進、可靠性高、經濟實用的電氣和自動化(huà)控制,生(shēng)産,輸送,包裝、清洗系統,提供完整的非标制定自動化(huà)生(shēng)産解決方案,從而有效為(wèi)企業降低(dī)勞動力成本、提高品質、提升效率。

 


上(shàng)一(yī)條:曲軸生(shēng)産線瓶頸工序的效率提升
下(xià)一(yī)條:滾筒流水線的分(fēn)類
【刷新(xīn)頁面】 【關(guān)閉窗口】