5 điểm bởi GN⁺ 2024-10-22 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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

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 install trong thư mục gốc
    • Chạy npm run build_ff cho Firefox
    • Chạy npm run build cho Chrome

Thành phần sử dụng

  • Việc tạo ePub sử dụng jEpub

1 bình luận

 
GN⁺ 2024-10-22
Ý 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

    • Trong trường hợp của tôi, nó hoạt động trên site này: https://docs.ray.io/en/latest/
    • Có thể loại bỏ các popup như newsletter, đăng ký, đăng nhập, thông báo cookie không? Nó có đọc được các trang cần đăng nhập không?
  • 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/offpunk hoặc truy cập trực tiếp từ Offpunk
    Dùng tính năng tour thì thay vì doomscrolling, bạn sẽ đọc lần lượt mọi bài viết đến hết ở chế độ văn bản

  • Có 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

    • Có thể xuất sang EPUB từ https://fichub.net/
    • Tôi dùng add-on của Calibre: https://www.mobileread.com/forums/showthread.php?t=259221
      Nó hoạt động ở mức nào đó, nhưng có truyện thì ổn, có truyện chỉ lấy được trang đầu
    • Bản thân Fanfiction.net thì đơn giản, nhưng chặn bot bằng Cloudflare được bật khá gắt
      Để 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
    • Có thể lấy tất cả link chương thành CSV, và cấu trúc trông giống như chỉ tăng số trong URL