2017-03-06

如何用 R 語言爬取 Facebook 粉絲專頁的資料?(Facebook Fan Page R Crawler)

最近在分析 Facebook 粉絲專頁資料時,發現現成的服務平台(例如:Fanpage Karma本來想寫一篇教學文介紹這個平台,但因為懶惰所以一直拖稿)雖然美觀、方便使用,卻無法客製化、同時爬取大量粉絲專頁上的相關資訊。

如果在進行競網分析時需要取得大量粉絲專頁的資料,或是想要利用粉絲專頁的貼文內容進行文字探勘,那麼該如何爬取呢?

這篇文章教你簡單利用 R 語言,不用花費 3 分鐘時間就可以爬取逾百個粉絲專頁、近萬則貼文內容!


R 程式碼:

#第一次使用前先安裝套件
install.packages("Rfacebook")

#呼叫使用套件
library(Rfacebook)

#從此取得token: https://developers.facebook.com/tools/explorer
token <- br="" token="">
#取得某粉絲專頁之基本資訊
#從此取得某一粉絲專頁的id: https://lookup-id.com/ 或 http://findmyfbid.com/
fanpage1 <- getusers="" id="" private_info="FALSE)<br" token=""> #秀出所有取得資料
fanpage1

#取得某一段時間(從since到until)某粉絲專頁之貼文,未設定n則預設取25,n太大可能會抓不到某些粉專的資料
#從此取得某一粉絲專頁的id:https://lookup-id.com/
fb_page1 <- getpage="" n="篇數)<br" page="粉絲專頁的id" since="2016/01/01" token="" until="2017/02/28">
#顯示期間內之所有貼文資訊
fb_page1

#把結果輸出成csv檔,利用逗號為分隔符號,檔名為fanpage_results
write.table(fb_page1, file = "fanpage_results.CSV", sep = ",") #第一次建立CSV檔
write.table(fb_pageN, file = "fanpage_results.CSV", sep = ",", col.names = FALSE, append = TRUE) #把其他粉絲專頁的資料寫入同一個CSV檔

#用此找到當前的工作目錄,可找到上面輸出的fanpage_result.CSV檔案存在哪裡
getwd()


輸出 CSV 檔案之後,請務必檢查輸出資料欄位是否皆正確無誤。實際測試發現少部分資料列的欄位會跑掉,可能是因為原貼文內使用了特殊字元反斜線「\」(back-slash)導致寫入 CSV 檔時遭到誤判。

另外,如果想要同時抓取多個粉絲專頁的資料,那麼可以預先準備好批次的程式碼,再一次複製到 R 語言的執行環境中執行即可。例如:

#抓取資料
fb_page_1 <- getpage="" n="50)<br" page="117327775035616" since="2016/08/01" token="" until="2017/02/28"> fb_page_2 <- getpage="" n="50)<br" page="215856161958" since="2016/08/01" token="" until="2017/02/28"> fb_page_3 <- getpage="" n="50)<br" page="642311172517502" since="2016/08/01" token="" until="2017/02/28"> fb_page_4 <- getpage="" n="50)<br" page="1049259508445930" since="2016/08/01" token="" until="2017/02/28"> #......
fb_page_100 <- getpage="" n="50)<br" page="151997411535137" since="2016/08/01" token="" until="2017/02/28">


#寫入CSV檔
write.table(fb_page_1, file = "fanpage_results_Y.CSV", sep = ",")
write.table(fb_page_2, file = "fanpage_results_Y.CSV", sep = ",", col.names = FALSE, append = TRUE)
write.table(fb_page_3, file = "fanpage_results_Y.CSV", sep = ",", col.names = FALSE, append = TRUE)
write.table(fb_page_4, file = "fanpage_results_Y.CSV", sep = ",", col.names = FALSE, append = TRUE)
#......
write.table(fb_page_100, file = "fanpage_results_Y.CSV", sep = ",", col.names = FALSE, append = TRUE)


但欲使用批次處理,前置作業就要花費多一些時間,包括:取得各粉絲專頁的 ID(如果懶得寫程式,就用前面列的網站手動查詢,騙你的,參考這篇)、撰寫批次的 R 程式(可以善用 Excel+Word,或是用 Python 或 C 自己寫程式來跑出程式碼),之後有時間的話再把這部分的教學補上囉!

沒有留言:

張貼留言