寫一個網路爬蟲
用C語言來寫一個網路爬蟲,來獲取一個網站上感興趣的資訊,抓取自己需要的一切,

#include<cspider/spider.h>/*
自定義的決議函式,d為獲取到的html頁面字串
/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]); }}/*
資料持久化函式,對上面決議函式中呼叫的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;
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";//設定要抓取頁面的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++編程學習交流俱樂部!【點擊進入】
問題答疑,學習交流,技術探討,還有超多編程資源大全,零基礎的視頻也超棒~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/252427.html
標籤:C
上一篇:基于 OpenGrok 實作 Emacs 中代碼符號查找跳轉
下一篇:C/C++編程知識-強制型別轉換
