freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于新浪微博的用戶信息爬蟲及分析畢業(yè)論文(編輯修改稿)

2025-07-20 00:14 本頁面
 

【文章內(nèi)容簡介】 line)、首部行(header)、空行和請求數(shù)據(jù)4個部分組成,請求報文的一般格式如圖31所示:圖31 HTTP報文格式圖利用HTTPWatch抓取在瀏覽器中收取新浪微博數(shù)據(jù)時發(fā)送的HTTP數(shù)據(jù)包,HttpWatch抓取的數(shù)據(jù)包內(nèi)容如圖32所示:圖32 HTTP數(shù)據(jù)包經(jīng)過分析,可以知道請求方法為POST ,請求的url地址為 。AcceptEncoding 為gzip,deflate。請求數(shù)據(jù)為一個以apiurl開頭的字符串。Apiurl之后請求數(shù)據(jù)由一下幾個部分組成:接口url,請求類型,請求參數(shù),access_token等組成。 HTTP返回數(shù)據(jù)包,都可以獲得相應(yīng)的數(shù)據(jù)包。分析獲取HTTP應(yīng)答報文中的ContenLength參數(shù)可以獲取數(shù)據(jù)長度。知道了數(shù)據(jù)長度后用zlib庫的函數(shù)對數(shù)據(jù)進(jìn)行解壓。當(dāng)然,數(shù)據(jù)并不是每一次都是正確,導(dǎo)致數(shù)據(jù)出錯的原因有很多,但我們只要判斷數(shù)據(jù)格式是否正確,當(dāng)數(shù)據(jù)格式不正確或不完整時,將直接丟棄報文,打印數(shù)據(jù)格式錯誤信息。 數(shù)據(jù)分析與提取將得到的json字符串,利用提取json數(shù)據(jù)的函數(shù)庫對字符串進(jìn)行處理和提取我們需要的字段內(nèi)容。 AnaData類AnaData類結(jié)構(gòu)如圖33所示:圖33AnaData類結(jié)構(gòu)圖這是爬蟲系統(tǒng)的最主要的類,該類對發(fā)送請求報文,分析應(yīng)答報文,數(shù)據(jù)分析和提取等各個功能函數(shù)進(jìn)行了整合和封裝。在該類中,以do開頭的方法為爬蟲函數(shù),用于調(diào)用Start函數(shù)獲取數(shù)據(jù),并將需要入庫的數(shù)據(jù)轉(zhuǎn)存到入庫緩存容器中。以Start開頭的方法為數(shù)據(jù)獲取和分析函數(shù),用于設(shè)置參數(shù)從新浪服務(wù)器獲取數(shù)據(jù)并調(diào)用ana函數(shù)分析數(shù)據(jù)。以ana開頭的方法為數(shù)據(jù)分析函數(shù),用于從start獲得的m_data數(shù)據(jù)流中提取數(shù)據(jù)并存于weiboMessageList或weiboUserList容器中。類中的各個方法和字段協(xié)調(diào)合作,完成數(shù)據(jù)爬取分析和存儲。以下是幾個do函數(shù)實現(xiàn)的功能介紹:doUserWeibo()對微博用戶ID列表的微博進(jìn)行爬取,獲取微博信息并進(jìn)行標(biāo)簽歸類。doRunning()微博用戶ID發(fā)現(xiàn),獲取微博用戶的詳細(xì)信息。doUserCounts()對微博用戶信息的更新。 數(shù)據(jù)入庫入庫函數(shù)包括了微博用戶入庫(StoreToUserDB),微博用戶更新(UpdateUserDB),微博入庫(storeWeiboToDB),微博用戶標(biāo)簽入庫(storeTableKey)。每個入庫函數(shù)都開啟一個獨立的線程。當(dāng)相應(yīng)的緩存容器中的數(shù)據(jù)達(dá)到一定的數(shù)量時,對數(shù)據(jù)容器進(jìn)行鎖定,相應(yīng)的爬蟲函數(shù)暫停,開始對數(shù)據(jù)進(jìn)行入庫,入庫后該數(shù)據(jù)從緩存容器刪除,入庫接收后解除鎖定,繼續(xù)爬蟲。下面的代碼微博微博用戶信息入庫的函數(shù)主要代碼。void StoreToUserDB(){ oracledb m_oracle。 (weibo,chen,LISTENER_WEIBOORACLE)。 int datatcount=()。//m_moniterUserList是一個map容器。用來存儲數(shù)據(jù)庫已存在的微博用戶信息的ID。 int dbcount=0。 while(1) { coutstroe db is runningendl。 Sleep(20000)。//當(dāng)?shù)却霂斓木彺嫒萜鳛榭諘r,入庫線程進(jìn)入休眠狀態(tài) if(!()) { boost::mutex::scoped_lock lock(oracledbMutex)。//互斥鎖,boost的互 斥鎖可以自動的在析構(gòu)是釋放鎖 for(maplonglong,WEIBOUSERINFOSTRUCT::iterator it=()。it!=()。) { maplong long ,MoniterUser::iterator findmoniter。 findmoniter=(it)。//數(shù)據(jù)庫中 是否有該函數(shù) if(findmoniter==()) { (itsecond)。//執(zhí)行oracle插入語句 MoniterUser minfo。 =it。 =it。 =0。 =false。 (make_pairlong long,MoniterUser (,minfo))。 dbcount++。 datatcount++。 } it=(it)。 if(dbcount==1000)//mit頻率 { ()。 coutall countdatatcountendl。 coutcountdbcountendl。 dbcount=0。 } } } } ()。}其他的幾個入庫函數(shù)與微博用戶信息入庫類似。1)監(jiān)聽線程:服務(wù)器運行時啟動監(jiān)聽線程,當(dāng)發(fā)現(xiàn)客戶端有請求命令時,對請求命令進(jìn)行解析,并進(jìn)行相應(yīng)的操作。服務(wù)器與客戶端數(shù)據(jù)傳輸采用UDP協(xié)議,因為客戶端發(fā)送的請求命令的數(shù)據(jù)長度相對較小,而且客戶端與服務(wù)器不需要建立可靠連接。這樣,使用UDP協(xié)議,可以極大的提高數(shù)據(jù)的傳輸速度,并大大的降低服務(wù)器的壓力。Select函數(shù)可以實現(xiàn)socket的非阻塞方式進(jìn)行工作。一般初學(xué)socket的人都不使用select函數(shù),認(rèn)為使用send和recv就可以實現(xiàn)socket的功能了。但是,作為一個網(wǎng)絡(luò)程序,必須使用select才是合格的網(wǎng)絡(luò)程序。通過使用select,就可以是UDP就可以基本實現(xiàn)TCP的功能,當(dāng)客戶端沒有收到服務(wù)器返回的命令時,可以根據(jù)需要是否重發(fā)操作命令或者直接放棄操作,不重發(fā)數(shù)據(jù)包??蛻舳讼蚍?wù)器請求的命令字符串包括三個部分:cmd字段,type字段 和data字段。前兩個字段用來確定命令的類型,data為命令的參數(shù)。2)客戶端向服務(wù)器命令執(zhí)行函數(shù)及其功能: showweibo :獲取微博信息sh
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1