Dành cho ai
Bảng còn nguyên khi chuyển sang Markdown
Các bộ chuyển đổi HTML sang Markdown thông thường hỏng đúng ở những bảng quan trọng: bảng có danh sách, liên kết hoặc đoạn mã mẫu trong ô. Clean Web Clipper tự chuyển đổi bảng và trải phẳng nội dung ô thay vì làm rơi cả hàng.
Các con số biến mất ở đâu
Bảng là lý do bạn lưu trang: các gói giá, giới hạn tốc độ, thời hạn lưu trữ, một lược đồ dữ liệu. Bạn dán bản trích vào ghi chú và thấy một hàng trải dài cả trang, dấu gạch đứng sai chỗ, và một cột lặng lẽ nhập vào cột bên cạnh. Các con số vẫn còn trên màn hình trình duyệt sau lưng bạn, nên lỗi rất dễ bị bỏ qua, cho tới khi thẻ bị đóng.
Lỗi ngược lại cũng tốn đúng một buổi chiều. Rất nhiều trang vẫn dùng table chỉ để dàn trang, và một bộ chuyển đổi coi mọi bảng như vậy là dữ liệu sẽ đưa bạn hai mươi hàng điều hướng khoác áo bộ dữ liệu. Một kết cục là ngồi gõ lại số, kết cục kia là ngồi xóa lưới, và cả hai đều không phải việc phân tích bạn định làm.
Gõ lại còn có cái giá thứ ba lộ ra rất lâu sau. Một con số gõ tay vào bảng tính không mang nguồn, không ngày và không cách nào kiểm tra – sáu tuần sau, không ai nói được thời hạn lưu trữ ở ô D14 được đọc từ trang vào tháng Một hay tháng Ba, và trang đã bị sửa hai lần từ đó. Giá, giới hạn tốc độ và hạn mức thay đổi mà không có thông báo. Một bảng đã chụp kèm URL nguồn và ngày trang khai báo ở trên trả lời được câu hỏi đó, và trả lời lại vào quý sau khi bạn chụp cùng trang và diff hai bản.
Những gì còn nguyên vẹn
- Bộ chuyển đổi bảng GFM viết riêng cho việc này, không phải một plugin chuyển đổi chung gắn thêm vào.
- Giữ được 12 trên 15 bảng trong bộ mẫu kỹ thuật, so với 7 của mỗi công cụ được so sánh.
- Bảng hai cột lộn xộn thành các dòng khóa in đậm và giá trị thay vì một lưới vỡ.
- Bảng dàn trang được gỡ vỏ – lưới chỉ dùng để định vị trả lại nội dung mà không kèm lưới.
- Mã trong ô vẫn là mã, với nhãn ngôn ngữ trên khối mã.
- Chọn một bảng trên trang và trích xuất phần đã chọn, khi không cần bài viết xung quanh.
- URL nguồn và ngày trang khai báo nằm phía trên bảng, nên một bộ số mang ngày nó có hiệu lực thay vì ngày bạn tình cờ lưu nó.
- Lần chụp thứ hai của cùng trang được thêm hậu tố số, không bao giờ ghi đè – đó là điều khiến diff hằng quý có thể thực hiện được.
| 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. |
Thiết lập cho bảng
Hai cài đặt và một thói quen. Thói quen cuộn trang trước khi trích xuất lấy lại được nhiều hàng hơn bất kỳ cài đặt nào.
- Mở Tùy chọn từ biểu tượng tiện ích và trỏ nơi lưu vào thư mục chứa dữ liệu làm việc –
data/sourcescạnh notebook hoặc bảng tính dùng tới nó. - Để cú nhấp vào biểu tượng mở cửa sổ xem trước. Bảng là thứ duy nhất đáng xem trước khi lưu – các cột có thẳng hàng hay không thì nhìn một lần là thấy, còn trong danh sách tệp thì không thấy được.
- Đặt mẫu tên tệp là
{date}-{domain}-{title}, để cùng một trang giá chụp vào tháng Một và tháng Tư là hai tệp nằm cạnh nhau khi sắp xếp. - Bật
sourcevàdatetrong frontmatter. Một bảng không có địa chỉ nguồn là một bộ số mà sớm muộn ai đó sẽ phải tính lại. - Trước khi trích xuất, hãy cuộn xuống cuối bảng. Các hàng tải khi cuộn không tồn tại trong DOM cho tới khi được tải, và tiện ích đọc DOM vào lúc bạn trích xuất.
- Khi bài viết xung quanh không liên quan, hãy chọn bảng trên trang và trích xuất phần đã chọn. Công tắc ở đầu cửa sổ xác nhận bạn đang xem phần đã chọn chứ không phải cả trang.
- Đặt lịch chụp định kỳ cho những trang có số liệu thay đổi: hạn mức, giá, thời hạn lưu trữ. Giá trị của bộ dữ liệu nằm ở lần chụp thứ hai, không phải lần đầu.
Cài đặt cho số liệu bạn sẽ dùng lại
Mục đích của mọi giá trị dưới đây là một bảng được đọc sáu tháng sau vẫn cho biết nó từ đâu tới và từ khi nào.
| Cài đặt | Giá trị | Vì sao chọn giá trị này |
|---|---|---|
| Cú nhấp vào biểu tượng | Cửa sổ xem trước | Một cột lệch nhìn là thấy ngay, còn trong danh sách tệp thì vô hình |
| Nơi lưu | Thư mục `data/sources` | Giữ các bản chụp cạnh notebook hoặc bảng tính dùng tới chúng |
| Mẫu tên tệp | `{date}-{domain}-{title}` | Các bản chụp hằng quý của một trang nằm cạnh nhau và không bao giờ trùng tên |
| Frontmatter | Bật `source` và `date` | Hai dòng biến một bộ số trở lại thành một dữ kiện trích dẫn được |
| Hình ảnh | Bỏ qua | Biểu đồ đằng nào cũng tới dưới dạng liên kết hình; tiện ích không đọc số từ một bức ảnh |
| Phần đã chọn | Chọn bảng, trích xuất phần đã chọn | Một bài viết mười hai màn hình quanh một bảng bốn hàng là nhiễu trong thư mục dữ liệu |
| Chụp lặp lại | Trích xuất cùng trang mỗi quý | Hậu tố số giữ cả hai, và bản diff chính là phân tích |
**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. The source grid had merged header cells and a nested list in the last row. Reproduced as a Markdown table it would have broken; as pairs it does not.
Ba bảng, ba kết quả
Bảng giá vào bảng so sánh
Bốn nhà cung cấp, bốn trang giá, bốn lần chụp. Mỗi bảng được chuyển thành bảng GFM với tên gói, số tiền và giới hạn nằm đúng ô cũ, cùng URL nguồn phía trên, nên bảng so sánh được lập mà không phải gõ lại một con số nào.
Đây là chỗ bộ chuyển đổi chứng tỏ giá trị – những ô làm hỏng bộ chuyển đổi chung là ô có dấu chú thích, danh sách tính năng đi kèm hoặc đoạn mã mẫu bên trong. Trên bộ mẫu kỹ thuật mười lăm bảng, mười hai bảng giữ được ở đây so với bảy của mỗi công cụ được so sánh.
Cùng một trang, cách nhau một quý
Bạn đã chụp giới hạn tốc độ của một nhà cung cấp vào tháng Hai và lại chụp vào tháng Năm. Tệp thứ hai được thêm hậu tố số. Bản diff cho thấy mức burst của gói khởi đầu giảm một nửa và thời hạn lưu trữ của gói cao nhất được kéo dài – không thay đổi nào được thông báo ở bất cứ đâu.
Không có tệp tháng Hai thì thay đổi không chứng minh được, vì trang chỉ hiển thị trạng thái hiện tại và các con số trước đó không còn ở đâu mà nhà cung cấp công bố. Toàn bộ phương pháp phụ thuộc vào việc lần chụp đầu đủ rẻ để làm trước khi bạn biết nó quan trọng.
Một lưới không thể là bảng
Một trang đặc tả định nghĩa hai mươi header trong lưới hai cột, với ô tiêu đề gộp và một danh sách lồng trong một hàng. Tái tạo thành bảng Markdown thì nó sẽ sụp; thay vào đó nó được chuyển thành các dòng khóa in đậm với giá trị bên dưới, không mất gì cho việc đọc lẫn tìm kiếm.
Hành vi đó là có chủ ý chứ không phải một lần thất bại dự phòng. Bảng hai cột lộn xộn thường là danh sách định nghĩa khoác áo lưới hơn là dữ liệu, và một bảng gạch đứng bị vỡ khó sửa hơn nhiều so với đọc một danh sách.
So với các cách thường dùng để chuyển bảng
Cách nào dưới đây cũng lấy được số ra khỏi trang. Chúng khác nhau ở những gì đi kèm với con số và những gì bạn phải làm sau đó.
| Cách đang làm | Bạn nhận được gì | Cái giá phải trả |
|---|---|---|
| Gõ lại vào bảng tính | Đúng những ô bạn cần | Lỗi chép tay, và không có ghi nhận nguồn hay ngày |
| Sao chép và dán vào bảng tính | Thường là lưới, đôi khi | Hỏng với ô có danh sách hoặc mã; lưới dàn trang bị coi là dữ liệu |
| Chụp màn hình bảng | Bảng như lúc hiển thị | Không tính toán được, không tìm kiếm được, không có dòng nguồn |
| Chức năng xuất CSV của chính trang | Dữ liệu sạch, khi có | Phần lớn trang không có, và bản xuất đôi khi khác với những gì hiển thị |
| Bộ chuyển đổi HTML sang Markdown thông thường | Markdown, nhanh | Ô có danh sách hoặc khối mã là chỗ bộ chuyển đổi chung hỏng |
| Clean Web Clipper | Bảng GFM kèm nguồn và ngày phía trên | Không ô gộp, không xuất CSV, và không đọc số từ ảnh biểu đồ |
Khi bảng ra không đúng
Các ô gộp biến mất
Markdown không có ô gộp, nên colspan và rowspan bị trải phẳng – nội dung được giữ, còn hiệu ứng gộp thì không, vì định dạng không biểu diễn được. Khi một tiêu đề gộp trải qua ba cột, chữ nằm ở cột đầu tiên. Đây là đặc tính của định dạng đích chứ không phải của việc chuyển đổi, và không bảng Markdown nào ở đâu biểu diễn được điều đó.
Mất một nửa số hàng
Tiện ích đọc DOM vào đúng lúc bạn trích xuất, nên các hàng trang tải khi cuộn (hoặc hiện qua nút “xem thêm”, hoặc chia trang) chưa tồn tại nếu bạn chưa khiến chúng xuất hiện. Hãy cuộn xuống cuối, mở rộng những gì mở rộng được, rồi trích xuất. Với bảng chia trang, hãy trích xuất từng trang – các phần có thể ghép lại sau, và không gì khác khôi phục được những hàng trình duyệt chưa bao giờ nhận.
Tôi nhận được một lưới điều hướng thay vì dữ liệu
Đó là bảng dàn trang: lưới chỉ dùng để định vị, thứ nhiều trang cũ vẫn dùng cho menu và phần đầu. Chúng được gỡ vỏ thay vì chuyển đổi, nên nội dung đi qua mà không kèm lưới. Nếu một lưới điều hướng vẫn vào ghi chú dưới dạng bảng, đó là vì trang đánh dấu nó là bảng dữ liệu – mã đánh dấu nói “dữ liệu” và tiện ích tin điều đó.
Bảng ra thành các dòng khóa và giá trị
Đó là đường xử lý bảng hai cột lộn xộn. Bảng hai cột có các hàng không đều thường là danh sách định nghĩa vẽ thành lưới, và tái tạo nó thành bảng gạch đứng sẽ cho ra một lưới vỡ chứ không phải thứ đọc được. Nội dung đầy đủ: khóa in đậm, giá trị bên dưới, theo thứ tự gốc. Nếu bạn cần nó thành bảng thật, các cặp có thể chuyển ngược lại một cách máy móc.
Định dạng chịu thua ở đâu
Markdown không có ô gộp, nên colspan và rowspan bị trải phẳng – nội dung được giữ, còn hiệu ứng gộp ô thì không, vì định dạng không biểu diễn được. Bảng lồng trong một ô là trường hợp khó với mọi công cụ và công cụ này không ngoại lệ. Nó không đọc số từ ảnh biểu đồ, và không xuất CSV hay XLSX. Kết quả là Markdown. Và nó chuyển đổi mỗi lần một trang – đúng trang bạn đang mở.
Câu hỏi
Bảng chỉ dùng để dàn trang thì sao?
Có hỗ trợ ô gộp không?
Tôi có chỉ trích xuất bảng được không?
Tôi có lấy được CSV từ nó không?
Còn bảng tải thêm hàng khi cuộn thì sao?
Nó có đọc số từ biểu đồ không?
Tệp có ghi lại số liệu có hiệu lực vào lúc nào không?
{date}. Khi trang không khai báo ngày, trường để trống thay vì được điền, ít nhất đó là một khoảng trống trung thực chứ không phải một con số sai.