You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kmftools/bookscraper
peter.fong 292c9246a1
init werkt.
1 week ago
..
app/routes init werkt. 1 week ago
app_routes Refactor: new Celery pipeline + scraper/tasks architecture 2 weeks ago
db init werkt. 1 week ago
docker abort for audiotasks 2 weeks ago
logbus abort+chaptertitle+dashboardupgrade 2 weeks ago
scraper init werkt. 1 week ago
static init werkt. 1 week ago
taskqueue Refactor: new Celery pipeline + scraper/tasks architecture 2 weeks ago
templates init werkt. 1 week ago
worker Refactor: new Celery pipeline + scraper/tasks architecture 2 weeks ago
.gitignore abort for audiotasks 2 weeks ago
CHATGPT_CONTEXT.md Resolve merge conflicts (CHATGPT_CONTEXT + book_scraper) 2 weeks ago
Dockerfile bookscraper single thread 2 weeks ago
README.md parsing fix+progress half working 2 weeks ago
app.py init werkt. 1 week ago
audio_worker_local.py abort for audiotasks 2 weeks ago
celery_app.py create m4b instead of m4a 2 weeks ago
docker-compose.yml nfs mount 1 week ago
init.sh bookscraper new 2 weeks ago
project.zip parsing fix+progress half working 2 weeks ago
requirements.audio.txt refactor complete celery multithreaded downloads 2 weeks ago
requirements.scraper.txt refactor complete celery multithreaded downloads 2 weeks ago
requirements.txt refactor complete celery multithreaded downloads 2 weeks ago
requirements.web.txt refactor complete celery multithreaded downloads 2 weeks ago
start_audio_worker.sh Abort flow, UI-log integration, book_id overhaul, macOS local audio worker support 2 weeks ago
text_replacements.txt parsing fix+progress half working 2 weeks ago

README.md

📚 BookScraper — Web UI + Docker + Live Log Streaming

BookScraper is een moderne, volledig geautomatiseerde scraper voor Chinese webnovels
zoals Piaotian / Piaotia.
Het project combineert een krachtige scraping-engine met een prettige webinterface.


🔍 Wat doet dit project?

BookScraper bestaat uit drie belangrijke onderdelen:


1. 🧠 BookScraper Engine (Python)

Dit is de kern van het project.
De engine:

  • Leest basisinformatie van een boek (titel, auteur, cover)
  • Zoekt alle chapter-links
  • Downloadt elk chapter met:
    • Retry systeem
    • Anti-429 backoff
      (wacht: backoff * attempt + 1 seconde)
    • Detectie van lege chapters → automatisch opnieuw proberen
  • Past tekstreplacements toe (via replacements.txt)
  • Slaat chapters geordend op
  • Splits lange boeken automatisch in volumes (v1/, v2/, v3/…)

De engine is bestand tegen rate limiting van Piaotian en soortgelijke sites
en werkt met een throttle (MAX_DOWNLOADS_PER_SEC) om blokkades te voorkomen.


2. 🌐 Flask Webinterface (UI)

De webinterface biedt:

  • Een invoerveld voor de boek-URL
  • Een knop: Run Scraper
  • Live feedback via server-sent events (SSE)

Tijdens het scrapen zie je realtime updates verschijnen, zoals:

[DEBUG] GET chapter 1123 [DEBUG] HTTP 429 → retry sleep 4.0s [DEBUG] Saved chapter: output/xxx/01123_章名.txt

Hierdoor voelt het alsof de scraper “live” aan het werk is.


3. 📡 Live Logging (SSE)

De Logger vangt alle BookScraper-meldingen op en streamt ze
via /stream naar de webinterface.
Dit maakt het ideaal om scraping in de gaten te houden zonder console.


4. 🔧 Configuratie via .env

Om het project flexibel te houden wordt alles ingesteld via .env:

  • Throttle (MAX_DOWNLOADS_PER_SEC)
  • Debugmode (FLASK_DEBUG)
  • DRY_RUN (alleen eerste chapters)
  • Volume size
  • Host & Port

De .env wordt automatisch geladen door Docker Compose en door Flask.


📦 Projectstructuur

bookscraper/ │ ├── scraper/ │ ├── book_scraper.py # De scraper engine │ ├── logger.py # SSE logger │ ├── sites.py # Site configuratie (selectors etc.) │ ├── utils.py # Helpers │ └── ... │ ├── templates/ │ └── index.html # UI │ ├── output/ # Book results │ ├── app.py # Flask webserver + endpoints ├── replacements.txt # Tekstvervangers ├── Dockerfile ├── docker-compose.yml ├── requirements.txt └── .env


▶️ Project handmatig starten (ZONDER Docker)

Zorg dat dependencies geïnstalleerd zijn:

pip install -r requirements.txt
Start de Flask server:
python app.py

Open daarna:
👉 http://localhost:5000

Docker Build (zonder compose)

Manueel builden:

docker build -t bookscraper .
docker run -p 5000:5000 --env-file .env bookscraper
docker run \
  -p 5000:5000 \
  --env-file .env \
  -v $(pwd)/output:/app/output \
  bookscraper


docker compose down docker builder prune -af docker volume prune -f docker compose build --no-cache docker compose up

docker compose down docker compose build docker compose up

tar
--exclude="pycache"
--exclude="/pycache/"
--exclude="*.pyc"
--exclude=".venv"
--exclude="venv"
-czvf project.tar.gz .