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/README.md

137 lines
3.1 KiB

# 📚 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:
```bash
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