介紹
功能:網絡爬蟲
開發語言:c++
開發者:Sébastien Ailleret(法國)
特點:只抓取網頁,高效(一個簡單的larbin的爬蟲可以每天獲取500萬的網頁)
安裝
安裝平台:Ubuntu 12.10
下載:http://sourceforge.net/projects/larbin/files/larbin/2.6.3/larbin-2.6.3.tar.gz/download
安裝:
tar -zxvf larbin-2.6.3.tar.gz cd larbin-2.6.3 ./configure make
期間會出現錯誤,解決
1. adns文件夾下internal.h文件569-571行:
adns_status adns__parse_domain(adns_state ads, int serv, adns_queryqu, vbuf *vb, parsedomain_flags flags, const byte *dgram, int dglen, int *cbyte_io, int max);
改為
adns_status adns__parse_domain(adns_state ads, int serv, adns_query qu, vbuf *vb, adns_queryflags flags, const byte *dgram, int dglen, int *cbyte_io, int max);
2. 輸入sudo ./congure 出現錯誤
make[2]: 正在進入目錄 `/home/byd/test/larbin-2.6.3/src/utils' makedepend -f- -I.. -Y *.cc 2> /dev/null > .depend make[2]: *** [dep-in] 錯誤 127 make[2]:正在離開目錄 `/home/byd/test/larbin-2.6.3/src/utils' make[2]: 正在進入目錄 `/home/byd/test/larbin-2.6.3/src/interf' <span style="color: #ff0000;"><strong>makedepend</strong></span> -f- -I.. -Y *.cc 2> /dev/null > .depend make[2]: *** [dep-in] 錯誤 127 make[2]:正在離開目錄 `/home/byd/test/larbin-2.6.3/src/interf' make[2]: 正在進入目錄 `/home/byd/test/larbin-2.6.3/src/fetch' makedepend -f- -I.. -Y *.cc 2> /dev/null > .depend make[2]: *** [dep-in] 錯誤 127 make[2]:正在離開目錄 `/home/byd/test/larbin-2.6.3/src/fetch' make[1]: *** [dep] 錯誤 2 make[1]:正在離開目錄 `/home/byd/test/larbin-2.6.3/src' make: *** [dep] 錯誤 2
上邊提示makedepend 有問題,於是輸入makedepend,提示
makedepend 沒安裝,但是可以通過
sudo apt-get install xutils-dev
ok了。
3. 到/usr/include/c++/下CP一份iostream文件到larbin的src目錄下。並將其名改為iostream.h,在文件中添加一句
using namespace std;
然后,繼續
make
運行
./larbin
可以在瀏覽器上輸入"localhost:8081"看當前爬蟲的運行狀況

終止
ctrl+c
重啟
./larbin -scratch
再次啟動larbin時出現錯誤(只輸入命令 ./larbin)
larbin_2.6.3 is starting its search Unable to get the socket for the webserver (8081) : Address already in use
原因
當客戶端保持着與服務器端的連接,這時服務器端斷開,再開啟服務器時會出現: Address already in use
解決
netstat -anp | more
可以看到(如下圖),殺死進程即可
kill -9 18066

其中
- 在Internet RFC標准中,Netstat的定義是: Netstat是在內核中訪問網絡及相關信息的程序,它能提供TCP連接,TCP和UDP監聽,進程內存管理的相關報告
- kill - 9 表示強制殺死該進程(最好少用,他是強制性的,即使是系統進程也會殺掉的)
配置
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
// 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模式編譯時使用。
參考
