import datetime from DrissionPage.errors import ElementNotFoundError from database.tinformationsource.model import TInformationSource from database.tnews.model import TNews from log.log_manager import logger from seek.seek_base import SeekBase from utils.time_utils import process_time class OfweekComAi(SeekBase): def __init__(self, information_source: TInformationSource): super().__init__(information_source) def get_news(self): news_result = [] _news_list = self.session.s_ele('.main-cont-left w640').s_eles('.^top-title') for _news in _news_list: try: __news = TNews() __news.title = _news.s_ele('tag:a').text __news.url = _news.s_ele('tag:a').link _time = _news.parent().s_eles('tag:span')[4].text __news.occurrence_date = process_time(_time) __news.source = self.information_source.title news_result.append(__news) except ElementNotFoundError as e: logger.error(f"ElementNotFoundError: {e} - Failed to find element in news item.") except Exception as e: logger.error(f'Unexpected error occurred: {e}') return news_result def get_news(information_source: TInformationSource) -> list: ofweek_com_ai = OfweekComAi(information_source) news_list = ofweek_com_ai.get_news() ofweek_com_ai.finish() return news_list def news_task(information_source: TInformationSource): logger.info(f'{information_source.title} news_task start execute at {datetime.datetime.now()}', ) ofweek_com_ai = OfweekComAi(information_source) ofweek_com_ai.do_seek_task() ofweek_com_ai.finish() logger.info(f'{information_source.title} news_task end execute at {datetime.datetime.now()}') if __name__ == '__main__': logger.info('This module is not for direct call!') information_source_ = TInformationSource() information_source_.is_static = True information_source_.url = 'https://www.ofweek.com/ai/' information_source_.title = '人工智能_维科网' news_task(information_source_) # news_list_ = get_news(information_source_) # for news in news_list_: # print(news) logger.info('Done.')