2019年11月3日

臉書爬蟲機器人- 抓回應文章的資訊

9月30日來了米塔颱風,北台灣幾乎全部都放颱風假了,但唯獨新竹市沒有放假。於是市長的臉書某篇文章下在當晚湧入萬篇留言
https://www.cna.com.tw/news/firstnews/201909305002.aspx


當晚我正在觀望著到底會不會放颱風假,也順便繞去市長臉書看一看,也看到了這個盛況,然後想到自己才剛寫了一個臉書抓回應的爬蟲,正好可以用這個機會來練功一下。

各位在使用臉書都有這個煩人的經驗吧,如果你想要看某篇文章的所有留言,你得一直按顯示更多留言或回覆,按到都會翻白眼了。當然,這種繁瑣的工作就交給程式去完成吧,基本作法也就是用Selenium操縱webdriver,把該篇文章底下的留言都點開。然後把整個頁面的原始檔拿來分析,把每篇回應的資訊抓出來就可以了。



回應裡會有什麼資訊呢?原來除了使用者的id、url、回應內容之外,還有發文的時間。雖然你過了幾週再回去看某篇文章或回應,在頁面上只會顯示是「4週」這類不精確的時間,但是從原始碼中卻可以找到很精確的時間,例如data-tooltip-content顯示的中文時間,或是在data-utime裡的unix time。

<abbr data-tooltip-content="2019年9月29日 星期日下午10:28" data-hover="tooltip" minimize="true" class="livetimestamp" data-utime="1569767302" data-minimize="true" id="js_f9">4週</abbr>


在程式處理中,unix time比中文時間要好處理多了,直接用datetime的library的 datetime.get來處理就可以成為各種格式。這裡需要注意的還有時區轉換的問題,就我那天處理的經驗,是只要把unix time加上八小時就可以變成本時間。但是後來在處理別的臉書頁面文章時,卻發現同樣都是在台灣發文的,但是要加的時差卻不同?

全部資訊抓出來之後,可以存成資料庫像這樣


再經過pyplot畫一下直方圖就可以顯示大家的發言和時間的相關性了,在午夜前湧入非常多留言,過了午夜大家就去睡覺了。




我讓機器人爬了整夜的資料,只爬了一半的留言,大約6000篇,然後再畫一下圖,發現原來大家早上六點多會再起來留言罵一下啊



操作程式的影片和程式碼就在底下囉
影片


程式碼