a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

如何優(yōu)雅地使用c語言編寫爬蟲

2020-01-26 14:47:58
字體:
供稿:網(wǎng)友

大家在平時或多或少地都會有編寫網(wǎng)絡(luò)爬蟲的需求。一般來說,編寫爬蟲的首選自然非python莫屬,除此之外,java等語言也是不錯的選擇。選擇上述語言的原因不僅僅在于它們均有非常不錯的網(wǎng)絡(luò)請求庫和字符串處理庫,還在于基于上述語言的爬蟲框架非常之多和完善。良好的爬蟲框架可以確保爬蟲程序的穩(wěn)定性,以及編寫程序的便捷性。所以,這個cspider爬蟲庫的使命在于,我們能夠使用c語言,依然能夠優(yōu)雅地編寫爬蟲程序。

1、爬蟲的特性

配置方便。使用一句設(shè)置函數(shù),即可定義user agent,cookie,timeout,proxy以及抓取線程和解析線程的最大數(shù)量。
程序邏輯獨立。用戶可以分別定義爬蟲的解析函數(shù),和數(shù)據(jù)持久化函數(shù)。并且對于解析到的新url,用戶可以使用cspider提供的addUrl函數(shù),將其加入到任務(wù)隊列中。
便捷的字符串處理。cspider中提供了基于pcre的簡單的正則表達式函數(shù),基于libxml2的xpath解析函數(shù),以及用于解析json的cJSON庫。
高效的抓取。cspider基于libuv調(diào)度抓取線程和解析線程,使用curl作為其網(wǎng)絡(luò)請求庫。
2、使用cspider的步驟

  • 獲取cspider_t。
  • 自定義user agent,cookie,timeout,proxy以及抓取線程和解析線程的最大數(shù)量。
  • 添加初始要抓取的url到任務(wù)隊列。
  • 編寫解析函數(shù)和數(shù)據(jù)持久化函數(shù)。
  • 啟動爬蟲。

3、例子

先來看下簡單的爬蟲例子,會在后面詳細(xì)講解例子。

#include<cspider/spider.h>/*  自定義的解析函數(shù),d為獲取到的html頁面字符串*/void p(cspider_t *cspider, char *d, void *user_data) { char *get[100]; //xpath解析html int size = xpath(d, "http://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]); }}/*  數(shù)據(jù)持久化函數(shù),對上面解析函數(shù)中調(diào)用的saveString()函數(shù)傳入的數(shù)據(jù),進行進一步的保存*/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; ue=965166527@qq.com; dbcl2=58742090:QgZ2PSLiDLQ; ck=T9Wn; push_noty_num=0; push_doumail_num=7; ap=1; __utmb=30149280.0.10.1449139583; __utmc=30149280"; //設(shè)置要抓取頁面的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"); //設(shè)置user agent cs_setopt_useragent(spider, agent); //cs_setopt_cookie(spider, cookie); //傳入解析函數(shù)和數(shù)據(jù)持久化函數(shù)的指針 cs_setopt_process(spider, p, NULL); //s函數(shù)的user_data指針指向stdout cs_setopt_save(spider, s, stdout); //設(shè)置線程數(shù)量 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這類函數(shù)可以用來進行初始化設(shè)置。其中要注意的是: cs_setopt_process(spider,p,NULL);cs_setopt_save(spider,s,stdout);,它們分別設(shè)置了解析函數(shù)p和數(shù)據(jù)持久化函數(shù)s,這兩個函數(shù)需要用戶自己實現(xiàn),還有用戶自定義的指向上下文信息user_data的指針。在解析函數(shù)中,用戶要定義解析的規(guī)則,并對解析得到的字符串可以調(diào)用saveString進行持久化,或者是調(diào)用addUrl將url加入到任務(wù)隊列中。在saveString中傳入的字符串會在用戶自定義的數(shù)據(jù)持久函數(shù)中得到處理。此時,用戶可以選擇輸出到文件或數(shù)據(jù)庫等。
最后調(diào)用cs_run(spider)即可啟動爬蟲。

趕快使用cspider爬蟲框架來編寫爬蟲吧!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 免费成人精品 | 一区二区久久 | 国产精品久久国产精品 | 亚洲成人av在线 | 亚洲欧美日韩另类精品一区二区三区 | 三级网站视频 | 久久国产经典视频 | 欧美日韩一区在线 | 女人高潮特级毛片 | 在线观看日韩精品 | 中文字幕一区二区三区乱码在线 | 黄色av网站在线免费观看 | 欧美日本韩国一区二区 | 日韩亚洲精品在线观看 | 精品在线视频免费观看 | 91精品国产综合久久久久久软件 | 91看片官网 | 蜜桃免费一区二区三区 | 97久久超碰国产精品电影 | 青草青草 | 精品在线一区二区 | 狠狠艹av | 欧美日韩国产一区二区三区 | 一区不卡 | 国产视频一区二区三区四区 | 国产日韩欧美一区二区 | 久久亚洲精品国产一区 | 成人欧美一区二区三区在线播放 | 三级毛片在线 | 久草青青草| 性开放xxxhd视频 | 欧州一区二区三区 | 伊人久久大香线蕉综合75 | 狠狠的干| 精品在线小视频 | 一二三四区在线观看 | 欧美一极片 | 午夜影院18 | 欧美成人理论片乱 | 激情欧美一区二区三区中文字幕 | 在线播放91|