import peter

This commit is contained in:
konjacpotato
2025-11-12 20:42:16 +08:00
commit 8c1a740f0b
147 changed files with 2763 additions and 0 deletions

50
seek/content_base.py Normal file
View File

@ -0,0 +1,50 @@
from abc import ABC, abstractmethod
from DrissionPage import Chromium, SessionPage, ChromiumOptions
from database.database import get_session
from database.tnews.crud import update_news_by_id
from database.tnews.model import TNews
from log.log_manager import log
class ContentBase(ABC):
def __init__(self, news: TNews):
self.news = news
self.session = None # 初始化为 None
self.browser = None # 初始化为 None
if news.is_static:
self.session = SessionPage()
self.session.get(news.url)
else:
co = ChromiumOptions()
self.browser = Chromium(addr_or_opts=co)
# self.tab = self.browser.latest_tab
self.tab = self.browser.new_tab()
self.tab.get(news.url)
@abstractmethod
def get_content(self):
"""Abstract method to fetch news from a specific source."""
pass
def get_occurrence_date(self):
return None
def do_seek_task(self):
"""Saves the list of news to the database if the URL does not already exist."""
self.news.content = self.get_content()
if self.news.occurrence_date is None:
self.news.occurrence_date = self.get_occurrence_date()
with get_session() as db:
update_news_by_id(db, self.news)
log(f'successful fetch {self.news.title} news content into the database.')
def finish(self):
"""Closes the browser and session."""
if self.tab:
self.tab.close()
# if self.browser:
# self.browser.quit()
if self.session:
self.session.close()