Source code for kabupy.kabuyoho.report_news

"""Scraper for https://kabuyoho.jp/sp/reportDps"""
from __future__ import annotations

import functools
import logging
import re
import time
import urllib.parse
from datetime import datetime

from ..base import Website
from ..constants import TIME_SLEEP
from ..errors import ElementNotFoundError
from .kabuyoho_webpage import KabuyohoWebpage

logger = logging.getLogger(__name__)


[docs] class ReportNews(KabuyohoWebpage): """Report news page object.""" def __init__(self, website: Website, security_code: str | int) -> None: self.website = website self.security_code = str(security_code) self.url = urllib.parse.urljoin(self.website.url, f"sp/reportNews?bcode={self.security_code}") # No need to call super().__init__() because this class does not have any webpage property. super().__init__(load=False) @functools.cached_property def market_report(self) -> KabuyohoNewsWebpage: """Market report page in a report news page.""" return KabuyohoNewsWebpage(self.website, self.security_code, 1) @functools.cached_property def flash_report(self) -> KabuyohoNewsWebpage: """Flash report page in a report news page.""" return KabuyohoNewsWebpage(self.website, self.security_code, 2) @functools.cached_property def analyst_prediction(self) -> KabuyohoNewsWebpage: """Analyst prediction page in a report news page.""" return KabuyohoNewsWebpage(self.website, self.security_code, 3) @functools.cached_property def analyst_evaluation(self) -> KabuyohoNewsWebpage: """Analyst evaluation page in a report news page.""" return KabuyohoNewsWebpage(self.website, self.security_code, 4)
[docs] class KabuyohoNewsWebpage(KabuyohoWebpage): """Kabuyoho news page object.""" def __init__(self, website: Website, security_code: str | int, category: int) -> None: self.website = website self.security_code = str(security_code) self.category = category self.url = urllib.parse.urljoin( self.website.url, f"sp/reportNews?bcode={self.security_code}&cat={self.category}" ) super().__init__()
[docs] def get_max_page(self) -> int: """Max page number.""" try: page = self.select_one("div.pager > ul > li.interval + li") except ElementNotFoundError: return 1 return int(re.sub(r"[\D]", "", page.text))