Epublifier - Công cụ scrape trang (sách, hướng dẫn) để đọc ngoại tuyến
(github.com/maoserr)- Epublifier là tiện ích mở rộng trình duyệt trích xuất danh sách các trang HTML từ website, biên dịch chúng thành sách ePub để người dùng có thể đưa vào eReader mình chọn
- Người dùng nâng cao có thể viết JavaScript có thể thêm định nghĩa parser để tùy biến cách phân tích cho từng trang web cụ thể
- Các đối tượng được hỗ trợ gồm Novel Update, Wuxia World, nhiều trang trong awesome-read-the-docs, các trang tùy chỉnh dựa trên mục lục UL/OL, regex cho văn bản liên kết, query selector, và web app tùy chỉnh có phần tử tiêu đề cùng nút Next
- Vì chạy bên trong trình duyệt, công cụ có thể xử lý cả những trang tạo hoặc tải văn bản động bằng JavaScript, đồng thời cung cấp scrape dựa trên UI để chọn các phần tử cốt lõi bằng thao tác nhấp chuột
- Công cụ này không nhằm phục vụ tác vụ nền chạy lặp lại hay scraper chuyên dụng có độ bền cao; với những trang mà chương trình khác đã xử lý tốt, khó có thể kỳ vọng nó hoạt động tốt hơn các công cụ có cấu hình chuyên biệt
Epublifier làm gì
- Epublifier là công cụ chuyển website thành ePub
- Công cụ trích xuất danh sách các trang HTML từ website, rồi biên dịch chúng thành sách ePub để người dùng có thể đưa vào eReader mong muốn
- Người dùng có thể viết JavaScript có thể thêm định nghĩa parser để tùy biến việc phân tích cho các trang bất kỳ
- Cách sử dụng có tại wiki
Các trang và cấu trúc trang được hỗ trợ
- Hiện đang hỗ trợ các đối tượng sau
-
Novel Update
-
Wuxia World
- awesome-read-the-docs với nhiều trang nằm trong danh sách này
- Các trang tùy chỉnh sử dụng phần tử UL/OL làm mục lục
- Các trang tùy chỉnh dùng regex cho văn bản liên kết hoặc query selector
- Web app tùy chỉnh có phần tử tiêu đề (header) được định nghĩa sẵn và nút Next có thể nhấp
-
Cài đặt
- Có thể cài tiện ích Firefox từ Firefox Add-ons
- Có thể cài tiện ích Chrome từ Chrome Web Store
Ví dụ sử dụng
- Có ví dụ trích xuất danh sách trang trên Novel Update
- Có ví dụ duyệt web app bằng cách lần theo nút Next trên Wuxia World
- Có ví dụ trích xuất tài liệu từ các trang tài liệu khác như tài liệu FastAPI
Vì sao được làm dưới dạng tiện ích trình duyệt
- Công cụ này được tạo ra để tạo ePub tạm thời cho những website không được scrape tốt bởi các script CLI truyền thống dựa trên request hoặc một số tiện ích Chrome scrape dựa trên tab/cửa sổ đang mở
- Các scraper CLI hiện có hoặc tiện ích khác thường được tối ưu cho các trang đã định nghĩa trước, nên có thể không phù hợp với những trang nằm ngoài phạm vi đó
- Một số công cụ đòi hỏi khá nhiều cấu hình hoặc phải viết mã
- Một số trang tạo hoặc tải văn bản động bằng JavaScript, vì vậy cần trình duyệt thực thi JavaScript
- Đây là khoảng trống lớn nhất dẫn đến việc tạo ra Epublifier
- Vì chạy trong trình duyệt nên khả năng bị phát hiện hoặc chặn có thể thấp hơn
Cách dùng dự kiến và giới hạn
- Epublifier không phải công cụ dành cho scraper bền vững hoặc tác vụ nền theo lịch chạy lặp lại
- Việc để người dùng chọn các phần tử cốt lõi cần scrape ngay trên UI cũng gắn với cách dùng này
- Mục tiêu là tính đa dụng, để có thể scrape tương đối dễ dàng chỉ với vài cú nhấp chuột ngay cả khi không có cấu hình riêng cho từng trang
- Nếu một trang đã được chương trình hoặc tiện ích khác xử lý tốt, thì do các công cụ đó đã được cấu hình phù hợp cho trang đó, Epublifier sẽ không nhất thiết hoạt động tốt hơn
- Công cụ phù hợp với trường hợp muốn scrape một website một hoặc hai lần mà không muốn tốn nhiều thời gian cho việc lập trình hay cấu hình
Build
- Môi trường build là Windows 10 và NPM 8.1.2
- Quy trình build như sau
- Cài NPM
- Chạy
npm installtrong thư mục gốc - Chạy
npm run build_ffcho Firefox - Chạy
npm run buildcho Chrome
Thành phần sử dụng
- Việc tạo ePub sử dụng jEpub
1 bình luận
Ý kiến trên Hacker News
Điểm khiến tiện ích mở rộng này khác với các scraper khác là nó là công cụ để tạo EPUB tạm thời từ những trang khó scrape bằng các scraper truyền thống
Thông thường, các scraper dòng lệnh hoặc tiện ích mở rộng khác có danh sách site được hỗ trợ định sẵn, hoặc cần khá nhiều cấu hình/mã
Ngoài ra, một số site tạo hoặc tải phần nội dung động bằng JavaScript, nên trình duyệt phải trực tiếp chạy JavaScript; đây từng là khoảng trống lớn nhất
Vì chạy bên trong trình duyệt nên khả năng bị phát hiện/chặn cũng có thể thấp hơn
Mục đích không phải là dùng thật bền bỉ như một tác vụ nền được lên lịch chạy lặp lại, nên nó có UI để chọn các phần tử cốt lõi cần scrape
Đây là công cụ nhằm giúp tốn ít thời gian hơn khi chỉ cần vài cú nhấp chuột để scrape một hoặc hai lần mà không cần cấu hình riêng cho từng site; nếu một site đã được chương trình/tiện ích khác xử lý tốt thì dùng các công cụ đó có lẽ tốt hơn
Tôi làm nó vì mình không thường ở lại lâu trên cùng một site
Từ góc nhìn của người từng tự làm thứ tương tự, phần thú vị ở công cụ này là UI để lặp đi lặp lại việc tinh chỉnh trích xuất nội dung trên các site bất kỳ
Việc có thể xử lý toàn bộ quá trình trích xuất bằng GUI linh hoạt hơn nhiều so với cách thông thường
Sẽ rất tuyệt nếu nó xử lý được cả các site mà mọi section đều nằm sau UI accordion phải mở ra mới thấy, và khi mở một section thì section khác lại bị thu gọn
Hiện tôi cũng đang làm một thứ rất giống vậy
Tôi đang làm web scraper và trình phân tích EPUB cho blog và chủ yếu là web novel, rồi lưu dữ liệu vào cơ sở dữ liệu cùng với category/tag
Tôi cũng làm kèm một PWA đọc offline để theo dõi tiến độ đọc của nhiều tác phẩm và lưu nhiều phiên bản của cùng một câu chuyện (web novel và EPUB xuất bản)
Calibre hỗ trợ cực kỳ nhiều site
https://github.com/JimmXinu/FanFicFare
https://github.com/JimmXinu/FanFicFare/wiki/SupportedSites
Trước đây tôi từng làm một thứ tương tự tên Kindle-send[0] để gửi blog sang Kindle, bên trong dùng readability
Giờ tôi dùng nó để gửi blog, sách, đôi khi cả bản lưu trữ toàn bộ website, và cũng có thể dùng trong script
Vì có thể xuất highlight trên Kindle sang Obsidian, nên khi tạo các EPUB như vậy sẽ có lợi thế là gom highlight về một chỗ
Tên là kindle-send, nhưng miễn là e-reader dùng email làm phương thức gửi sách thì có thể gửi đến bất cứ đâu
[0] https://github.com/nikhil1raghav/kindle-send
Tôi từng làm một thứ tương tự cho terminal Unix, nhắm tới web page, Gopher và Gemini: Offpunk
https://sr.ht/~lioploum/offpunk/
Thay vì EPUB, nó lưu Gopher thành file văn bản, Gemini thành file Gemini, còn web page thành HTML+kèm ảnh trong cache
Bạn có thể xem cấu trúc phân cấp trong
~/.cache/offpunkhoặc truy cập trực tiếp từ OffpunkDùng tính năng
tourthì thay vì doomscrolling, bạn sẽ đọc lần lượt mọi bài viết đến hết ở chế độ văn bảnCó vài công cụ tương tự Epublifier
https://epub.press/
https://github.com/dteviot/WebToEpub
https://dotepub.com/
Gọn gàng
Trước đây tôi từng làm một phiên bản đơn giản của ý tưởng này, lưu file EPUB vào filesystem của server rồi đồng bộ nó với e-reader của tôi
https://github.com/solarkraft/webpub
Thành phần cốt lõi là Postlight Parser, thứ biến website thành chế độ xem “tài liệu” đã được đơn giản hóa
Có hỗ trợ http://fanfiction.net/ không? Tôi chưa tìm được giải pháp dễ dàng cho site này
Nó hoạt động ở mức nào đó, nhưng có truyện thì ổn, có truyện chỉ lấy được trang đầu
Để lấy nội dung, tôi chưa thấy cách nào hoạt động tốt ngoài việc dùng headless browser