【爬蟲-2】將爬下來的 Facebook 粉絲專頁資訊轉成檔案

Patzie!
PyLadies Taiwan
Published in
5 min readMay 7, 2018

前言

本篇是接續【爬蟲】用 Facebook API 搜集粉絲專頁資訊,把上一篇使用 Facebook Graph API 爬下來的 Facebook 粉絲專頁資料轉成 csv 檔,才可以用大家都熟悉的 Excel 進一步觀察和分析粉絲專頁的秘密~(噓~)

把資料輸出成檔案其實相當簡單,相較於前一篇用到許多新工具,本篇的輸出檔案只需要會基本的 Python 語法和 list type 就可以實作了。

預期產出

假設我們對 Facebook 粉絲專頁和粉絲的互動有興趣,想透過粉專文章的 Likes / Comments / Shares 來衡量互動。我們需要產出含以下資訊的 csv 檔:

文章 id / 粉專名稱 / 文章內容 / Like數 / Comment數 / Share數 / po 文時間

要把爬下來的資料轉換成自己定義的檔案格式,需要經過幾個階段:

  1. 拿文章本身的資料(文章 id / 內容 / po文時間)
  2. 拿文章中粉絲互動的資料(Likes / Comments/ Shares)
  3. 把以上資料按照自己定義的格式寫進檔案

以上三件事可以比較明確的拆開,也分別有不同的 input 跟 output,因此我們拆分成三個不同的 function 執行。

筆者的工作環境,和目前會用到的模組工具如下:

# Python3.5
# -*- coding: utf-8 -*-
# OS: OS 10
# IDE: Sublime Text
# facebook-sdk version 1.0.0
import facebook
import requests
import json
import csv

拿文章本身的資料(文章 id / 粉專名稱 / 文章內容 / po文時間)

先上這個 function 的 code:

  • Line 3:首先用前一篇提到的 facebook-sdk 工具,我們一次拿 25 篇 posts,全部存在 all_posts 裡。all_posts 現在是一個大字典,裡面有 25 篇 posts 的 文章 id / 內容 / po文時間
  • Line 4:粉專名稱另外拿,存在 fanpageName 裡。
  • Line 5 – 8:我們宣告四個 list ,希望把以上提到的資料各自按照 post 的先後順序排列存放在 list 中
  • Line 10 –17:觀察 all_posts 的結構,一一把裡面的資料 append 進 list 裡。文章內容因為不一定有值,所以要為他做 try-except 的例外處理。

拿文章中粉絲互動的資料(Likes / Comments/ Shares)

一樣先上這個 function 的 code:

這個 function 裡,前一篇文章裡提到從 Facebook 取資料的兩種方法我們都會用上。這是因為 facebook-sdk 裡拿不到 Shares 數,而 Graph API response 裡拿不到 Comments 數。(不要問我為什麼,測試結果就是這樣QQ)

  • Line 1:參數要傳入上一個 function 產生的 postID_list ,才能用 facebook-sdk 拿每篇 post 的互動狀況。
  • Line 3 - 5:先把 Graph API response 爬下的資料存在 html
  • Line 5 - 8:宣告三個 list,希望把 Likes / Comments / Shares 各自按照 post 的先後順序排列存放在 list 中
  • Line 10 -14:用 facebook-sdk 拿 Likes / Comments 數,存在各自的 list
  • Line 16 -18:用 Graph API response 拿 Shares 數,存在 list

把資料按照自己定義的格式寫進檔案

這個 function 的 code:

  • Line 1:在這個 function 中我們會產生一個檔案,因此第一個參數要指定檔案的名稱;另外還要把前面兩個 function 中產生的所有資料 (list) 全部當成參數傳進來。
  • Line 3:打開一個新檔案,檔名為第一個參數指定的名稱。
  • Line 4: csv.writer 會 return 一個 writer object,這個 object 負責把資料按照你指定的格式輸進檔案。因為我們現在要產生 csv 檔,所以要指定用 ',' 把每個值分隔開。
  • Line 5 -8:把七個 list 包成一大包可以迭代的東西,用一個雙重 for 迴圈把裡面東西依序寫在一起。Line 7 是 python 很好用也很簡潔的寫法(可以把第二層 for loop 直接寫成一句),但注意外面必須用 [] 包起來。

實際執行,產生檔案

最後加入起始點 __name__ == '__main__' ,指定參數、token、fanpageID,之後就可以執行看看。下面是從頭到尾的完整 code:

最後會產出 csv 檔案(就可以匯入 Excel 裡面做一般處理):

看到這裡,希望大家都已經成功存取資料,並且拿它來做有趣的應用了(⁎⁍̴̛ᴗ⁍̴̛⁎)

Facebook 每年會稍微調整其開放的資料及隱私權政策,過去拿得到的資料未來不見得一直都能拿到。如果有拿不到資料的情況,可以到 Facebook Api Platform Product Changes 看看是不是已經被取消了。

不過,依照這個做法,如果想要監控 20 個粉專而且每天監控一次,持續一週之後,不就會產生 140 個檔案!?如果我想要在這些監控內容裡面做搜尋,那該怎麼做?

除了存成檔案的形式之外,下一篇文章我們會談到如何把爬下來的資料存到資料庫,以及在哪些情況下,存成資料庫會是比較好的作法~

--

--