[버그수정]
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user