最近完成了一項(xiàng)簡(jiǎn)單的靜態(tài)爬蟲(chóng)任務(wù),麻雀雖小五臟俱全,借此梳理下R項(xiàng)目基本架構(gòu)
注泳挥,有疑問(wèn) 加QQ群..[174225475].. 共同探討進(jìn)步
有償求助請(qǐng) 出門(mén)左轉(zhuǎn) door , 合作愉快
基本架構(gòu)
- R 腳本
R程序可以是單一的完整運(yùn)行代碼文件,也可以是多個(gè)相互間協(xié)調(diào)或調(diào)用的函數(shù)/程序代碼集,本文介紹的主要是第二種 - Powershell 調(diào)用
通過(guò) windows 的 powershell 終端調(diào)用 R程序, 實(shí)現(xiàn) R程序 的后臺(tái)運(yùn)行
xx/xx/Rscript.exe xx/xx/run.R
也可以編輯 .bat文件,然后保存雙擊 .bat文件就可以了
xx/xx/Rscript.exe xx/xx/run.R
- Linux終端調(diào)用與此類(lèi)同
終端運(yùn)行
chmod u+x ./run.R
/usr/bin/Rscript /xx/run.R
或 run.R 首行添加 line1, 然后終端運(yùn)行 line2,3
#!/usr/bin/Rscript
chmod u+x ./run.R
./run.R
R 腳本
本案例是個(gè)靜態(tài)爬蟲(chóng)項(xiàng)目,大致涵蓋以下幾個(gè)流程:
- 獲取爬取目標(biāo)
- 爬取
- 爬取結(jié)果分段存儲(chǔ)
- 分段結(jié)果合并及碎文件刪除
- 根據(jù)結(jié)果中信息進(jìn)行二次爬取
-
二次爬取結(jié)果存儲(chǔ)
1. 確定爬取目標(biāo)
爬取目標(biāo)可以是個(gè)單一網(wǎng)址也可以是個(gè)目標(biāo)list
比如通過(guò)動(dòng)態(tài)查詢獲取與某主題相關(guān)的網(wǎng)頁(yè)地址list(get_addr.R)
2. 爬取和分段存儲(chǔ)
爬蟲(chóng)最重要的部分就是爬蟲(chóng)代碼的編寫(xiě),個(gè)中辛酸自己體會(huì),大有阿慶嫂大戰(zhàn)刁德一的意思,碼完code之后還得測(cè)試(大部分網(wǎng)頁(yè)代碼都不那么規(guī)整),時(shí)不時(shí)會(huì)如下所示
為了節(jié)省內(nèi)存及防止程序半路崩潰而前功盡棄,可以設(shè)置分段保存(每爬取n條存儲(chǔ)一個(gè)本地文件),以求最大限度保存勝利成果
3. 合并并清空分段文件
爬蟲(chóng)程序運(yùn)行完畢,需要將分段文件合并成最終的結(jié)果集,然后將無(wú)用的分段集清理,如下所示
4. 組織協(xié)調(diào)的 run.R
最后看看 run.R 里的代碼結(jié)構(gòu)
總結(jié)
一個(gè)完整的項(xiàng)目下來(lái),R是需要很多自定義函數(shù)支持的,這些自定義函數(shù)可能結(jié)構(gòu)復(fù)雜(可以定義2級(jí)函數(shù)支持1級(jí)函數(shù)的調(diào)用)代碼行數(shù)較多或會(huì)被多次調(diào)用,這個(gè)時(shí)候我們就需要將他獨(dú)立出來(lái)作為一個(gè)功能模塊或?qū)ο髞?lái)使用.
這樣的項(xiàng)目梳理出來(lái),就會(huì)結(jié)構(gòu)清晰,便于理解和后續(xù)個(gè)性化修改