若何優雅地應用c說話編寫爬蟲。本站提示廣大學習愛好者:(若何優雅地應用c說話編寫爬蟲)文章只能為提供參考,不一定能成為您想要的結果。以下是若何優雅地應用c說話編寫爬蟲正文
年夜家在日常平凡或多或少地都邑有編寫收集爬蟲的需求。普通來講,編寫爬蟲的首選天然非python莫屬,除此以外,java等說話也是不錯的選擇。選擇上述說話的緣由不只僅在於它們均有異常不錯的收集要求庫和字符串處置庫,還在於基於上述說話的爬蟲框架異常之多和完美。優越的爬蟲框架可以確保爬蟲法式的穩固性,和編寫法式的便捷性。所以,這個cspider爬蟲庫的任務在於,我們可以或許應用c說話,仍然可以或許優雅地編寫爬蟲法式。
1、爬蟲的特征
設置裝備擺設便利。應用一句設置函數,便可界說user agent,cookie,timeout,proxy和抓取線程息爭析線程的最年夜數目。
法式邏輯自力。用戶可以分離界說爬蟲的解析函數,和數據耐久化函數。而且關於解析到的新url,用戶可使用cspider供給的addUrl函數,將其參加就任務隊列中。
便捷的字符串處置。cspider中供給了基於pcre的簡略的正則表達式函數,基於libxml2的xpath解析函數,和用於解析json的cJSON庫。
高效的抓取。cspider基於libuv調劑抓取線程息爭析線程,應用curl作為其收集要求庫。
2、應用cspider的步調
3、例子
先來看下簡略的爬蟲例子,會在前面具體講授例子。
#include<cspider/spider.h> /* 自界說的解析函數,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; i < size; i++) { //將獲得到的片子稱號,耐久化 saveString(cspider, get[i]); } } /* 數據耐久化函數,對下面解析函數中挪用的saveString()函數傳入的數據,停止進一步的保留 */ void s(void *str, void *user_data) { char *get = (char *)str; FILE *file = (FILE*)user_data; fprintf(file, "%s\n", get); return; } int main() { //初始化spider cspider_t *spider = init_cspider(); char *agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:42.0) Gecko/20100101 Firefox/42.0"; //char *cookie = "bid=s3/yuH5Jd/I; ll=108288; viewed=1130500_24708145_6433169_4843567_1767120_5318823_1899158_1271597; __utma=30149280.927537245.1446813674.1446983217.1449139583.4; __utmz=30149280.1449139583.4.4.utmcsr=accounts.douban.com|utmccn=(referral)|utmcmd=referral|utmcct=/login; ps=y; [email protected]; dbcl2=58742090:QgZ2PSLiDLQ; ck=T9Wn; push_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_p1100_p20_p3_u5185_u5730_p40_p5_p6_p77_p80_p9_2d1_p101_p11.html"); //設置user agent cs_setopt_useragent(spider, agent); //cs_setopt_cookie(spider, cookie); //傳入解析函數和數據耐久化函數的指針 cs_setopt_process(spider, p, NULL); //s函數的user_data指針指向stdout cs_setopt_save(spider, s, stdout); //設置線程數目 cs_setopt_threadnum(spider, DOWNLOAD, 2); cs_setopt_threadnum(spider, SAVE, 2); //FILE *fp = fopen("log", "wb+"); //cs_setopt_logfile(spider, fp); //開端爬蟲 return cs_run(spider); }
例子講授
cspider_t *spider = init_cspider();獲得初始的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)便可啟動爬蟲。
趕緊應用cspider爬蟲框架來編寫爬蟲吧!