[버그수정]

This commit is contained in:
LASTA_DEV01\lasta
2026-05-11 13:02:11 +09:00
parent 5935c6cbe8
commit 3663734781
13 changed files with 686 additions and 135 deletions

View File

@@ -11,6 +11,7 @@ from crawler_platform.app.config.loader import load_project_config
from crawler_platform.app.core.crawler.discovery import discover_links
from crawler_platform.app.core.crawler.fetchers import RobotsPolicy, make_fetcher
from crawler_platform.app.core.crawler.pipeline import CrawlPipeline
from crawler_platform.app.core.crawler.site_crawler import SiteCrawler
from crawler_platform.app.core.database import models
from crawler_platform.app.core.database.repository import KnowledgeRepository
from crawler_platform.app.core.database.session import session_scope
@@ -30,6 +31,13 @@ class CrawlRequest(BaseModel):
extractor_base_url: str | None = None
class SiteCrawlRequest(CrawlRequest):
max_depth: int = 2
max_pages: int = 50
same_domain_only: bool = True
analyze_page_types: list[str] = Field(default_factory=lambda: ["product", "brand", "review"])
class DiscoverRequest(BaseModel):
config_path: str
source_name: str
@@ -158,6 +166,34 @@ def register_routes(app, database_url: str) -> None:
raise HTTPException(status_code=400, detail=str(exc)) from exc
return {"page_id": result.page_id, "claim_count": result.claim_count, "entity_count": result.entity_count}
@app.post("/crawl-site")
def crawl_site(request: SiteCrawlRequest):
config = load_project_config(request.config_path)
with session_scope(database_url) as session:
repo = KnowledgeRepository(session)
crawler = SiteCrawler(
repo,
extractor_for_domain(
config.domain,
provider=request.extractor_provider,
model=request.extractor_model,
base_url=request.extractor_base_url,
),
)
try:
result = crawler.crawl_site(
config,
request.source_name,
request.url,
max_depth=max(request.max_depth, 0),
max_pages=max(min(request.max_pages, 500), 1),
same_domain_only=request.same_domain_only,
analyze_page_types=set(request.analyze_page_types),
)
except Exception as exc:
raise HTTPException(status_code=400, detail=str(exc)) from exc
return asdict(result)
@app.post("/discover")
def discover(request: DiscoverRequest):
config = load_project_config(request.config_path)