c語言網路爬蟲
Ⅰ 網路爬蟲一般是用什麼語言完成的`
c語言最有可能,可以跨平台,至少在Linux 伺服器上可以跑吧
vc++ 時候做核心程序(演算法),相對於做界面
當然我覺得java也不錯,網路編程是JAVA的特長,
Ⅱ 如何優雅地使用c語言編寫爬蟲
前言
大家在平時或多或少地都會有編寫網路爬蟲的需求。一般來說,編寫爬蟲的首選自然非python莫屬,除此之外,java等語言也是不錯的選擇。選擇上述語言的原因不僅僅在於它們均有非常不錯的網路請求庫和字元串處理庫,還在於基於上述語言的爬蟲框架非常之多和完善。良好的爬蟲框架可以確保爬蟲程序的穩定性,以及編寫程序的便捷性。所以,這個cspider爬蟲庫的使命在於,我們能夠使用c語言,依然能夠優雅地編寫爬蟲程序。
爬蟲的特性
配置方便。使用一句設置函數,即可定義user agent,cookie,timeout,proxy以及抓取線程和解析線程的最大數量。
程序邏輯獨立。用戶可以分別定義爬蟲的解析函數,和數據持久化函數。並且對於解析到的新url,用戶可以使用cspider提供的addUrl函數,將其加入到任務隊列中。
便捷的字元串處理。cspider中提供了基於pcre的簡單的正則表達式函數,基於libxml2的xpath解析函數,以及用於解析json的cJSON庫。
高效的抓取。cspider基於libuv調度抓取線程和解析線程,使用curl作為其網路請求庫。
使用cspider的步驟
獲取cspider_t。
自定義user agent,cookie,timeout,proxy以及抓取線程和解析線程的最大數量。
添加初始要抓取的url到任務隊列。
編寫解析函數和數據持久化函數。
啟動爬蟲。
例子
先來看下簡單的爬蟲例子,會在後面詳細講解例子。
#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)即可啟動爬蟲。
具體的API參數可在這里查看
總結
趕快使用cspider爬蟲框架來編寫爬蟲吧!如果在使用過程中發現bug,歡迎反饋。
望採納,謝謝
Ⅲ 學會了C語言都可以做什麼呢
C語言是一門通用性的語言,並沒有針對某個領域進行優化,在實際項目中,C語言主要用於較底層的開發,例如:
Windows、Linux、Unix 等操作系統的內核90%以上都使用C語言開發;
開發硬體驅動,讓硬體和操作系統連接起來,這樣用戶才能使用硬體、程序員才能控制硬體;
單片機和嵌入式屬於軟硬體的結合,有很多使用C語言的地方;
開發系統組件或服務,用於支撐上層應用;
編寫PHP擴展,增強PHP的功能;
如果對軟體某個模塊(例如演算法和搜索部分)的效率要求較高,也可以使用C語言來開發。
Ⅳ c語言能用來做什麼
C語言是許多高級計算機語言的基礎,學好C語言,能更好地學習其他語言,為以後學習打基礎。它既具有高級語言的特點,又具有匯編語言的特點。它的應用廣泛,具備很強的數據處理能力,各類科研都需要用到C語言。它是面向過程的語言。學好是語言再學習使用其他語言也會有很大的幫助。
Ⅳ 怎麼在DOS下用C語言寫網路爬蟲
獲取cspider_t。
自定義user agent,cookie,timeout,proxy以及抓取線程和解析線程的最大數量。
添加初始要抓取的url到任務隊列。
編寫解析函數和數據持久化函數。
啟動爬蟲。
- #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 ", 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);
- }
例子
先來看下簡單的爬蟲例子,會在後面詳細講解例子。
Ⅵ 網路爬蟲 spider
「網路蜘蛛」或者說「網路爬蟲」,是一種能訪問網站並跟蹤鏈接的程序,通過它,可快速地畫出一個網站所包含的網頁地圖信息。本文主要講述如何使用Java編程來構建一個「蜘蛛」,我們會先以一個可復用的蜘蛛類包裝一個基本的「蜘蛛」,並在示常式序中演示如何創建一個特定的「蜘蛛」來掃描相關網站並找出死鏈接。 Java語言在此非常適合構建一個「蜘蛛」程序,其內建了對HTTP協議的支持,通過它可以傳輸大部分的網頁信息;其還內建了一個HTML解析器,正是這兩個原因使Java語言成為本文構建「蜘蛛」程序的首選。 文章後面例1的示常式序,將會掃描一個網站,並尋找死鏈接。使用這個程序時需先輸入一個URL並單擊「Begin」按鈕,程序開始之後,「Begin」按鈕會變成「Cancel」按鈕。在程序掃描網站期間,會在「Cancel」按鈕之下顯示進度,且在檢查當前網頁時,也會顯示相關正常鏈接與死鏈接的數目,死鏈接將顯示在程序底部的滾動文本框中。單擊「Cancel」按鈕會停止掃描過程,之後可以輸入一個新的URL;如果期間沒有單擊「Cancel」,程序將會一直運行直到查找完所有網頁,此後,「Cancel」按鈕會再次變回「Begin」,表示程序已停止。 下面將演示示常式序是如何與可復用「Spider」類交互的,示常式序包含在例1的CheckLinks類中,這個類實現了ISpiderReportable介面,如例2所示,正是通過這個介面,蜘蛛類才能與示常式序相交互。在這個介面中,定義了三個方法:第一個方法是「spiderFoundURL」,它在每次程序定位一個URL時被調用,如果方法返回true,表示程序應繼續執行下去並找出其中的鏈接;第二個方法是「spiderURLError」,它在每次程序檢測URL導致錯誤時被調用(如「404 頁面未找到」);第三個方法是「spiderFoundEMail」,它在每次發現電子郵件地址時被調用。有了這三個方法,Spider類就能把相關信息反饋給創建它的程序了。 在begin方法被調用後,「蜘蛛」就開始工作了;為允許程序重繪其用戶界面,「蜘蛛」是作為一個單獨的線程啟動的。點擊「Begin」按鈕會開始這個後台線程,當後台線程運行之後,又會調用「CheckLinks」類的run方法,而run方法是由Spider對象實例化時啟動的,如下所示: spider = new Spider(this); spider.clear(); base = new URL(url.getText()); spider.addURL(base); spider.begin(); 首先,一個新的Spider對象被實例化,在此,需要傳遞一個「ISpiderReportable」對象給Spider對象的構造函數,因為「CheckLinks」類實現了「ISpiderReportable」介面,只需簡單地把它作為當前對象(可由關鍵字this表示)傳遞給構造函數即可;其次,在程序中維護了一個其訪問過的URL列表,而「clear」方法的調用則是為了確保程序開始時URL列表為空,程序開始運行之前必須添加一個URL到它的待處理列表中,此時用戶輸入的URL則是添加到列表中的第一個,程序就由掃描這個網頁開始,並找到與這個起始URL相鏈接的其他頁面;最後,調用「begin」方法開始運行「蜘蛛」,這個方法直到「蜘蛛」工作完畢或用戶取消才會返回。 當「蜘蛛」運行時,可以調用由「ISpiderReportable」介面實現的三個方法來報告程序當前狀態,程序的大部分工作都是由「spiderFoundURL」方法來完成的,當「蜘蛛」發現一個新的URL時,它首先檢查其是否有效,如果這個URL導致一個錯誤,就會把它當作一個死鏈接;如果鏈接有效,就會繼續檢查它是否在一個不同的伺服器上,如果鏈接在同一伺服器上,「spiderFoundURL」返回true,表示「蜘蛛」應繼續跟蹤這個URL並找出其他鏈接,如果鏈接在另外的伺服器上,就不會掃描是否還有其他鏈接,因為這會導致「蜘蛛」不斷地瀏覽Internet,尋找更多、更多的網站,所以,示常式序只會查找用戶指定網站上的鏈接。 構造Spider類 前面已經講了如何使用Spider類,請看例3中的代碼。使用Spider類及「ISpiderReportable」介面能方便地為某一程序添加「蜘蛛」功能,下面繼續講解Spider類是怎樣工作的。 Spider類必須保持對其訪問過的URL的跟蹤,這樣做的目的是為了確保「蜘蛛」不會訪問同一URL一次以上;進一步來說,「蜘蛛」必須把URL分成三組,第一組存儲在「workloadWaiting」屬性中,包含了一個未處理的URL列表,「蜘蛛」要訪問的第一個URL也存在其中;第二組存儲在「workloadProcessed」中,它是「蜘蛛」已經處理過且無需再次訪問的URL;第三組存儲在「workloadError」中,包含了發生錯誤的URL。 Begin方法包含了Spider類的主循環,其一直重復遍歷「workloadWaiting」,並處理其中的每一個頁面,當然我們也想到了,在這些頁面被處理時,很可能有其他的URL添加到「workloadWaiting」中,所以,begin方法一直繼續此過程,直到調用Spider類的cancel方法,或「workloadWaiting」中已不再剩有URL。這個過程如下: cancel = false; while ( !getWorkloadWaiting().isEmpty() && !cancel ) { Object list[] = getWorkloadWaiting().toArray(); for ( int i=0; (i<list.length)&&!cancel; i++="" )=""> processURL((URL)list[i]); } 當上述代碼遍歷「workloadWaiting」時,它把每個需處理的URL都傳遞給「processURL」方法,而這個方法才是真正讀取並解析URL中HTML信息的。 讀取並解析HTML Java同時支持訪問URL內容及解析HTML,而這正是「processURL」方法要做的。在Java中讀取URL內容相對還比較簡單,下面就是「processURL」方法實現此功能的代碼: URLConnection connection = url.openConnection(); if ( (connection.getContentType()!=null) &&!connection.getContentType().toLowerCase().startsWith("text/") ) { getWorkloadWaiting().remove(url); getWorkloadProcessed().add(url); log("Not processing because content type is: " + connection.getContentType() );
Ⅶ 我想用c編寫一個爬蟲程序,可是看完一本c語言教程後,還是覺得只會編寫一些計算類的小代碼,要學會編寫
想做爬蟲程序不是學完語言就行了,是要學很多東西的,你可以查一查大學計算機專業有哪些課程。
做爬蟲可以學學java語言。
《網路機器人Java編程指南》
開源的爬蟲產品
http://www.oschina.net/project/tag/64/spider?lang=19&os=0&sort=view&p=1
Ⅷ 基於c語言的爬蟲項目(網路詞典),獲取用戶的英文字元串,通過網路爬蟲通信實現翻譯,求思路代碼~
你現在「UI的簡單的客服端和服務端通信」大體用到哪些頭文件(技術)?
Ⅸ 為什麼c語言不適合寫爬蟲
開發效率低