爬行動物的特征
配置方便。您可以通過使用設置函數來定義用戶代理、cookie、超時、代理以及獲取線程和解析線程的最大數量。
程序邏輯是獨立的。用戶可以分別定義爬蟲的解析功能和數據持久化功能。並且對於解析後的新url,用戶可以使用cspider提供的addUrl函數將其添加到任務隊列中。
方便的字符串處理。Cspider提供了基於pcre的簡單正則表達式函數,基於libxml2的xpath解析函數,以及解析json的Cjson庫。
高效抓取。Cspider基於libuv調度抓取線程和解析線程,使用curl作為其網絡請求庫。
使用cspider
獲取cspider _ t。
自定義用戶代理、cookie、超時、代理以及抓取線程和解析線程的最大數量。
將最初要爬網的url添加到任務隊列中。
編寫解析函數和數據持久化函數。
啟動爬蟲。
例子
我們先來看壹個簡單的爬蟲例子,稍後我們會詳細解釋這個例子。
# include & ltcs pider/spider . h & gt;
/*
自定義解析函數,其中d是獲取的html頁面字符串。
*/
void p(cspider_t *cspider,char *d,void *user_data) {
char * get[100];
//xpath解析html
int size = xpath(d,"//body/div[@ class = ' wrap ']/div[@ class = ' sort-column area ']/div[@ class = ' column-BD cfix ']/ul[@ class = ' ST-list cfix ']/Li/strong/a ",get,100);
int I;
for(I = 0;我& lt尺寸;i++) {
//持久化獲取的電影名稱。
saveString(cspider,get[I]);
}
}
/*
數據持久性函數進壹步保存由上述解析函數中調用的saveString()函數傳入的數據。
*/
void s(void *str,void *user_data) {
char * get =(char *)str;
FILE * FILE =(FILE *)user _ data;
fprintf(文件," %s\n ",get);
返回;
}
int main() {
//初始化蜘蛛
cs pider _ t * spider = init _ cs pider();
char * agent = " Mozilla/5.0(Macintosh;英特爾Mac OS X 10.10;rv:42.0)壁虎/20100101火狐/42.0”;
//char * cookie = " bid = S3/yuh 5 JD/I;ll = 108288;已查看= 1130500 _ 24708145 _ 6433169 _ 4843567 _ 1767120 _ 5318823 _ 1899158 _ 12765438_ _ utma = 30149280.927537245.1446813674.1446983217.1449139583.4;_ _ utmz = 30149280.1449139583 . 4 . 4 . UTM CSR = accounts . douban . com | ut mccn =(referral)| ut mcmd = referral | ut mcct =/log in;PS = y;ue=965166527@qq.com;DBC L2 = 58742090:qgz 2 pslidq;ck = T9Wnpush _ noty _ num = 0;push _ doumail _ num = 7;AP = 1;_ _ utmb = 30149280 . 0 . 10.1449139583;_ _ utmc = 30149280 ";
//設置要抓取的頁面的url。
cs_setopt_url(spider," so . TV . Sohu . com/list _ p 100 _ P20 _ P3 _ u 5185 _ u 5730 _ p40 _ P5 _ P6 _ p77 _ p80 _ p9 _ 2d 1 _ p 101 _ p 1 . html);
//設置用戶代理
cs_setopt_useragent(蜘蛛,代理);
//cs_setopt_cookie(蜘蛛,cookie);
//傳入指向解析函數和數據持久化函數的指針。
cs_setopt_process(spider,p,NULL);
//s函數的user_data指針指向stdout。
cs_setopt_save(spider,s,stdout);
//設置線程數
cs_setopt_threadnum(蜘蛛,下載,2);
cs_setopt_threadnum(spider,SAVE,2);
//FILE *fp = fopen("log "," w b+ ");
//cs_setopt_logfile(spider,FP);
//啟動爬蟲
返回cs_run(蜘蛛);
}
示例說明
cs pider _ t * spider = init _ cs pider();獲取初始cspider。cs_setopt_xxx等函數可用於初始化設置。需要註意的是:cs _ setopt _ process (spider,p,null);以及cs_setopt_save(spider,s,stdout);,他們分別設置了解析函數P和數據持久化函數S,需要用戶自己實現,還有自定義的指向上下文信息user_data的指針。
在解析函數中,用戶要定義解析規則,解析後的字符串可以通過調用saveString,或者調用addUrl將Url添加到任務隊列中來持久化。saveString中傳遞的字符串將在用戶定義的數據持久性函數中進行處理。此時,用戶可以選擇輸出到文件或數據庫。
最後調用cs_run(spider)啟動爬蟲。
具體的API參數可以在這裏查看。