爬虫原理
原文地址:http://syc001.iteye.com/blog/1028001
爬蟲原理:
每個網(wǎng)頁頁面返回到客戶端的都是 html,你需要的內(nèi)容就在這html里面,這個html你可以用一個字符串去保存到j(luò)ava變量里,你要做的工作就是截取字符串相應(yīng)位置的內(nèi)容并保存起來
,你給的這個網(wǎng)站每個商品的網(wǎng)頁有個特殊的地方
爬蟲分為兩類:
聚集爬蟲:
聚焦爬蟲是一個自動下載網(wǎng)頁的程序,它根據(jù)既定的抓取目標,有選擇的訪問萬維網(wǎng)上的網(wǎng)頁與相關(guān)的鏈接,獲取所需要的信息。聚焦爬蟲并不追求大的覆蓋,而將目標定為抓取與某一特定主題內(nèi)容相關(guān)的網(wǎng)頁,為面向主題的用戶查詢準備數(shù)據(jù)資源。
通用爬蟲:
網(wǎng)絡(luò)爬蟲的組成
在網(wǎng)絡(luò)爬蟲的系統(tǒng)框架中,主過程由控制器,解析器,資源庫三部分組成。控制器的主要工作是負責
給多線程中的各個爬蟲線程分配工作任務(wù)。解析器的主要工作是下載網(wǎng)頁,進行頁面的處理,主要是將一些JS腳本標簽、CSS代碼內(nèi)容、空格字符、HTML標
簽等內(nèi)容處理掉,爬蟲的基本工作是由解析器完成。資源庫是用來存放下載到的網(wǎng)頁資源,一般都采用大型的數(shù)據(jù)庫存儲,如Oracle數(shù)據(jù)庫
,并對其建立索引。
控制器:
控制器是網(wǎng)絡(luò)爬蟲的中央控制器,它主要是負責根據(jù)系統(tǒng)傳過來的URL鏈接,分配一線程,然后啟動線程調(diào)用爬蟲爬取網(wǎng)頁的過程。
解析器:
解析器是負責網(wǎng)絡(luò)爬蟲的主要部分,其負責的工作主要有:下載網(wǎng)頁的功能,對網(wǎng)頁的文本進行處理,如過濾功能,抽取特殊HTML標簽的功能,分析數(shù)據(jù)功能。
資源庫:
主要是用來存儲網(wǎng)頁中下載下來的數(shù)據(jù)記錄的容器,并提供生成索引的目標源。中大型的數(shù)據(jù)庫產(chǎn)品有:Oracle、Sql Server等。
概覽web爬蟲
web爬蟲主要功能是從web中發(fā)現(xiàn),下載以及存儲內(nèi)容。廣泛應(yīng)用于各種搜索引擎中。
一個典型的web爬蟲主要由以下的部分組成:
能被爬蟲識別的URL庫。
文檔下載模塊,主要用于從web中下載內(nèi)容。
文檔解析模塊,用于解析下載文檔中的內(nèi)容,如解析HTML,PDF,Word等等。這個模塊還要提取網(wǎng)頁中的URL和一些對于索引有用的數(shù)據(jù)。
存儲文檔的元數(shù)據(jù)以及內(nèi)容的庫。
規(guī)范化URL模塊,把URL轉(zhuǎn)成標準的格式。
URL過濾器,爬蟲可以過濾掉不需要的URL。
設(shè)計與實現(xiàn)上述模塊,主要取決于你的爬蟲到底要爬取什么以及要抓取的范圍。最簡單的例子是從一個已知的站點抓取一些網(wǎng)頁,這個爬蟲代碼用一頁紙
就可以寫完。互聯(lián)網(wǎng)應(yīng)用中,可能會碰到這種十分簡單的需求,但是如果要實現(xiàn)一個爬取大量文檔的爬蟲,就不是那么簡單了。一般來說這個爬蟲就是N個應(yīng)用組
成,并且難點是基于分布式的。
爬蟲的兩個階段
一個典型的爬蟲主要有如下兩個階段
URL庫初始化然后開始爬取。
爬蟲讀取沒有訪問過的URL,來確定它的工作范圍。
對于要抓取的URL,要進行如下的不重
獲取URL的內(nèi)容
解析內(nèi)容,獲取URL以及所需的數(shù)據(jù)。
存儲有價值的數(shù)據(jù)。
規(guī)范化新抓取的URL。
過濾掉不需要爬去的URL。
把要抓取的URL更新到URL庫中。
重復(fù)步驟2,直到抓取的網(wǎng)頁深度完畢為止。
從廣度進行分類的話,爬蟲有兩類。通用型和集中型。通用型是采集所有能解析的文檔。它們主要通過URL過濾技術(shù)來實現(xiàn)這一過程。而集中型爬蟲主要爬取特定內(nèi)容的文檔,如爬取sina博客,格式為固定內(nèi)容也是我們感興趣的。
幸運的是,有開源的爬蟲可以使用
在java中,nutch和heritrix都提供了爬蟲的實現(xiàn)。Nutch是apache lucene的子項目,地址是http://lucene.apache.org/nutch/
。這個項目非常穩(wěn)定,并且文檔豐富。Nutch把多個網(wǎng)頁存儲在一個文件中。對于大的爬蟲來說,這么降低I/O讀寫,性能更加優(yōu)秀。
Heritrix是互聯(lián)網(wǎng)存檔的web爬蟲。項目地址為http://crawler.archive.org/
。Heritrix專注于大型爬蟲的實現(xiàn)。許可證為LGPL。
另外提一下,還有一個項目值得關(guān)注,那就是apache tika。項目地址為http://tika.apache.org/
。tika使用解析器從文檔中發(fā)現(xiàn)以及提取元數(shù)據(jù)和文本內(nèi)容。
Google:《Java開源Web爬蟲分類列表》
(1)
ItSucks是一個java web spider(web機器人,爬蟲)開源項目。支持通過下載模板和正則表達式來定義下載規(guī)則。提供一個swing GUI操作界面。下載地址:http://itsucks.sourceforge.net/
(2)
WebSPHINX
WebSPHINX是一個Java類包和Web爬蟲的交互式開發(fā)環(huán)境。Web爬蟲(也叫作機器人或蜘蛛)是可以自動瀏覽與處理Web頁面的程序。WebSPHINX由兩部分組成:爬蟲工作平臺和WebSPHINX類包。http://www.cs.cmu.edu/~rcm/websphinx/.
(3)
JSpider
JSpider:是一個完全可配置和定制的Web Spider引擎.你可以利用它來檢查網(wǎng)站的錯誤(內(nèi)在的服務(wù)器錯誤等),網(wǎng)站內(nèi)外部鏈接檢查,分析網(wǎng)站的結(jié)構(gòu)(可創(chuàng)建一個網(wǎng)站地圖),下載整個Web站點,你還可以寫一個JSpider插件來擴展你所需要的功能。http://j-spider.sourceforge.net/
(4)
Arale
Arale主要為個人使用而設(shè)計,而沒有像其它爬蟲一樣是關(guān)注于頁面索引。Arale能夠下載整個web站點或來自web站點的某些資源。Arale還能夠把動態(tài)頁面映射成靜態(tài)頁面。http://web.tiscali.it/_flat/arale.jsp.html
(5)
Web-Harvest
Web-Harvest是一個Java開源Web數(shù)據(jù)抽取工具。它能夠收集指定的Web頁面并從這些頁面中提取有用的數(shù)據(jù)。Web-Harvest主要是運用了像XSLT,XQuery,正則表達式等這些技術(shù)來實現(xiàn)對text/xml的操作。http://web-harvest.sourceforge.net/
原文地址:http://www.cnblogs.com/wawlian/archive/2012/06/18/2553061.html(有一些小改動進行了高亮)
網(wǎng)絡(luò)爬蟲是捜索引擎抓取系統(tǒng)的重要組成部分。爬蟲的主要目的是將互聯(lián)網(wǎng)上的網(wǎng)頁下載到本地形成一個或聯(lián)網(wǎng)內(nèi)容的鏡像備份。這篇博客主要對爬蟲以及抓取系統(tǒng)進行一個簡單的概述。
一、網(wǎng)絡(luò)爬蟲的基本結(jié)構(gòu)及工作流程
一個通用的網(wǎng)絡(luò)爬蟲的框架如圖所示:
網(wǎng)絡(luò)爬蟲的基本工作流程如下:
1.首先選取一部分精心挑選的種子URL;
2.將這些URL放入待抓取URL隊列;
3.從待抓取URL隊列中取出待抓取在URL,解析DNS,并且得到主機的ip,并將URL對應(yīng)的網(wǎng)頁下載下來,存儲進已下載網(wǎng)頁庫中。此外,將這些URL放進已抓取URL隊列。
4.分析已抓取URL隊列中的URL,分析其中的其他URL,并且將URL放入待抓取URL隊列,從而進入下一個循環(huán)。
二、從爬蟲的角度對互聯(lián)網(wǎng)進行劃分
對應(yīng)的,可以將互聯(lián)網(wǎng)的所有頁面分為五個部分:
1.已下載未過期網(wǎng)頁
2.已下載已過期網(wǎng)頁:抓取到的網(wǎng)頁實際上是互聯(lián)網(wǎng)內(nèi)容的一個鏡像與備份,互聯(lián)網(wǎng)是動態(tài)變化的,一部分互聯(lián)網(wǎng)上的內(nèi)容已經(jīng)發(fā)生了變化,這時,這部分抓取到的網(wǎng)頁就已經(jīng)過期了。
3.待下載網(wǎng)頁:也就是待抓取URL隊列中的那些頁面
4.可知網(wǎng)頁:還沒有抓取下來,也沒有在待抓取URL隊列中,但是可以通過對已抓取頁面或者待抓取URL對應(yīng)頁面進行分析獲取到的URL,認為是可知網(wǎng)頁。
5.還有一部分網(wǎng)頁,爬蟲是無法直接抓取下載的。稱為不可知網(wǎng)頁。
三、抓取策略
在爬蟲系統(tǒng)中,待抓取URL隊列是很重要的一部分。待抓取URL隊列中的URL以什么樣的順序排列也是一個很重要的問題,因為這涉及到先抓取那個頁面,后抓取哪個頁面。而決定這些URL排列順序的方法,叫做抓取策略。下面重點介紹幾種常見的抓取策略:
1.深度優(yōu)先遍歷策略
深度優(yōu)先遍歷策略是指網(wǎng)絡(luò)爬蟲會從起始頁開始,一個鏈接一個鏈接跟蹤下去,處理完這條線路之后再轉(zhuǎn)入下一個起始頁,繼續(xù)跟蹤鏈接。我們以下面的圖為例:
遍歷的路徑:A-F-G E-H-I B C D
2.寬度優(yōu)先遍歷策略
寬度優(yōu)先遍歷策略的基本思路是,將新下載網(wǎng)頁中發(fā)現(xiàn)的鏈接直接插入待抓取URL隊列的末尾。也就是指網(wǎng)絡(luò)爬蟲會先抓取起始網(wǎng)頁中鏈接的所有網(wǎng)頁,然后再選擇其中的一個鏈接網(wǎng)頁,繼續(xù)抓取在此網(wǎng)頁中鏈接的所有網(wǎng)頁。還是以上面的圖為例:
遍歷路徑:A-B-C-D-E-F G H I
3.反向鏈接數(shù)策略
反向鏈接數(shù)是指一個網(wǎng)頁被其他網(wǎng)頁鏈接指向的數(shù)量。反向鏈接數(shù)表示的是一個網(wǎng)頁的內(nèi)容受到其他人的推薦的程度。因此,很多時候搜索引擎的抓取系統(tǒng)會使用這個指標來評價網(wǎng)頁的重要程度,從而決定不同網(wǎng)頁的抓取先后順序。
在真實的網(wǎng)絡(luò)環(huán)境中,由于廣告鏈接、作弊鏈接的存在,反向鏈接數(shù)不能完全等他我那個也的重要程度。因此,搜索引擎往往考慮一些可靠的反向鏈接數(shù)。
4.Partial PageRank策略
Partial PageRank算法借鑒了PageRank算法的思想:對于已經(jīng)下載的網(wǎng)頁中進行分析獲取到的URL,連同待抓取URL隊列中的URL,形成網(wǎng)頁集合,計算每個頁面的PageRank值,計算完之后,將待抓取URL隊列中的URL按照PageRank值的大小排列,并按照該順序抓取頁面。
如果每次抓取一個頁面,就重新計算PageRank值,一種折中方案是:每抓取K個頁面后,重新計算一次PageRank值。但是這種情況還會有一個問題:對于已經(jīng)下載下來的頁面中分析出的鏈接,也就是我們之前提到的可知網(wǎng)頁那一部分,暫時是沒有PageRank值的。為了解決這個問題,會給這些頁面一個臨時的PageRank值:將這個網(wǎng)頁所有入鏈傳遞進來的PageRank值進行匯總,這樣就形成了該未知頁面的PageRank值,從而參與排序。下面舉例說明:
5.OPIC策略策略
該算法實際上也是對頁面進行一個重要性打分。在算法開始前,給所有頁面一個相同的初始現(xiàn)金(cash)。當下載了某個頁面P之后,將P的現(xiàn)金分攤給所有從P中分析出的鏈接,并且將P的現(xiàn)金清空。對于待抓取URL隊列中的所有頁面按照現(xiàn)金數(shù)進行排序。
6.大站優(yōu)先策略
對于待抓取URL隊列中的所有網(wǎng)頁,根據(jù)所屬的網(wǎng)站進行分類。對于待下載頁面數(shù)多的網(wǎng)站,優(yōu)先下載。這個策略也因此叫做大站優(yōu)先策略。
總結(jié)
- 上一篇: 无线网络wifi (WPA/WPA2)密
- 下一篇: DESeq2包