63 lines
2.4 KiB
Python
63 lines
2.4 KiB
Python
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 House(SeekBase):
|
|
def __init__(self, information_source: TInformationSource):
|
|
super().__init__(information_source)
|
|
|
|
def get_news(self):
|
|
news_result = []
|
|
self.tab.wait.ele_displayed('.FeedList')
|
|
_news_list = self.tab.s_ele('.cbd-recommend').s_eles('.FeedList')
|
|
for _news in _news_list:
|
|
try:
|
|
rs_news = TNews()
|
|
rs_news.title = _news.s_ele('.item-text-content-title').text
|
|
link = _news.s_ele('tag:a').link
|
|
rs_news.url = link.split('?')[0]
|
|
rs_news.summary = _news.s_ele('.item-text-content-description').text
|
|
rs_news.occurrence_date = process_time(_news.s_ele('.extra-info-item').text)
|
|
rs_news.source = self.information_source.title
|
|
news_result.append(rs_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:
|
|
instance = House(information_source)
|
|
news_list = instance.get_news()
|
|
instance.finish()
|
|
return news_list
|
|
|
|
|
|
def news_task(information_source: TInformationSource):
|
|
logger.info(f'{information_source.title} news_task start execute at {datetime.datetime.now()}', )
|
|
instance = House(information_source)
|
|
instance.do_seek_task()
|
|
instance.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 = False
|
|
information_source_.url = 'https://sz.focus.cn/zixun/'
|
|
information_source_.title = '房产_搜狐焦点'
|
|
news_task(information_source_)
|
|
# news_list_ = get_news(information_source_)
|
|
# for news in news_list_:
|
|
# print(news)
|
|
logger.info('Done.')
|