c++開源爬蟲-Larbin簡介

原文地址http://leihuang.net/2014/06/16/Larbin-Introduction/


因爲最近學校實訓,做的是一個搜索相關的項目,並且是c++的一個項目,所以就想到了larbin,於是接下來幾天就現研究研究其源碼,再根據項目需求修改其源碼。

不多說,直接進入今天的正題。今天的目的就是簡單瞭解下larbin。

Larbin簡介

larbin是一種開源的網絡爬蟲/網絡蜘蛛,由法國的年輕人Sébastien Ailleret獨立開發,用c++語言實現。larbin目的是能夠跟蹤頁面的url進行擴展的抓取,最後爲搜索引擎提供廣泛的數據來源。 Larbin只是一個爬蟲,也就是說larbin只抓取網頁,至於如何parse的事情則由用戶自己完成。另外,如何存儲到數據庫以及建立索引的事情 larbin也不提供。  

latbin最初的設計也是依據設計簡單但是高度可配置性的原則,因此我們可以看到,一個簡單的larbin的爬蟲可以每天獲取500萬的網頁,實在是非常高效。  利用larbin,我們可以輕易的獲取/確定單個網站的所有聯結,甚至可以鏡像一個網站;也可以用它建立url 列表羣,例如針對所有的網頁進行 url retrive後,進行xml的聯結的獲取。或者是 mp3,或者定製larbin,可以作爲搜索引擎的信息的來源。

Larbin官網:http://larbin.sourceforge.net/index-eng.html

How to use Larbin

由於Larbin開發環境是linux所以最好是在linux系統下執行下面的操作。

首先你肯定要下載larbin,可以當官網上下載,然後解壓;也可以到我的github上下,命令如下。

git clone https://github.com/SpeedMe/larbin.git

進入到目錄下面,命令段執行下面的命令:

./configure make ./larbin

如何按自己方式配置larbin

此時你已經配置好了,並且執行了./larbin命令運行起來了,你可以訪問http://localhost:8081/了,但是你是按照官方默認的配置來運行該爬蟲的,你也可以自己對其配置文件進行修改,你要修改的配置文件主要有兩個options.h和larbin.conf。下面是我當網上找到的配置文件介紹。

每次修改larbin.conf後,不需要執行前兩個命令,可以直接運行larbin即:./larbin 但是修改其他文件的時候就要三個命令都執行。

英文好的可以之間看官網上的配置文件介紹:http://larbin.sourceforge.net/custom-eng.html

最常用的修改是startUrl的值,即其實網頁的值,你也可以定義多個startUrl。

1、larbin.conf文件

###############################################
//客戶端標記,當對其他網站抓取時,被抓取的網站知道是什麼抓取的

UserAgent larbin_2.6.3

############################################
# What are the inputs and ouputs of larbin
# port on which is launched the http statistic webserver
# if unset or set to 0, no webserver is launched

//用於運行的http web服務器的端口號(larbin運行時訪問http://localhost:8081/,設置爲http_port 8081).如果將端口設爲0,則不會啓動web服務器。通過這個可以查看爬行結果。

httpPort 8081

# port on which you can submit urls to fetch
# no input is possible if you comment this line or use port 0

//你要爬取url的端口。如果註釋掉或設爲0,則可能沒有任何輸入。如果通過手動或者程序提交爬取的//urls,則必須練就到計算機的TCP端口1976,即設爲:inputPort 1976,可以添加爬行的url。

#inputPort 1976

############################################
# parameters to adapt depending on your network
# Number of connexions in parallel (to adapt depending of your network speed)
//並行爬取網頁的數量,根據自己環境的網速調解,如果超時太多,則要降低這個並行數量

pagesConnexions 100

# Number of dns calls in parallel
//並行DNS域名解析的數量。

dnsConnexions 5

# How deep do you want to go in a site
//對一個站點的爬取的深度

depthInSite 5

# do you want to follow external links
//不允許訪問外部鏈接。如果設置則只可訪問同一主機的連接
#noExternalLinks

# time between 2 calls on the same server (in sec) : NEVER less than 30
//訪問同一服務器的時間間隔。不可低於30s,建議60s
waitDuration 60

# Make requests through a proxy (use with care)
//是否用代理連接,如果用,則要設置、可以不用盡量不要用,這個選項要謹慎
#proxy www 8080

##############################################
# now, let's customize the search

# first page to fetch (you can specify several urls)
//開始爬取的URL
startUrl http://slashdot.org/

# Do you want to limit your search to a specific domain ?
# if yes, uncomment the following line
//這個選項設置了,則不可以爬行指定的特殊域名
#limitToDomain .fr .dk .uk end

# What are the extensions you surely don't want
# never forbid .html, .htm and so on : larbin needs them
//不想要的擴展名文件。一定不要禁止.html、.htm.larbin爬取的就是它們。禁止也是無效的
forbiddenExtensions
.tar .gz .tgz .zip .Z .rpm .deb
.ps .dvi .pdf
.png .jpg .jpeg .bmp .smi .tiff .gif
.mov .avi .mpeg .mpg .mp3 .qt .wav .ram .rm
.jar .java .class .diff
.doc .xls .ppt .mdb .rtf .exe .pps .so .psd
end

2、options.h

2.1 輸出模式

// Select the output module you want to use

//默認模式。什麼也不輸出,不要選擇這個
#define DEFAULT_OUTPUT // do nothing...
//簡單保存,存在save/dxxxxx/fyyyyy文件中,每個目錄下2000個文件
//#define SIMPLE_SAVE // save in files named save/dxxxxxx/fyyyyyy
//鏡像方式存儲。按網頁的層次存儲,可以作爲網頁的字典。
//#define MIRROR_SAVE // save in files (respect sites hierarchy)
//狀態輸出。在網頁上進行狀態輸出,可以查看http://localhost:8081/output.html查看結果
//#define STATS_OUTPUT // do some stats on pages
    這些模式被定製在src/type.h中,可以在src/interf/useroutput.cc中定製自己的輸出模式。
   這個文件中還有很多相關配置,更改後,需要重新編譯。

2.2 特定查詢

// Set up a specific search
//設置特定的查詢
//#define SPECIFICSEARCH
//內容類型
//#define contentTypes ((char *[]) { "audio/mpeg", NULL })
//文件擴展。用於查詢速度,不涉及類型,類型由上一個決定
//#define privilegedExts ((char *[]) { ".mp3", NULL })

2.3 設置完要設置特定文件的管理

#define DEFAULT_SPECIFIC //默認管理方式。 作爲html有限制除了被解析。

// 存儲特定文件。 允許將文件存儲在硬盤上 文件可以很大在src/types.h 可以具體設置。
#define SAVE_SPECIFIC 

//動態存儲模式。對於較大的文件動態的分配buffer。
#define DYNAMIC_SPECIFIC 
     可以通過"src/fetch/specbuf.cc" and "src/fetch/specbuf.h" 定義特定文件的管理方式。

2.4 你要爬蟲做什麼

//不繼續子鏈接。不設置此項則html頁不被解析鏈接也不會爬子鏈接。通過輸入系統添加url時很有用
#define FOLLOW_LINKS

//每個網頁中包含的子鏈接的列表。在"useroutput.cc" 用page->getLinks() 訪問此信息。
#define LINKS_INFO 

//url標籤。設置此項url有一個int(默認爲0)。使用輸入系統統時應該給定一個int。可以通過其獲取u//rl。可以重定向。
#define URL_TAGS

//不允許重複。如果設置則遇到相同網頁但已遇到過時則不管。
#define NO_DUP

//結束退出。沒有url可爬取時是否退出。設置則退出。
#define EXIT_AT_END 

//抓取網頁中的圖片。設置了此項則要更新larbin.conf中禁止項。
#define IMAGES

//抓取任何類型網頁不管其的類型。設置要更新larbin.conf。
#define ANYTYPE

//要larbin管理cookies。只簡單實現但很有用。
#define COOKIES

2.5 其他選項說明

#define CGILEVEL 1        //定於選項及其參數。用於對爬行的url的限制。

#define MAXBANDWIDTH 200000  //larbin使用的帶寬大小。不設置則不限帶寬。

#define DEPTHBYSITE          //當url鏈接到其他站點時新rul的深度是已被初始化的。

2.6 效率和特徵

//是否爲輸入制定一個專用線程。當你在useroutput.cc定義自己的代碼時必須設置此項。
#define THREAD_OUTPUT

//重啓位置記錄表。設置此項時可以從上次終止處繼續爬取。使用-scratch 選項從上次結束處重啓。
#define RELOAD

2.7 Larbin怎麼工作

#define NOWEBSERVER    //不啓動服務器。不運行線程時很有用

#define GRAPH //是否在狀態也使用柱狀圖。

#define NDEBUG //不啓動調試信息。

#define NOSTATS //不啓動狀態輸出。

#define STATS //啓動狀態輸出。運行時每個一段時間就會輸出抓取的狀態。

#define BIGSTATS //在標準輸出上顯示每個被抓去的網頁名字。會降低larbin速度

#define CRASH //用於報告嚴重的bugs用。以gmake debug模式編譯時使用。


當你熟悉了上面的配置文件之後,你差不多就能玩轉Larbin了,但是呢,有些僅僅一樣東西畢竟難以所有人的意願,所以就需要我們自己來修改源代碼了,然後修改之前,我們肯定要先將larbin的代碼給過一遍,對它的源碼有一定研究之後再來改。

接下來的幾天我就是現研究源碼,然後修改。

樂此不疲~

2014-06-16 21:09:22


發佈了142 篇原創文章 · 獲贊 104 · 訪問量 87萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章