Skip to main content

AI-powered web scraping library that generates Python code to extract structured data into Pydantic schemas

Project description

Hikugen

AI-powered web scraping library that generates Python code to extract structured data into Pydantic schemas.

Overview

Hikugen uses LLMs (via OpenRouter) to generate extraction code for any website. Given a URL, HTML content, and a Pydantic schema, Hikugen:

  1. Generates extraction code via LLM
  2. Validates code security (AST-based, whitelist imports)
  3. Executes with timeout protection
  4. Validates extracted data against your schema
  5. Caches generated code for reuse

No manual parsing code neededjust define your schema, and Hikugen handles the rest.

Quick Start

Installation

# Clone the repository
git clone <repo-url>
cd hikugen

# Install dependencies
uv sync

Basic Usage

from hikugen import HikuExtractor
from pydantic import BaseModel

# Define your extraction schema
class Article(BaseModel):
    title: str
    author: str
    published_date: str
    content: str

# Initialize extractor
extractor = HikuExtractor(
    api_key="your-openrouter-api-key",
    model="google/gemini-2.5-flash"  # Optional, this is default
)

# Extract data from a URL
result = extractor.extract(
    url="https://example.com/article",
    schema=Article
)

print(result.title)
print(result.author)

Parameters

  • url - URL to extract from
  • schema - Pydantic BaseModel defining the extraction structure
  • use_cached_code - Use cached extraction code if available (default: True)
  • cookies_path - Path to cookies.txt for authenticated requests (optional)
  • max_regenerate_attempts - Max regeneration attempts on failure (default: 1)
  • validate_quality - Run LLM quality check on fresh code (default: True)

Key Features

  • LLM-powered extraction - Automatically generates extraction code via OpenRouter LLMs
  • Security validated - AST-based validation ensures no dangerous imports or code patterns
  • Intelligent caching - Generated code cached by URL + schema hash for reuse
  • Auto-regeneration - Automatically regenerates on extraction failures
  • Quality validation - Optional LLM quality check for extracted data
  • Timeout protected - 30-second execution timeout prevents infinite loops
  • Type safe - Full Pydantic integration for schema validation

Development

Running Tests

# All tests
uv run pytest

# Specific test file
uv run pytest tests/test_code_generator.py

# With coverage
uv run pytest --cov=hikugen --cov-report=term-missing

Code Quality

# Lint and format
uv run ruff check src/hikugen/
uv run ruff format src/hikugen/

# Run all checks
uv run ruff check src/hikugen/ && uv run ruff format --check src/hiku/

Architecture

Layered Design

  • Layer 1 (Foundation) - Database caching and HTTP client
  • Layer 2 (Code Intelligence) - Prompts, validation, and generation
  • Layer 3 (Main API) - HikuExtractor with auto-regeneration and quality validation

Workflow

URL + Schema
    �
Cache Check
    �
[Cache Hit] � Cached Code
[Cache Miss] � LLM generates code
    �
AST Validation
    �
Execute with Timeout
    �
Pydantic Validation
    �
LLM Quality Check (optional)
    �
Return Result or Regenerate

Constraints

Generated Code Requirements

Generated extraction functions must:

  • Have exact signature: def extract_data(html_content):
  • Return a dict (validated against schema afterward)
  • Only import from allowed modules (stdlib + requests + bs4 + pydantic)
  • NOT import lxml or system modules (os, subprocess, sys, etc.)

Execution

  • 30-second timeout per extraction
  • Runs in isolated namespace
  • Returns data as dict (not BaseModel instance)

See Also

  • CLAUDE.md - Development guide for contributors

License

See LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hikugen-0.1.0.tar.gz (28.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hikugen-0.1.0-py3-none-any.whl (17.8 kB view details)

Uploaded Python 3

File details

Details for the file hikugen-0.1.0.tar.gz.

File metadata

  • Download URL: hikugen-0.1.0.tar.gz
  • Upload date:
  • Size: 28.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.4

File hashes

Hashes for hikugen-0.1.0.tar.gz
Algorithm Hash digest
SHA256 38c5d4be4768e783c0ec1c99fdef22c074fc3fa26c9433c1f1ac3295062b5d76
MD5 737d00fcaa1acc72a114953a245e1f2f
BLAKE2b-256 47b0fc1cf0b65a8b5f3e93e62db7a9cac0d5c0b3685f60a6d3c7fa5f3862989a

See more details on using hashes here.

File details

Details for the file hikugen-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: hikugen-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 17.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.4

File hashes

Hashes for hikugen-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ac4fa1ee9d9376a0c443b125a09d3cb49848702aeb0f41ba1226bdaf6a9c93be
MD5 b6de3b3ad49de398f058407bbafe12a1
BLAKE2b-256 af9701cc434ec5a5f5860b80cfcb09696643e3b51eddaaec49cd80a3c0c07be0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page