Desoul Review English

← Hướng dẫn

Biến trang báo thành Markdown sạch để đưa cho AI đọc

Việc cần làm là đưa tin tức cho model đọc. Project của mình có một job chạy theo lịch, lấy bài báo từ RSS feed rồi đưa phần nội dung cho model đọc. Nó đã có sẵn một bộ extract nhỏ, đọc từng đoạn văn và dừng ở 6.000 ký tự. Ngày 5/11/2026 mình chạy crawl4ai (bản 0.9.5) song song với nó trên cùng mấy trang, để xem một crawler chuyên dụng có làm tốt hơn không.

Mình đã chạy gì

Năm bài báo lấy trong ngày từ chính các feed mà job đang đọc: ABC News, Guardian Australia, Sydney Morning Herald, The Conversation và 7NEWS. Thêm hai link Google News trong cùng danh sách feed. crawl4ai chạy hai kiểu, một kiểu qua headless browser, một kiểu gọi HTTP trơn không cần browser, cả hai đều bật filter lọc nhiễu "fit Markdown" của nó (PruningContentFilter, threshold 0.48).

git clone --depth 1 https://github.com/unclecode/crawl4ai.git repo
uv venv --python 3.12 .venv
uv pip install --python .venv/bin/python ./repo          # 10 s, venv ends up 610 MB
.venv/bin/python -m playwright install chromium           # 21 s, 203 MB browser

Để so sánh, mình lấy mọi câu dài hơn 60 ký tự trong output của bộ extract của mình, rồi đếm xem có mấy câu cũng nằm trong output của crawl4ai.

Kết quả ra sao

Số ký tự mỗi bài, của mình (đã bỏ giới hạn) so với crawl4ai bản thô và bản đã lọc, rồi tới độ phủ:

Chỗ nào hỏng

Mình giữ lại gì

Không phải cái library. Filter của nó chấm điểm từng block theo tỉ lệ chữ nằm trong link, và mình mang ý tưởng đó vào bộ extract của mình: đọc cả list item chứ không chỉ đoạn văn, và bỏ item nào có hơn nửa chữ là link. Test trên một bản copy với đúng năm trang đó, nó lấy lại được mười hai dòng chuyến bay, bỏ được hai dòng mời đăng ký newsletter ở Guardian, còn ba bài kia giữ nguyên.

Bộ dò bị chặn của crawl4ai cũng đáng đọc: một danh sách ngắn các pattern nhận ra trang chặn của Cloudflare, Akamai, Imperva và mấy bên tương tự, những trang vẫn trả status 200. Một bộ extract đơn giản không phân biệt được trang bị chặn với trang trống.

Bạn đang dùng Python và cần đọc trang render bằng JavaScript, hoặc crawl cả một site, thì chọn crawl4ai. Còn với báo phục vụ HTML thường, một bộ extract nhỏ làm được y như vậy mà ít rác hơn.

Các tool được nhắc tới trong bài