Clean Web Clipper 加到 Chrome(免費)

適用對象

轉換成 Markdown 後依然完整的表格

通用的 HTML 轉 Markdown 工具,偏偏在重要的表格上出錯:儲存格裡有清單、連結或程式碼範例的表格。Clean Web Clipper 自己序列化表格,把儲存格內容攤平,而不是丟掉那一列。

數字在哪裡弄丟

表格正是你存下這個頁面的原因:價格方案、速率限制、保存期限、資料結構描述。你把擷取內容貼進筆記,發現一列資料攤開成一整頁、直線符號出現在錯誤的位置,還有一欄悄悄和隔壁欄合併了。數字仍然在你身後的瀏覽器畫面上,所以這種失敗很容易被忽略,直到分頁關掉為止。

相反的失敗,也要花掉同樣一個下午。很多網站仍然只把 table 用來排版,把每一個都當成資料的轉換器,會交給你二十列偽裝成資料集的導覽。一種結果是花時間重打數字,另一種是刪掉一整個網格,而兩者都不是你坐下來要做的分析。

重打還有第三種代價,很久以後才會顯現。手動打進試算表的數字,沒有來源、沒有日期,也無從查核:六週後,沒人說得出儲存格 D14 中的保存期限是一月還是三月從頁面讀來的,而頁面在那之後已經改過兩次。價格、速率限制和配額會在沒有公告的情況下改變。上方附有來源網址和頁面宣告日期的擷取表格,能回答這個問題,下一季你再擷取同一個頁面並比對兩者時,也能再回答一次。

完整保留下來的東西

每個儲存格都有程式碼的表格,完整無缺sqlite.org/datatype3.html
| Storage class | Meaning                                                |
| ------------- | ------------------------------------------------------ |
| `NULL`        | The value is a NULL value.                              |
| `INTEGER`     | A signed integer, stored in 1, 2, 3, 4, 6 or 8 bytes.   |
| `REAL`        | A floating point value, stored as an 8-byte IEEE number.|
| `TEXT`        | A text string, stored using UTF-8, UTF-16BE or UTF-16LE.|
| `BLOB`        | A blob of data, stored exactly as it was input.         |

為表格設定擷取

兩項設定和一個習慣。這個習慣,也就是擷取前先捲動,救回的列數比任何設定都多。

  1. 從擴充功能圖示開啟選項,把存放位置指向工作資料所在的資料夾:使用這些資料的筆記本或試算表旁邊的 data/sources
  2. 把按下圖示的動作保留為預覽視窗。表格是唯一值得在歸檔前看一眼的東西:欄位有沒有對齊,一眼就看得出來,放進資料夾清單裡就看不見了。
  3. 把檔名範本設為 {date}-{domain}-{title},這樣一月和四月擷取的同一個價格頁面,會是兩個排在一起的檔案。
  4. 在 frontmatter 中開啟 sourcedate。沒有來源網址的表格,只是一組遲早有人得重新推導的數字。
  5. 擷取前,先捲到表格底部。捲動時才載入的列,載入之前並不存在於 DOM 中,而擴充功能讀取的是擷取那一刻的 DOM。
  6. 不需要周圍的文章時,在頁面上選取表格並擷取選取範圍。視窗頂端的切換鈕會確認你看的是選取範圍,而不是整頁。
  7. 為數字會變的頁面在行事曆上排定定期擷取:配額、價格、保存期限。這批資料的價值在第二次擷取,而不是第一次。

會重複使用的數字的設定

下面每一個值的目的,都是讓六個月後讀到的表格,仍然說得出它從哪裡來、是什麼時候的。

設定為什麼在這裡用這個值
按下圖示預覽視窗欄位錯位一眼就看得出來,在檔案清單中卻看不見
存放位置`data/sources` 資料夾讓擷取內容和使用它們的筆記本或試算表放在一起
檔名範本`{date}-{domain}-{title}`同一頁面的每季擷取會排在一起,而且絕不撞名
Frontmatter開啟 `source` 和 `date`這兩行能把一組數字變回可引用的事實
圖片略過圖表無論如何都只會是圖片連結;擴充功能不會從圖片中讀出數字
選取範圍選取表格,擷取選取範圍四列表格外面包著十二個畫面的文章,在資料資料夾裡就是雜訊
重複擷取每季擷取同一個頁面數字後綴會保留兩份,而差異比對就是分析本身
參差不齊的兩欄表格變成鍵與值的行帶有定義網格的規格頁面
**Content-Type**
: The media type of the resource. Required on every request with a body.

**Cache-Control**
: Directives for caching mechanisms in both requests and responses.

**Retry-After**
: Either a delay in seconds or an HTTP-date after which to retry.

來源網格有合併的標題儲存格,最後一列還有巢狀清單。
重建成 Markdown 表格就會壞掉;改成成對的鍵與值就不會。

三張表格,三種結果

把價格表放進比較試算表

四家廠商、四個價格頁面、四次擷取。每張表格都以 GFM 表格呈現,方案名稱、金額和限制都在原本的儲存格裡,上方附有來源網址,所以比較試算表組起來時,沒有任何一個數字需要重打。

序列化程式正是在這裡發揮作用:會讓通用轉換器出錯的儲存格,就是裡面有註腳標記、功能清單或程式碼範例的那些。在包含十五個表格的技術語料上,這裡保留了十二個表格,比較的引擎各保留七個。

同一個頁面,相隔一季

你在二月和五月各擷取了一次某個供應商的速率限制。第二個檔案加上了數字後綴。差異比對顯示,入門方案的突發額度減半,最高方案的保存期限則延長了,而這兩件事都沒有在任何地方公告。

沒有二月的檔案,這個改變就無法證明,因為頁面只顯示目前的狀態,先前的數字也不存在於廠商公布的任何地方。整個方法依賴的是:在你知道它重要之前,第一次擷取就已經便宜到可以順手做。

無法成為表格的網格

一個規格頁面在兩欄網格中定義了二十個標頭,標題儲存格有合併,其中一列還有巢狀清單。重建成 Markdown 表格就會崩壞;它改為以粗體的鍵行和下方的值呈現,閱讀和搜尋時都沒有任何損失。

這個行為是刻意設計的,而不是失敗後的退路。參差不齊的兩欄表格,往往是披著網格外衣的定義清單,而不是資料;崩壞的直線表格比清單更難修復,清單卻很好讀。

和一般搬移表格的方式相比

以下每一種都能把數字從頁面上拿下來。差別在於數字帶來了什麼,以及你之後還得做什麼。

目前的做法你得到什麼代價是什麼
重打進試算表正好是你需要的儲存格抄寫錯誤,而且沒有來源或日期的紀錄
複製貼上到試算表常常能得到網格,有時不行儲存格中有清單或程式碼時會失敗;版面網格會被當成資料
截圖表格表格顯示的樣子無法計算、無法搜尋,也沒有來源行
網站自己的 CSV 匯出乾淨的資料,如果有的話大多數頁面沒有提供,而且匯出內容有時和顯示的不同
通用的 HTML 轉 Markdown 工具快速得到 Markdown儲存格中有清單或程式碼區塊時,通用轉換器就會出錯
Clean Web Clipper上方附有來源和日期的 GFM 表格沒有合併儲存格、沒有 CSV 匯出,也不會從圖表圖片中讀出數字

表格結果不對的時候

合併儲存格不見了

Markdown 沒有合併儲存格,所以 colspanrowspan 會被攤平:內容保留,視覺上的合併不保留,因為這種格式無法表達。原本橫跨三欄的合併標題,文字會落在第一欄。這是目標格式的特性,而不是轉換的問題,任何地方的 Markdown 表格都無法表達它。

一半的列不見了

擴充功能讀取的是你擷取那一瞬間的 DOM,所以頁面在你捲動時才載入的列(或透過「顯示更多」按鈕提供、或分頁顯示的列),除非你讓它們出現,否則根本還不存在。捲到底、展開能展開的部分,再擷取。分頁顯示的表格,就每一頁各擷取一次:各部分之後可以合併,而瀏覽器從未收到的列,沒有任何方法能救回。

我拿到的是導覽網格,不是資料

那是版面表格:純粹用來排版的網格,許多舊網站仍用它來做選單和頁首。這種表格會被拆開而不是被轉換,所以內容會保留,網格則不會。如果導覽網格真的以表格形式進了筆記,那是因為頁面把它標記成資料表格:標記說它是「資料」,擴充功能就相信了。

表格變成了鍵與值的行

這是參差不齊兩欄表格的處理路徑。列數不整齊的兩欄表格,通常是畫成網格的定義清單,重建成直線表格只會得到崩壞的網格,而不是可讀的表格。內容是完整的:粗體的鍵,下方是值,依原本的順序排列。如果你需要真正的表格,這些成對的內容可以機械式地轉回去。

格式的極限

Markdown 沒有合併儲存格,所以 colspanrowspan 會被攤平:內容保留,視覺上的合併不保留,因為這種格式無法表達。巢狀在儲存格內的表格對任何工具都很難,這個工具也不例外。它不會從圖表圖片中讀出數字,也不匯出 CSV 或 XLSX。輸出是 Markdown。它一次轉換一頁,就是你正在看的那一頁。

加到 Chrome(免費)完全免費。不需要帳號、不需要註冊,也沒有任何限制。

常見問題

純粹用來排版的表格會怎樣?
會被拆開。把排版網格重建成 Markdown 表格只會產生雜訊,所以保留內容,不保留網格。
支援合併儲存格嗎?
Markdown 沒有合併儲存格,所以會被攤平。內容保留,視覺上的合併不保留,因為這種格式無法表達。
可以只擷取表格嗎?
可以:在頁面上選取它,擷取選取範圍。視窗頂端的切換鈕會顯示你看的是選取範圍還是整頁。
可以從中取得 CSV 嗎?
不行。輸出是 Markdown。GFM 表格可以貼進大多數試算表和筆記本工具,但沒有 CSV 或 XLSX 匯出。
捲動時才載入更多列的表格呢?
擴充功能讀取擷取那一刻的 DOM,所以只會擷取頁面實際已呈現的列。請先捲動,把其餘的列載入。
它能從圖表中讀出數字嗎?
不能。圖表是圖片或 canvas,擴充功能不做任何形式的影像處理。頁面若在圖表下方以表格公布底層數據(許多統計機關都這麼做),那張表格可以正常擷取。
檔案會記錄這些數字是什麼時候有效的嗎?
它記錄頁面宣告的內容:發布日期進入 frontmatter,你擷取的那天可以透過 {date} 放進檔名。頁面沒有宣告日期時,欄位會留空而不是被填上,這至少是誠實的缺口,而不是錯誤的數字。
可以擷取嵌入式儀表板中的表格嗎?
不行。顯示在嵌入式檢視器或儀表板元件中的內容,屬於嵌在頁面中的另一份文件,擷取周圍的頁面碰不到它裡面。工具若提供自己的匯出或全頁檢視,請改用那個。
欄位格式會保留嗎?
欄位順序、標題列和儲存格內容會保留。顏色、底紋、儲存格寬度和字重不會,因為 Markdown 表格無法承載這些。來源中是粗體的儲存格會保留粗體;只是上了顏色的儲存格,不會保留顏色。
表格巢狀在另一個表格裡怎麼辦?
這對所有工具都是難題,這個工具也不例外:內層表格的內容會被攤平到包含它的儲存格中。內容是保留的,但以文字而非網格的形式,巢狀混亂的版面,在依賴它之前值得用眼睛檢查一遍。