orakzai-io
Initial Version
34d0dc9
|
Raw History Blame Contribute Delete
2.32 kB
# Backend - Async Web Scraper API
A high-performance **FastAPI** service coordinating an asynchronous database-driven web scraping and AI extraction pipeline.
## Project Structure & Core Classes
The backend is organized into a modular pipeline, with each file and class having a dedicated responsibility.
### Root Files
- **`main.py`**: The application entry point.
- Handles **FastAPI** initialization and lifespan management.
- Configures **Loguru** for structured logging and sets up **CORS** middleware.
- Runs the **Uvicorn** server.
- **`api.py`**: The interface layer.
- Defines the **APIRouter** and endpoints (`/scrape`, `/results`, `/download`).
- Manages in-memory job state and initiates **BackgroundTasks** for asynchronous execution.
- Coordinates the `run()` loop for processing a batch of URLs.
### App Module (`app/`)
- **`scraper_manager.py` (`ScraperManager`)**: The orchestrator.
- Coordinates the full 6-stage scraping pipeline (Fetch -> Parse -> DB Store -> LLM -> JSONL -> DB Store).
- Interfaces between all the specialized modules.
- **`browser_client.py` (`BrowserClient`)**: The fetching layer.
- Uses **`curl_cffi`** to fetch HTML while impersonating modern browser fingerprints (TLS/HTTP2) to bypass bot protection.
- **`parser.py` (`Parser`)**: The content engine.
- Leverages **`trafilatura`** to extract clean, structured text from raw HTML.
- Includes token-counting logic using **`tiktoken`**.
- **`llm_extractor.py` (`LLMExtractor`)**: The AI intelligence.
- Interfaces with **Groq** to transform raw text into structured JSON based on user-defined prompts.
- Implements **`tenacity`** retry logic for robust AI interactions.
- **`datastore.py` (`DataStore`)**: The database manager.
- Handles all **SQLAlchemy** operations, including saving parsed content and structured extractions to PostgreSQL.
- **`models.py` & `database.py`**: The data foundation.
- Defines the relational schema (`ParsedData`, `LlmExtraction`) and sets up the database engine/session management.
- **`JSONStorage.py` (`JSONStorage`)**: File persistence.
- Asynchronously appends structured results to a local `.jsonl` file using **`aiofiles`**.
---
[Return to Root Project README](../README.md)