亚洲国产精品无码久久大片,亚洲AV无码乱码麻豆精品国产,亚洲品质自拍网站,少妇伦子伦精品无码STYLES,国产精久久久久久久

開(kāi)源的網(wǎng)路爬蟲(chóng)larbin

優(yōu)采云 發(fā)布時(shí)間: 2020-06-26 08:00

  larbin是一種開(kāi)源的網(wǎng)路爬蟲(chóng)/網(wǎng)路蜘蛛,由美國的年輕人 Sébastien Ailleret獨立開(kāi)發(fā)。larbin目的是能否跟蹤頁(yè)面的url進(jìn)行擴充的抓取,最后為搜索引擎提供廣泛的數據來(lái)源。Larbin只是一個(gè)爬蟲(chóng),也就 是說(shuō)larbin只抓取網(wǎng)頁(yè),至于怎樣parse的事情則由用戶(hù)自己完成。另外,如何儲存到數據庫以及完善索引的事情 larbin也不提供。一個(gè)簡(jiǎn)單的larbin的爬蟲(chóng)可以每晚獲?。担埃叭f(wàn)的網(wǎng)頁(yè)。

  利用larbin,我們可以輕易的獲取/確定單個(gè)網(wǎng)站的所有連結,甚至可以鏡像一個(gè)網(wǎng)站;也可以用它完善url 列表群,例如針對所有的網(wǎng)頁(yè)進(jìn)行 url retrive后,進(jìn)行xml的連結的獲取?;蛘呤?mp3,或者訂制larbin,可以作為搜索引擎的信息的來(lái)源。

  不過(guò)它的最大的亮點(diǎn)還是開(kāi)源,相信很多人領(lǐng)到larbin源代碼的時(shí)侯會(huì )覺(jué)得無(wú)從入手,下面是一篇特別不錯的開(kāi)源的網(wǎng)絡(luò )爬蟲(chóng)/網(wǎng)絡(luò )蜘蛛larbin結構剖析的文章,有興趣的最好仔細閱讀嘗試一下。

  互聯(lián)網(wǎng)是一個(gè)龐大的非結構化的數據庫,將數據有效的檢索并組織呈現下來(lái)有著(zhù)巨大的應用前景,尤其是類(lèi)似RSS的以XML為基礎的結構化的數據越來(lái)越 多,內容的組織形式越來(lái)越靈活,檢索組織并呈現會(huì )有著(zhù)越來(lái)越廣泛的應用范圍,同時(shí)在時(shí)效性和可讀性上也會(huì )有越來(lái)越高的要求。這一切的基礎是爬蟲(chóng),信息的來(lái) 源入口。一個(gè)高效,靈活可擴充的爬蟲(chóng)對以上應用都有著(zhù)無(wú)可替代的重要意義。

  要設計一個(gè)爬蟲(chóng),首先須要考慮的效率。對于網(wǎng)路而言,基于TCP/IP的通訊編程有幾種方式。

  第一種是單線(xiàn)程阻塞,這是最簡(jiǎn)單也最容易實(shí)現的一種,一個(gè)事例:在Shell中通過(guò)curl,pcregrep等一系統命令可以直接實(shí)現一個(gè)簡(jiǎn)單的 爬蟲(chóng),但同時(shí)它的效率問(wèn)題也顯而易見(jiàn):由于是阻塞方法讀取,dns解析,建立聯(lián)接,寫(xiě)入懇求,讀取結果這種步驟上就會(huì )形成時(shí)間的延后,從而未能有效的借助 服務(wù)器的全部資源。

  第二種是多線(xiàn)程阻塞。建立多個(gè)阻塞的線(xiàn)程,分別懇求不同的url。相對于第一種方式,它可以更有效的借助機器的資源,特別是網(wǎng)路資源開(kāi)源網(wǎng)絡(luò )爬蟲(chóng),因為無(wú)數線(xiàn)程 在同時(shí)工作,所以網(wǎng)路會(huì )比較充分的借助,但同時(shí)對機器CPU資源的消耗也是比較大,在用戶(hù)級多線(xiàn)程間的頻繁切換對于性能的影響早已值得我們考慮。

  第三種是單線(xiàn)程非阻塞。這是目前使用的比較多的一種做法,無(wú)論在client還是server都有著(zhù)廣泛的應用。在一個(gè)線(xiàn)程內打開(kāi)多個(gè)非阻塞的連 接,通過(guò)poll/epoll /select對聯(lián)接狀態(tài)進(jìn)行判定,在第一時(shí)間響應懇求,不但充分利用了網(wǎng)路資源,同時(shí)也將本機CPU資源的消耗降至最低。這種方式須要對dns懇求,連 接,讀寫(xiě)操作都采用異步非阻塞操作,其中第一種比較復雜,可以采用adns作為解決方案,后面三個(gè)操作相對簡(jiǎn)單可以直接在程序內實(shí)現。

  效率問(wèn)題解決后就須要考慮具體的設計問(wèn)題了。

  url肯定須要一個(gè)單獨的類(lèi)進(jìn)行處理,包括顯示,分析url,得到主機,端口,文件數據。

  然后須要對url進(jìn)行排重,需要一個(gè)比較大的url Hash表。

  如果還要對網(wǎng)頁(yè)內容進(jìn)行排重,則還須要一個(gè)Document Hash表。

  爬過(guò)的url須要記錄出來(lái),由于量比較大,我們將它講到c盤(pán)上,所以還須要一個(gè)FIFO的類(lèi)(記作ur*敏*感*詞*isk)。

  現在須要爬的url同樣須要一個(gè)FIFO類(lèi)來(lái)處理,重新開(kāi)始時(shí),url會(huì )從定時(shí)從爬過(guò)的url FIFO里取下來(lái),寫(xiě)到這個(gè)FIFO里。正在運行的爬蟲(chóng)須要從這個(gè)FIFO里讀數據下來(lái),加入到主機類(lèi)的url列表里。當然,也會(huì )從前一個(gè)FIFO里直接 讀url下來(lái),不過(guò)優(yōu)先級應當比這個(gè)上面下來(lái)的url低,畢竟是早已爬過(guò)的。

  爬蟲(chóng)通常是對多個(gè)網(wǎng)站進(jìn)行爬取,但在同時(shí)站點(diǎn)內dns的懇求可以只做一次開(kāi)源網(wǎng)絡(luò )爬蟲(chóng),這就須要將主機名獨立于url,單獨有一個(gè)類(lèi)進(jìn)行處理。

  主機名解析完成后須要有一個(gè)解析完成的IP類(lèi)與之應用,用于connect的時(shí)侯使用。

  HTML文檔的解析類(lèi)也要有一個(gè),用來(lái)剖析網(wǎng)頁(yè),取出上面的url,加入到ur*敏*感*詞*isk。

  再加上一些字符串,調度類(lèi),一個(gè)簡(jiǎn)單的爬蟲(chóng)基本上就完成了。

  以上基本上是Larbin的設計思路,Larbin在具體實(shí)現上還有一些特殊的處理,例如帶了一個(gè)webserver,以及對特殊文件的處理。 Larbin有一點(diǎn)設計不不太好,就是慢的訪(fǎng)問(wèn)會(huì )越來(lái)越多,占用大量的聯(lián)接,需要改進(jìn),另外假如對于*敏*感*詞*的爬蟲(chóng),這僅僅實(shí)現了抓取的部份,要分布式的擴 展還須要降低url的集中管理與調度以及前臺spider的分布式算法。

  Larbin網(wǎng)站爬蟲(chóng)簡(jiǎn)明使用說(shuō)明

  larbin是一種爬蟲(chóng)工具,我也是前段時(shí)間網(wǎng)上見(jiàn)到 Larbin 一種高效的搜索引擎爬蟲(chóng)工具 一文時(shí)才曉得有這么個(gè)東西,初步認定,我比較喜歡這個(gè)工具(比起nutch的crawl來(lái)說(shuō)),因為它是C++寫(xiě)的,類(lèi)似C嘛,我熟,可以自己改改,順便 學(xué)習一下C++(幾年來(lái)的經(jīng)驗告訴我說(shuō):改他人的東西來(lái)學(xué)一種技術(shù)比從頭寫(xiě)helloworld快好多)。于是開(kāi)始了我辛酸的larbin試用之旅。

  回頭瞧瞧自己遇見(jiàn)的問(wèn)題都是因為沒(méi)認真看文檔造成的,唉,老毛病了。下次雖然是E文的也得好好看,不能盲目的試,浪費時(shí)間。

  larbin官方地址:

  一,編譯

  這也好說(shuō),whahahaha,那是!因為從官方網(wǎng)站下出來(lái)的代碼不能編譯通過(guò)(linux gcc下)

  ./configure

  make

  gcc -O3 -Wall -D_REENTRANT -c -o parse.o parse.c

  parse.c:115: error: conflicting types for ’adns__parse_domain’

  internal.h:571: error: previous declaration of ’adns__parse_domain’ was here

  parse.c:115: error: conflicting types for ’adns__parse_domain’

  internal.h:571: error: previous declaration of ’adns__parse_domain’ was here

  gmake[1]: *** [parse.o] 錯誤 1

  gmake[1]: Leaving directory `/home/leo/leo/larbin-2.6.3/adns’

  make: *** [all] 錯誤 2

  函數原型和定義不一致這個(gè)好改:

  打開(kāi)./adns/internal.h文件,把568-571行直接注釋掉就行了。

  二,運行

  這個(gè)就不說(shuō)了,./larbin就運行了,larbin.conf中先進(jìn)行配置就可以了,這個(gè)配置就不說(shuō)了。。

  運行后可以:8081 看運行狀態(tài),不錯的看法。 larbin.conf中有個(gè):inputPort 1976配置,就是可以運行時(shí)降低要抓取的URL,這個(gè)看法非常好,可是?怎么加呢?象原本那樣::1976那樣是不行的,報 錯???試了很久沒(méi)結果,最后GDB跟蹤了一下,唉,原來(lái)直接telnet host 1976進(jìn)行降低就可以了。后來(lái)見(jiàn)到文檔里寫(xiě)的親親楚楚,暈倒。。。。。

  三,結果

  哈哈,下班后找了臺機子跑了上去,那晚午睡的時(shí)侯都夢(mèng)到自己的搜索引擎趕GOOGLE超BAIDU了,那個(gè)激動(dòng)啊。

  第二天下班的時(shí)侯取看結果,發(fā)現目錄下不僅些fifo*文件外哪些都沒(méi)有,那個(gè)糾結。沒(méi)辦法啊,再看文檔 How to customize Larbin 發(fā)現如此段說(shuō)明:

  The first thing you can define is the module you want to use for ouput. This defines what you want to do with the pages larbin gets. Here are the different options :

  DEFAULT_OUTPUT : This module mainly does nothing, except statistics.

  SIMPLE_SAVE : This module saves pages on disk. It stores 2000 files per directory (with an index).

  MIRROR_SAVE : This module saves pages on disk with the hierarchy of the site they come from. It uses one directory per site.

  STATS_OUTPUT : This modules makes some stats on the pages. In order to see the results, see :8081/output.html.

  靠,默認哪些都沒(méi)輸出,于是認真的看了官方網(wǎng)站上僅有的兩個(gè)文檔,修改了options.h再編譯,終于有結果了。

  我的option中改了:

  SIMPLE_SAVE 簡(jiǎn)單輸出一個(gè)目錄兩千個(gè)文件,包含索引。

  CGILEVEL=0 處理服務(wù)器端程序,也就是但url中包含? & = 之類(lèi)的querString時(shí)也處理。

  NO_DUP

  其余可依據各自須要更改,詳見(jiàn): How to customize Larbin 一文。

  四,問(wèn)題

  在使用過(guò)程中發(fā)覺(jué),在抓網(wǎng)頁(yè)的時(shí)侯,如果URL中包含未編碼(encodurl)中文時(shí),無(wú)法抓取,簡(jiǎn)單的看了一下在: src/utils/中的fileNormalize 有涉及。于是寫(xiě)了個(gè)encodurl函數加在url類(lèi)的構造函數里,問(wèn)題就解決了。

  由于須要比較好的可定制性,這個(gè)工具其實(shí)還不大滿(mǎn)足我的需求,最終我沒(méi)使用她,而是自己用perl在WWW:SimpleRobot的基礎上搞了個(gè)適宜我的。。再說(shuō)了perl在字符躥處理上應當不比C++慢,總的來(lái)說(shuō)那種小工具性能還不錯。。呵呵。

  不過(guò)還是把這種寫(xiě)下來(lái),給沒(méi)看文檔的同學(xué)(希望極少),也警示自己一定要認真看文檔

0 個(gè)評論

要回復文章請先登錄注冊


官方客服QQ群

微信人工客服

QQ人工客服


線(xiàn)

亚洲国产精品无码久久大片,亚洲AV无码乱码麻豆精品国产,亚洲品质自拍网站,少妇伦子伦精品无码STYLES,国产精久久久久久久