用C語言來寫一個網絡爬蟲,來獲取一個網站上感興趣的信息,抓取本身須要的一切。html
#include<cspider/spider.h>/*編程
自定義的解析函數,d爲獲取到的html頁面字符串api
/voidp(cspider_t cspider,chard) {charget[100];//xpath解析htmlintsize = 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);inti;for(i =0; i < size; i++) {//將獲取到的電影名稱,持久化saveString(cspider,get[i]); }}/*cookie
數據持久化函數,對上面解析函數中調用的saveString()函數傳入的數據,進行進一步的保存網絡
/voids(voidstr) {charget= (char)str; printf("%sn",get);return;}intmain() {//初始化spidercspider_t spider = init_cspider();charagent ="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; app
viewed=1130500_24708145_6433169_4843567_1767120_5318823_1899158_1271597;ide
__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";//設置要抓取頁面的urlcs_setopt_url(spider,"so.tv.sohu.com/list_p1100_p20_p3_u5185_u5730_p40_p5
p6_p77_p80_p9_2d1_p101_p11.html");//設置user agentcs_setopt_useragent(spider,
agent);//cs_setopt_cookie(spider, cookie);//傳入解析函數和數據持久化函數的指針
cs_setopt_process(spider, p); cs_setopt_save(spider, s);//設置線程數量cs_setopt_threadnum(spider, DOWNLOAD,2); cs_setopt_threadnum(spider,
SAVE,2);//FILE *fp = fopen("log", "wb+");//cs_setopt_logfile(spider, fp);//開始爬蟲returncs_run(spider);}
爬蟲程序通常分紅數據採集模塊,數據分析模塊和反爬策略模塊,若是能針對這三個模塊進行優化,可讓爬蟲程序穩定持續的運行。
1.採集模塊
通常來講目標服務器會提供多種接口,包括url、app或者數據api,研發人員須要根據採集數據難度、天天數據量要求、目標服務器反爬限制頻率分別進行測試,選擇適合的採集接口及方式。
2.數據分析模塊
因爲網絡採集存在各類不肯定性,數據分析部分在根據須要作好數據解析以後,要作好異常處理及定位重啓功能,避免出現程序異常退出或者數據採集遺漏、重複的狀況
3.反爬策略模塊
分析目標服務器的爬蟲策略,控制爬蟲請求頻率甚至包括驗證碼、加密數據的破解,同時使用優質代理或爬蟲代理,尋找業務獨享、網絡穩定、高併發、低延遲的代理產品,確保目標服務器無法進行反爬限制及預警,
經過採用以上各項優化策略,可以讓爬蟲程序長期穩定的運行。
無論你是轉行也好,初學也罷,進階也可,若是你想學編程~
【值得關注】個人 C/C++編程學習交流俱樂部!【點擊進入】
問題答疑,學習交流,技術探討,還有超多編程資源大全,零基礎的視頻也超棒~