5P by GN⁺ | ★ favorite | 댓글 1개
  • Epublifier는 웹사이트의 HTML 페이지 목록을 추출해 ePub 책으로 컴파일하고, 사용자가 선택한 eReader로 가져갈 수 있게 하는 브라우저 확장 도구임
  • JavaScript를 작성할 수 있는 고급 사용자는 파서 정의를 추가해 특정 사이트의 파싱 방식을 커스터마이즈할 수 있음
  • 지원 대상은 Novel Update, Wuxia World, awesome-read-the-docs의 다수 사이트, UL/OL 목차·링크 텍스트 정규식·query selector 기반 커스텀 사이트, 제목 요소와 Next 버튼이 있는 커스텀 웹앱
  • 브라우저 안에서 실행되므로 JavaScript로 동적으로 텍스트를 생성하거나 가져오는 사이트에서도 페이지를 처리할 수 있고, 마우스 클릭으로 핵심 요소를 선택하는 UI 기반 스크래핑을 제공함
  • 반복 실행되는 백그라운드 작업이나 견고한 전용 스크래퍼가 목적이 아니며, 이미 다른 프로그램이 잘 처리하는 사이트에서는 전용 설정이 있는 도구보다 더 나은 성능을 기대하기 어려움

Epublifier가 하는 일

  • Epublifier는 웹사이트를 ePub으로 변환하는 도구임
  • 웹사이트에서 HTML 페이지 목록을 추출하고, 이를 ePub 책으로 컴파일해 사용자가 원하는 eReader에 가져갈 수 있게 함
  • JavaScript를 작성할 수 있는 사용자는 추가 파서 정의를 넣어 임의 사이트의 파싱을 커스터마이즈할 수 있음
  • 사용법은 wiki에서 확인할 수 있음

지원하는 사이트와 페이지 구조

  • 현재 지원 대상은 다음과 같음
    • Novel Update

    • Wuxia World

      • awesome-read-the-docs에 포함된 다수 사이트
      • UL/OL 요소를 목차로 쓰는 커스텀 사이트
      • 링크 텍스트에 대한 정규식 또는 query selector를 사용하는 커스텀 사이트
      • 미리 정의된 제목(header) 요소와 클릭 가능한 Next 버튼이 있는 커스텀 웹앱

설치

사용 예시

  • Novel Update에서 페이지 목록 추출 예시가 있음
  • Wuxia World에서 Next 버튼을 따라가며 웹앱을 순회하는 예시가 있음
  • FastAPI 문서 같은 다른 문서 사이트에서 문서 추출 예시가 있음

브라우저 확장으로 만든 이유

  • 이 도구는 전통적인 요청 기반 CLI 스크립트나 열린 탭·창을 기준으로 긁는 일부 Chrome 확장으로 잘 스크래핑되지 않는 웹사이트에서 임시 ePub 생성을 하기 위한 용도임
  • 기존 CLI 스크래퍼나 다른 확장은 대개 미리 정의된 사이트에 맞춰져 있고, 그 범위를 벗어나는 사이트에는 맞지 않을 수 있음
  • 일부 도구는 적지 않은 설정이나 코드 작성이 필요함
  • 일부 사이트는 JavaScript로 텍스트를 동적으로 생성하거나 가져오기 때문에, 브라우저가 JavaScript를 실행해야 함
    • 이 점이 Epublifier를 만든 가장 큰 간극이었음
  • 브라우저 안에서 실행되므로 탐지되거나 차단될 가능성이 낮을 수도 있음

의도한 사용 방식과 한계

  • Epublifier는 견고한 스크래퍼나 반복 실행되는 백그라운드 예약 작업으로 쓰기 위한 도구가 아님
  • 스크래핑할 핵심 요소를 UI에서 선택하도록 만든 이유도 이 사용 방식과 맞닿아 있음
  • 사이트별 설정이 없어도 비교적 쉽게, 몇 번의 마우스 클릭만으로 긁어올 수 있도록 범용성을 목표로 함
  • 이미 다른 프로그램이나 확장이 잘 처리하는 사이트라면, 그 도구들은 해당 사이트에 맞게 설정되어 있으므로 Epublifier가 더 잘 동작하지는 않음
  • 코딩이나 설정에 많은 시간을 쓰지 않고 어떤 사이트를 한두 번 스크래핑하려는 경우에 맞춰져 있음

빌드

  • 빌드 환경은 Windows 10과 NPM 8.1.2임
  • 빌드 절차는 다음과 같음
    • NPM 설치
    • 기본 디렉터리에서 npm install 실행
    • Firefox용으로 npm run build_ff 실행
    • Chrome용으로 npm run build 실행

사용한 구성 요소

  • ePub 생성에는 jEpub이 사용됨

댓글과 토론

Hacker News 의견들
  • 이 확장이 다른 스크래퍼와 다른 이유는, 전통적인 스크래퍼로 잘 긁히지 않는 사이트에서 임시로 EPUB 생성하기 위한 도구이기 때문임
    보통 명령줄 스크래퍼나 다른 확장은 지원 사이트가 미리 정해져 있거나, 설정·코드가 꽤 필요함
    또 어떤 사이트는 JavaScript로 본문을 동적으로 생성하거나 가져오기 때문에 브라우저가 직접 JavaScript를 실행해야 하는데, 이게 가장 큰 빈틈이었음
    브라우저 안에서 실행되니 탐지·차단될 가능성도 낮을 수 있음
    반복 실행되는 백그라운드 예약 작업처럼 견고하게 쓰려는 목적은 아니고, 그래서 긁어올 핵심 요소를 고르는 UI가 있음
    특정 사이트용 설정 없이도 마우스 클릭 몇 번으로 한두 번 긁어오는 데 시간을 덜 쓰게 하려는 도구이고, 이미 다른 프로그램·확장이 잘 처리하는 사이트라면 그쪽이 더 나을 것임
    같은 사이트에 오래 머무는 편이 아니라서 만들었음

  • 비슷한 걸 직접 만들어본 입장에서는, 이 도구에서 흥미로운 부분은 임의 사이트에서 콘텐츠 추출을 반복 조정하는 UI
    추출 과정을 전체 GUI로 다룰 수 있다는 점이 일반적인 방식보다 훨씬 유연함

  • 모든 섹션이 펼쳐야 보이는 아코디언 UI 뒤에 있고, 하나를 펼치면 다른 섹션이 접히는 사이트까지 처리할 수 있다면 정말 멋질 것 같음

    • 내 경우 이 사이트에서는 동작함: https://docs.ray.io/en/latest/
    • 뉴스레터, 구독, 로그인, 쿠키 알림 같은 팝업을 제거할 수 있나? 로그인이 필요한 페이지도 읽을 수 있나?
  • 지금 나도 아주 비슷한 걸 만들고 있음
    블로그와 주로 웹소설 등을 위한 웹 스크래퍼와 EPUB 파서를 만들고, 카테고리·태그와 함께 데이터를 데이터베이스에 저장함
    여러 작품의 읽기 진행 상황을 추적하고, 같은 이야기의 여러 버전(웹소설과 출판 EPUB)을 보관할 수 있게 해주는 오프라인 읽기용 PWA도 같이 만듦

  • Calibre는 엄청나게 많은 사이트를 지원함
    https://github.com/JimmXinu/FanFicFare
    https://github.com/JimmXinu/FanFicFare/wiki/SupportedSites

  • 예전에 블로그를 Kindle로 보내려고 비슷한 Kindle-send[0]를 만들었고, 내부적으로는 readability를 사용함
    지금은 블로그, 책, 때로는 웹사이트 전체 아카이브도 보내는 데 쓰며 스크립트에서도 사용할 수 있음
    Kindle 하이라이트를 Obsidian으로 내보낼 수 있어서, 이런 EPUB을 만들면 하이라이트를 한곳에 모을 수 있다는 장점이 있음
    이름은 kindle-send지만, 책 전송 방식으로 이메일을 쓰는 전자책 리더라면 어디든 보낼 수 있음
    [0] https://github.com/nikhil1raghav/kindle-send

  • 비슷한 걸 Unix 터미널용으로, 웹 페이지·Gopher·Gemini를 대상으로 만든 적이 있음: Offpunk
    https://sr.ht/~lioploum/offpunk/
    EPUB 대신 Gopher는 텍스트 파일, Gemini는 Gemini 파일, 웹 페이지는 HTML+이미지로 캐시에 저장함
    ~/.cache/offpunk에서 계층 구조를 보거나 Offpunk에서 바로 방문할 수 있음
    tour 기능을 쓰면 둠스크롤링 대신 텍스트 모드로 모든 글을 순서대로 끝까지 읽게 됨

  • Epublifier와 비슷한 도구들이 몇 가지 있음
    https://epub.press/
    https://github.com/dteviot/WebToEpub
    https://dotepub.com/

  • 깔끔함
    예전에 이 개념의 단순한 버전을 만들어서 서버 파일 시스템에 EPUB 파일을 저장하고, 그걸 내 전자책 리더와 동기화했음
    https://github.com/solarkraft/webpub
    핵심 재료는 웹사이트를 단순화된 “문서” 보기로 만들어주는 Postlight Parser

  • http://fanfiction.net/도 지원하나? 이 사이트는 쉬운 해결책을 못 찾았음

    • https://fichub.net/에서 EPUB으로 내보낼 수 있음
    • Calibre 추가 기능을 씀: https://www.mobileread.com/forums/showthread.php?t=259221
      어느 정도는 동작하지만, 어떤 이야기는 잘 되고 어떤 이야기는 첫 페이지만 가져옴
    • Fanfiction.net 자체는 간단하지만, Cloudflare 봇 차단이 공격적으로 켜져 있음
      콘텐츠를 가져오려면 헤드리스 브라우저를 쓰는 것 말고는 잘 동작하는 접근을 못 봤음
    • 모든 챕터 링크를 CSV로 가져올 수 있고, URL에서 번호만 증가하는 구조처럼 보임