臉書facebook可以說的秘密_社群大數據_網路爬文_social Big data_crawler

本文承蒙台大林士凱老師講授內容的啟發,謹致謝忱。

大約兩週前的一場碩班課堂分享中提到,早在二十年前,我還只是個小鮮肉…不對…小碩一的時候,就已經有大數據的概念在我腦海中萌芽。頓時台下人人一臉無法置信,覺得極盡誇張唬爛的表情,我趕緊說明:每每夜深人靜,男生沉醉、迷幻在瀏覽器(Netscape Navigator當時最火紅)出現的【精彩刺激】圖片時(這裡絕對沒有性別歧視,女生或許也會,而我問了太太只得到神經病三字回應),總是意猶未盡的抱憾→一個都不能少!但是每張圖都要按右鍵存檔,手(指)好痠喔~~如果能有什麼工具(還真的有XD),可快速、大量、全部把這些圖片下載到D槽(基於對病毒的恐懼,這我肯定幾乎都是),那該有多好RRR…

原以為好好笑好幽默的開場白,想必一定有熱烈的迴響,結果竟然變成當眾耍白癡。聽者不是面面相覷,就是雙眼茫然望著我。終於,某位同學按耐不住可怕的沉寂,小小聲說:「老師,現在都串流直接看影音了,沒人在抓圖了啦…」大家才又交頭接耳,吃吃笑著,「還抓圖勒,抓怪還差不多」。看吧看吧!這就是代溝啊!世代之間終究還是有些東西難解,大叔大嬸固然社會經驗多一點,做人處事圓滑(奸詐)一點,就算價值觀不見得一樣,也希望相互包容,不要動不動倚老賣老,開口閉口小X孩、草X族、老子吃過的xx比你吃過的XX還多上幾十倍…應該要多傾聽年輕人的聲音,多理解他們的想法,多接近他們的世界…

樓又歪了,我保證絕對不是變態狂,只是想說明大數據與網頁結構、原始碼之間的密切關係罷了。無論抓圖、抓歌、抓影片、抓波x野x衣,相信有心人絕對會用洪荒之力,廢寢忘食、滴水不漏的來滿足慾望。手動也好,自動也行,統統必須經由網頁原始碼的href( HyperLink Reference)傳遞請求。大數據研究在網頁的文本資料蒐集,也就是網路爬文,說穿了其實也沒有很神祕。我們可以想像一下,網路爬文就是運用程式語言或軟體的爬蟲(crawler),把準備進行資料蒐集的區域(網頁或網域)給全部【爬】過一遍,什麼?廢話?爬是什麼意思?這裡所謂的「爬」,不是真的在地上爬,也不是閱讀網頁內容的「爬」,是指「進出」網頁原始碼所埋的各種連結;為何要「進出」?如果進去了不出來,那就連到其他位址去了。所以,為了蒐集資料,必須「進去」連結,獲取資料後再「出來」。當然,前提必須連結是有效的,且允許除了管理員以外的人有權限存取的。

社群網站的雛形,早在台大椰林風情、中山美麗之島、洪爺、xx貼圖區的時代就已浮現。但圍在這些個別的樹或島的人們,並無特別對外的聯繫管道,也可能不太需要。臉書(facebook)問世後,在我看來,就像島連著島、樹挨著樹,透過人性(包括需求與想像),串起更多原本相識或不認識的人聚在島上的樹下,還多了很多互通聲氣的傳播網絡。臉書是如此風行且普及,連帶也吸引人們想了解更多,包括訊息、人際網絡、使用行為、情緒反應等。非經同意擷取非屬自己的帳號內資料,有侵犯隱私權之嫌,十分不可取;但粉絲專頁(fanpages)基本上屬於公開資料,在遵守各相關法規且不運用在營利下,應可合理適度引用,否則在下認真考慮把小站給收了。

臉書的【開發人員支援】(facebook for developer)頁面,顧名思義,就是提供給各種網路與程式相關開發人員作業的區域,儘管你我不一定是開發人員,只要擁有個人臉書帳號,同樣可以透過特定的權限,執行有限度的指令。以下我們就用國內最大的媒體臉書粉絲專頁【蘋果日報】為例,示範透過臉書的開發人員支援頁面,如何呈現粉絲專頁動態時報上的訊息與使用者互動行為。

  • 登入帳號

前往臉書的【開發人員支援】(facebook developer)頁面後,在右上角以臉書帳號登入。

facebook_developer_home

 


  • 點選工具及支援

登入帳號成功後,點選上方選單【工具與支援】。

facebook_developer_001

 


  • 點選Graph API Explorer

進入工具及支援頁面後,點選Graph API Explorer。API是【應用程式介面】(Application Programming Interface)的簡稱,是一種約定的程式碼,用來銜接軟體系統不同的部分,減少軟體開發所需的人力、物力與時間。

facebook_developer_002

 


  • 點選Get User Access Token

點選進入Graph API Explorer後,會看到Graph API測試工具的頁面,出現API的版本(目前是v2.7),以及顯示自己的帳號ID碼、帳號名稱的語法。上方有個寫著【存取權杖】,內有一串很長像是某種代碼的框框,請點選旁邊的Get Token選單,拉下後點選Get User Access Token,畫面會出現Select Permissions的勾選欄,這些欄位代表您向臉書粉絲專頁所想要請求提供的資料種類,一般我們大多想知道貼文的訊息內容,所以可在User_Posts選項打個勾勾,再點選底下的Get Access Token即可。至於其他的選項,有很多是會被拒絕請求的,特別是涉及個人隱私的資料類型,這也是臉書必須特別小心處理的地方。此處的Token(Access Token)即指用戶權限的安全憑證,透過Token的取得才可以進行後續的指令,臉書用【存取權杖】為中譯倒是頗能符合它本身的意義。

facebook_developer_003

 

facebook_developer_004

 


  • 點選Submit

取得Token後,點選Submit按鈕,在右邊的空間即可呈現自己的臉書ID碼與名稱。特別注意:Token只有兩個小時的效力,若超過時間,會出現需要更新的警示畫面,僅需點選Refresh更新Token即可。

facebook_developer_005

 

facebook_developer_006

 


  • 導入粉絲專頁帳號

至此,我們可以了解,在Graph API測試工具的頁面,可區分三大塊:最上方為【存取權杖】與Graph API語法區;左邊是決定某個帳號或粉絲專頁要出現哪些資訊的設定區;右邊則為依據左邊設定的資訊顯示區。接著,我們就以【蘋果日報】臉書粉絲專頁為例, 可先到他們家的粉絲專頁頁面觀察,將網址appledaily.tw(帳號名稱)複製下來,貼在Graph API語法當中問號(?)的前面,再點選Submit,右邊顯示區將會出現該粉絲專頁的ID碼與帳號名稱。

facebook_developer_007

 

facebook_developer_008

 


  • 蒐集粉絲專頁貼文

在左側設定區,點選Search for a field前面的+號,我們可以設定除了預設的ID、Name以外,還可顯示那些資訊。點選+號出現選單(共計126項,臉書掌握了這麼多的資訊,恐怖吧!),找到Posts(貼文)後點選,再按下Submit即可在顯示區呈現貼文的內容,包括該則貼文ID碼、時間(created_time )、內容描述(description)、小編的話(message)、標籤(htags)等。當我們實際瀏覽臉書的動態時報,會隨著使用者往下瀏覽而貼文將逐則出現;但在顯示區出現的內容,預設每頁是25筆(上限100筆),最下方會有next page的連結,點選後將會進入下一頁內容。

facebook_developer_009

 

facebook_developer_010

 


  • 蒐集特定時間區間貼文

聰明的您,一定可以察覺:在左側設定區的Search for a field,是有層次之分的。也就是說,就像數學符號的大括弧、中括弧、小括弧一樣,代表在某個階層之下或之內,可以新增使用者所想要的指令。同理推得,在某個帳號所有貼文的範圍內,可以設定只蒐集特定時段內的貼文。因此,我們在最內層的Search for a field新增since(開始時間)和until(結束時間)兩個指令。特別注意:since和until都必須輸入時間,但時間的格式必須和原始碼一致,例如since(2016-09-01).until(2016-09-02)。此外,我們也想知道這段時間貼文的上版時間(created_time)、貼文內容(description)和小編的話(message),於是我們再新增這三個指令,按下Submit即可獲得2016年9月1日至9月2日的貼文訊息。

facebook_developer_011.png

 

  • 蒐集使用者反應

除了貼文內容,您一定也想知道使用者(粉絲)對貼文的反應如何。特別是臉書除了既有的【讚】(like)以外,還新增了【喜歡】(love)、【哈哈】(haha)、【驚訝】(wow)、【悲傷】(sad)、【生氣】(angry)五個表情符號,讓使用者的反應得以多元選擇,也讓研究者可以更進一步窺探使用者對於貼文訊息的情緒反應。如前述,我們在第二層新增反應(reaction)指令,用以呈現粉絲對貼文的反應;同時,我們也想知道這些粉絲的姓名、ID,以及情緒反應的類型,因此,我們可在第三層新增姓名(name)、帳號(ID)、反應類型(type)等三個指令,再按下Submit即可獲得從2016年9月1日至9月2日,粉絲們對於此期間的貼文,哪些人在甚麼時候留下何種情緒反應的資訊。

facebook_developer_012

 


看到這裡,也許您會翻桌咆嘯:「騙肖ㄝ爛文章!啥咪碗糕大數據!哪裡有臉書秘密?只有一大堆密密麻麻的鬼畫符,阿是要林北一個一個複製貼上逆?」別急著砲我,若真的要複製貼上,留在正常網頁即可,不需大費周章跑來開發人員支援頁面。然而,在進入到運用程式語言撰寫爬文工具階段時,這個部分卻極為重要。例如Python的臉書爬蟲語法中,首先必須定義token=xxxxxxx…後續指令方可執行;R語言的臉書爬蟲同樣也有token=token的語法存在。由此可見,臉書訊息存取權限的認證,都必須透過API、token才能正確運作,在準備製作擷取臉書訊息的工具前,必須了解臉書的網頁型態與文本架構,寫出來的網路爬蟲程式才會完整、快速、準確。

相信您也體會到,臉書的世界,如果不去刻意隱藏些資訊,其實也沒什麼秘密或隱私可言。您要是猛然覺醒,發現臉書實在瞭解您太多太廣太深,那麼,適度的篩選、調整、關閉個人資料存取權限,或許也是可行的方法;再不然,平常自己就要多注意一舉一動,凡事謹言慎行,盡量不在臉書留下或被留下任何倩影、英姿、良言佳句了。

文末,必須再次感謝台大林士凱老師,在Python語法方面給予的諸多教導與啟示,容我工商服務一下他近期的工作坊:

http://dannypheobe.blogspot.tw/2016/07/newsurvey_30.html

小班教學,解說詳盡,真心不騙,絕對讓您物超所值,竭誠歡迎踴躍報名參加。

在〈臉書facebook可以說的秘密_社群大數據_網路爬文_social Big data_crawler〉中有 3 則留言

  1. 剛剛測試時,發現現在「+號」選項後,只剩下10個選擇,也沒有能擷取POST的資料了,十分可惜!不知道是我操作有誤,還是臉書在隱私方面的控管力道加強之故,僅供參考,謝謝。

    1. 哈囉!Leon Wu您好,我剛才試過,臉書目前雖然API版本已經升級到v2.11,但是文中介紹的功能還是正常的,如下圖:
      一、選擇fields:
      https://kangliping.files.wordpress.com/2017/12/facebook_developer_appledaily01.png
      二、選擇貼文:
      https://kangliping.files.wordpress.com/2017/12/facebook_developer_appledaily02.png
      三、列出貼文:
      https://kangliping.files.wordpress.com/2017/12/facebook_developer_appledaily03.png

      再請您試試看囉!感謝您的回應!

發表迴響