top of page
  • 作家相片駒米

打造屬於你的資料爬蟲,用 Google 試算表收集網路資料



今天我們來講用 Google sheet 打造資料爬蟲。


現今我們可以從網路上找到成千上萬的資料,不管是新聞主題、天氣、股票資訊等。但所有我們關心的議題,可能分散在各個網站,且資料量巨大。使用手動查找、複製、貼上,是很耗時間。另一個情況是,我們想要定期觀查一個資料,例如某個商品的價格變化等,你就會很希望有隻小精靈幫你把資料拉回來,做存檔或其它處理,方便你進一步的分析。


但對於非軟體工程師來說來說,要寫爬蟲程式的話就很心累了!你需要學習 Python 或是其它程式語言,同時要有伺服器資源,來部署寫好的爬蟲。


Google 試算表提供了很好的替代方案,它不需要寫程式就提供了多種抓取資料的方法,且因為試算表原本的特性,易資料再處理、支援多種設備等,而且不用再額外購買雲端運算資源。



外部引用函數

Google 試算表提供了四種外部引用的函數:IMPORTHTML、IMPORTDATA、IMPORTFEED、IMPORTXML ,個別有不同的使用時機,我們再一一來看。


IMPORTHTML

IMPORTHTML 函數會直接從 HTML 頁面提取 表格 ( Table )和列表 ( List ) 到你的工作表中。這可以省下很多大量表格資料的複製貼上的動作。表格屬性通常在網頁上會長這樣:


世界國家人口數


我們可以用 IMPORTHTML 在 HTML 頁面中拉出表格和列表

= IMPORTHTML ( URL , QUERY, INDEX, [Language_Codes] )
  • URL - 想爬取資料的網站連結

  • QUERY - 查詢的類型是 "Table" 或 "List"

  • INDEX - 頁面中可能有多組 Table 或 List ,可以指定是第幾個

  • Language_Code - 頁面的語言代碼若有歧異,可指定特定語言代碼去解析資料。


範例 - 維基百科各國人口資料

結果



IMPORTDATA

IMPORTDATA 函數可以直接匯入 CSV 資料,尤其是一些政府網站的公開資料,會用 csv 來提供資料,或者是也有人會把 Google Sheet 公開發佈,那也會是 CSV 格式,可以用 IMPORTDATA 來拉取資料。


語法

= IMPORTDATA ( URL )
  • URL - 想爬取資料的網站連結


範例 - 台中市停車位資訊


結果




IMPORTFEED

IMPORTFEED 函數可以拉取 RSS 或是 Atom 格式的資料,特別適合於收集部落格、新聞網站或是其它會推送 RSS 的站台


語法

= IMPORTFEED ( URL, [QUERY], [HEADERS], [NUM_ITEMS] )
  • URL - 想爬取資料的網站連結

  • QUERY - 想要匯入的 feed 資料類型。選項包括 "items", "feed", "title", "summary" 等。預設是 "items" 。

  • HEADERS - 布林值,指定匯入的資料是否包含標頭,預設是 FALSE

  • NUM_ITEMS - 指定匯入的項目數量,預設為所有


範例 - iTunes 最受歡迎的電影

=IMPORTFEED("http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topMovies/xml",,true) 

結果



IMPORTXML

IMPORTFEED 函數是最通用函數,可以解析多種結構化資料類型的資料,包括 XML、HTML、CSV、TSV 和 RSS 以及 ATOM 。現在很多網站不是用 table 或 list 來作資料集,而是直接用 div 來做表格,所以就要用 IMPORTXML 來作元素的選擇。


語法

=IMPORTXML(URL, XPath, [Language_Code])
  • URL - 想爬取資料的網站連結

  • XPath - XML 節點的查詢語法,有空再來寫一篇,可先參考 https://www.w3school.com.cn/xpath/xpath_syntax.asp

  • Language_Code - 頁面的語言代碼若有歧異,可指定特定語言代碼去解析資料。


舉個例子,下面是個房屋網站的資料


右鍵「檢查」,發現裡頭是 <div> ,所以沒法用 IMPORTHTML 處理


這時,我們改用 IMPORTXML

這段 XPath 的意思是要抓取 class='trade-obj-card-web' 的 div ,底下的所有資料


結果



注意事項

Google 試算表 引用外部資料是不是太方便了?但使用上有一些事情要注意


1. 函數執行限制

  • 要預留足夠的展開空間

    • 資料引用會拿到不特定數量的資料,若有其它資料會展開失敗。

  • 一個試算表的 IMPORT 系列函式限制

    • 原本有明確限制 50 個引用,但後來拿掉這個限制,但仍可能會發生 IMPORT 使用數量過多的異常,估計可能是用系統運算時間之類來做限制。

    • 即使沒有 50 個引用限制,它仍會造成大量的系統資源消耗,視窗開啟速度也會變慢,務必減少它的使用。如果有興趣的話請留言,我專門來寫一篇關於公式優化。

  • 每日 20,000 次的呼叫 URL 額度

    • 如果你是 Workspace ,每日的呼叫額度是 100,000 次

    • 這是整個帳戶的配額,不是指單檔。所以,雖然額度不低,但還是建議慎重使用。

    • 配額算在擁有者身上,如果檔案有編輯者在修改公式,可能會影響擁有者的額度


2. 更新頻率

  • 檔案開啟的時候,IMPORTDATA、IMPORTHTML 和 IMPORTXML 會每小時更新

  • 重新整理或是開啟檔案,並不會引發 IMPORT 資料更新。

    • 若要強迫更新,可以增加 URL 的引數,如 =importdata("url"&A1),把 A1 做成一個下拉,放 "#A1" | "#A2" 。需要強制刷新時就改 A1 的數值,讓整串 URL 改變,來觸發資料更新。


3. 來源網站的限制

  • 配合來源資料的更新週期。我們都希望資料是最新的,但如果來源網站的資料沒有更新,重複拉取資料也只是徒資網路傳輸的消耗。例如每月更新一次的資料,每天或每小時去拉,實質上沒意議。所以應該了解來源資料的更新週期,正確地設定試算表 IMPORT 函數的更新週期,避免不必要的重複資料拉取。

  • 有些網站的使用條款中可能明確禁止自動化爬取資料,或者限制資料的使用方式,例如禁止商業使用。仔細閱讀並遵循網站的使用條款,可以避免爭議。

  • 合理地設定資料抓取頻率和範圍,避免對網站伺服器造成過大負擔。這不只是道德考量,也是避免去觸發網站的防爬機制。


總結

使用 Google 試算表進行網路資料收集,是一種既簡便又強大的方法,既不用寫程式,也不需要額外的網路運算資源。最重要的是,它可以結合試算表既有的資料處理方式,對資料進行加工,例如:



而這些自動化收集的資料還能再加工成圖表,你就擁有一個即時的儀表板了!


當然,所有工具的使用還是要遵循相關的法律限制,但只要在使用時保持謹慎,你就能用低成本又高效的方式,打造自己的資料倉庫。


希望這篇文對你有啟發!


你有試過使用 Google 試算表來抓取網路資料嗎?

你有嘗試過將抓取到的資料進行分析或可視化嗎?

在工作或個人專案中,哪些場景可以應用這些函數來提高效率?


歡迎訂閱我的電子報,持續關注我的 Google Workspace 高效工作術。

44 次查看

Comments


bottom of page