import peter
This commit is contained in:
50
seek/content_base.py
Normal file
50
seek/content_base.py
Normal 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()
|
||||
Reference in New Issue
Block a user