技術只能陪你一陣子,學會解決問題才能過一輩子
因朋友職業需求需要搜集與公司同類型品牌FB及IG粉專的資料,用每日追蹤人數的變化及貼文數量來做數據分析,像是:
SERIES ・ 系列
FB & IG Crawler from Scratch
第 12 屆 iThome 鐵人賽 AI & Data 組佳作:用 Node.js 與 Selenium 從零打造 FB、IG 粉專爬蟲,一路做到 Google Sheets 存資料、排程與 LINE 通知;後來改寫成《JavaScript 爬蟲新思路!》。
共 30 篇文章
因朋友職業需求需要搜集與公司同類型品牌FB及IG粉專的資料,用每日追蹤人數的變化及貼文數量來做數據分析,像是:
因為我自己在剛接觸程式時最痛恨的就是環境設定 不知道是我跟電腦不合還是怎樣,每次我學新東西的時候總是在環境設定這個環節卡的不要不要的 為了避免讀者在之後實戰的文章中一邊看一邊心理罵:「為什麼我們程式一模一樣但我的就是會錯?」這樣的憾事發生,所以我決定詳細的說明這個專案所需安裝的一…
接下來幾天,我會把這個專案開發前所需具備的基礎知識分幾個主題向各位分享,希望這些文章能給初學者正確的觀念、也能讓老手思考自己開發上是否有忽略的細節
前幾天都在分享一些概念以及開發環境的設定,今天我們要正式開始寫程式惹~
我周圍有些人在面對需求時很喜歡寫一些市面上已經提供的套件而不是直接使用它,而且他們寫出來的套件 bug 通常比原版多很多...
如果你曾經有撰寫網頁端的經驗,你也許體會過以下狀況
筆者曾待過超瞎的公司,他們對於一個專案遷移的概念還停留在把程式 copy 到 USB,到現場的時候再把他放到正式的server上面
在決定以爬蟲作為主題時有朋友勸我不要寫這類有爭議的主題,但因為以下幾點我還是選了這個主題:
一定要自己實作過一遍! 一定要自己實作過一遍! 一定要自己實作過一遍! 因為很重要所以要說三遍,前面幾篇文章比較偏向概念,但今後的文章概念實作並重;因為FB 與 IG 改版的速度極快,我現在提供的方法在他們改版後可能就會失效,所以文章的每個步驟要自己去實作才能理解為什麼這樣做,同…
我的文章是以專案的角度寫作,遇到問題才會分析解決的方案,與專門介紹套件的文章風格不同,因為這個系列文撰寫的初衷並不是教一個技術而是培養你解決問題的能力
有了 Facebook 爬蟲的經驗後,我相信這篇大家是有能力獨自完成的,建議大家先用自己的方式來完成今日目標,這篇文章適合實作遇到問題或是你實作完成後再來參考
1.1 瀏覽器關閉導致無法讀取網頁元件1.2 跨網域(CORS)錯誤
昨天我們完成了一個跑得動的程式,但很明顯這不是一個好的程式 大家應該有感受到隨著程式越來越長,我們對他的掌握力逐步下降 根據 Clean Code 的原則而言就是說這程式寫得很爛XD 很多人為了盡快完成功能而埋頭狂寫,但這樣容易導致你日後維護以及交接的困難性,你所負責的專案越大這…
在 Day8 selenium-webdriver:爬蟲起手式 有使用到 try-catch 來解決抓不到 chrome driver 的例外事件,今天我們會更清楚的說明如何讓 try-catch 幫助你更高效的 debug 以及增加程式穩定性
專案在需求規格中有一條是在自己的電腦執行,在分析完各種檔案格式的優缺點後我決定使用json格式:
1.1 優化分成哪些面向?1.2 優化執行效率及穩定度1.3 背景執行並減少記憶體的消耗
一般來說爬蟲的資料都是儲存到資料庫,但是我相信絕大多數的人不太可能隨時隨地打開資料庫觀看,而且存在資料庫除非你請網頁工程師幫你完成前端視覺化,不然直接看資料庫絕對會讓你懷疑人生XD
在跟著官方步驟完成後,這些也是我們要注意的事情
接下來幾天的目標是將之前的爬蟲資料放入 Google Sheets,實踐上會分成幾個步驟:
1.1 分析 Google Sheets 上要呈現的資料、寫入時可能遇到的問題1.2 組合回傳的資訊:以 crawlerFB 為範例
其實這份專案完成到昨天的進度時就給業主做功能上的確認準備結案了 但一個案子通常很難一次就通過,無論這隻程式在你電腦上執行的多麼穩定,放到別人的電腦上總會冒出大大小小的 bug,我大概歸類成以下幾種:
3.1 插入一個空白欄位:insertEmptyCol3.2 把空白欄位更新成最新的追蹤人數資訊
1.1 那些不堪回首的共同回憶1.2 是什麼原因製造出這些體驗的1.3 有在使用產品的人才會給你最真實的回饋,專案還有哪些地方要改善呢?
在客戶要求這個功能前其實我就把他的雛型完成了,因為我是一個懶人,同時也不是一個記性很好的人,如果每天都要在某個時間打開專案執行 yarn start 然後等數據跑完,這對我來說實在是一件很容易忘記且沒有效率的事情,我認為電腦可以做到事情那就交給電腦去做,所以接下來幾天就來跟大家分…
我想很多人跟我一樣不小心順手把終端機(Terminal)給關了 (或是很乾脆地把 VScode 關了),但視窗關閉後排程其實還在背景持續運行,下面提供一個快速的解決方案:
昨天的教學讓你的排程穩定的在背景執行,但是你重開機在終端機(Terminal)輸入 forever list 的指令你會發現 forever 根本沒有 forever
在通知這個部分我選擇使用 LINE Notify 作為範例,你在了解邏輯後也可以自己改為用 Slack、Wechat、Messager... 等通訊軟體來通知喔
雖然眾多的套件都能實現這個目標,但還是把套件做個簡單的區分:
這份專案所用到的各種技術都不難,難的是將這些技術整合成一個能讓客戶買單的專案;當時在跟工程師朋友分享這個專案的技術組成時他們都覺得很是獵奇,沒想到爬蟲專案還能用如此低成本的方式完成,而且真的能幫客戶解決問題
因為在過去的鐵人賽中很少看到從專案角度來分享技術的文章,所以我選擇從這個角度出發,因為我認為了解專案中每個技術選擇的動機,與學習一個新的技術一樣重要;技術可能被淘汰,但經驗會留下來,希望大家會喜歡我這個系列的文章。