7455d7e426
130 issues auto-fixed (import ordering, UP045/UP006 type annotations), 33 issues manually fixed (E712/E501/E402/E722 + N818 rename + per-file wechat ignore for N8xx naming conventions). All 33 tests pass.
37 lines
1.1 KiB
Python
37 lines
1.1 KiB
Python
|
|
from app.crawler.base import BaseSpider, CrawlResult
|
|
|
|
|
|
class CrawlService:
|
|
def __init__(self):
|
|
self.spiders: dict[str, BaseSpider] = {}
|
|
|
|
def register(self, spider: BaseSpider):
|
|
self.spiders[spider.name] = spider
|
|
|
|
async def run_all(self) -> list[CrawlResult]:
|
|
results = []
|
|
for name, spider in self.spiders.items():
|
|
result = await spider.crawl()
|
|
results.append(result)
|
|
return results
|
|
|
|
async def run_spider(self, name: str, **kwargs) -> list[CrawlResult]:
|
|
spider = self.spiders.get(name)
|
|
if spider is None:
|
|
return [CrawlResult(
|
|
source_code=name, source_name=name,
|
|
error_message=f"Spider not found: {name}"
|
|
)]
|
|
result = await spider.crawl(**kwargs)
|
|
return [result]
|
|
|
|
def get_spider_names(self) -> list[str]:
|
|
return list(self.spiders.keys())
|
|
|
|
def get_pipeline_config(self, name: str):
|
|
spider = self.spiders.get(name)
|
|
if spider:
|
|
return spider.get_pipeline_config()
|
|
return None
|