def dividends_conomy(ticker: str): """Возвращает Series с дивидендами упорядоченными по возрастанию даты закрытия реестра Parameters ---------- ticker Тикер Returns ------- pandas.Series Строки - даты закрытия реестра упорядоченные по возрастанию Значения - дивиденды """ table = parser.HTMLTableParser(get_html(ticker), TABLE_INDEX) columns = [DATE_COLUMN] if is_common(ticker): columns.append(COMMON_COLUMN) else: columns.append(PREFERRED_COLUMN) df = table.make_df(columns, HEADER_SIZE) df.dropna(inplace=True) df.columns = [DATE, ticker] df.set_index(DATE, inplace=True) df.sort_index(inplace=True) return df[ticker]
def test_make_df_validate(): table = parser.HTMLTableParser(HTML, 1) columns = [ parser.DataColumn(i, {0: RESULT1[0][i]}, parser.div_parser) for i in range(5) ] df = pd.DataFrame(DF_DATA[1:]) assert df.equals(table.make_df(columns, 1))
def dividends_smart_lab(): """ Возвращает ожидаемые дивиденды с сайта https://smart-lab.ru/ Returns ------- pandas.DataFrame Строки - тикеры столбцы - даты закрытия и дивиденды """ html = dohod_ru.get_html(URL) table = parser.HTMLTableParser(html, TABLE_INDEX) columns = [TICKER_COLUMN, DATE_COLUMN, DIVIDENDS_COLUMN] df = table.make_df(columns, HEADER_SIZE, FOOTER_SIZE) df.columns = [TICKER, DATE, DIVIDENDS] return df.set_index(DATE)
def dividends_dohod(ticker: str) -> pd.Series: """Возвращает Series с дивидендами упорядоченными по возрастанию даты закрытия реестра Parameters ---------- ticker Тикер Returns ------- pandas.Series Строки - даты закрытия реестра упорядоченные по возрастанию Значения - дивиденды """ url = make_url(ticker) html = get_html(url) table = parser.HTMLTableParser(html, TABLE_INDEX) columns = [DATE_COLUMN, DIVIDENDS_COLUMN] df = table.make_df(columns, HEADER_SIZE) df.columns = [DATE, ticker] df.set_index(DATE, inplace=True) df.sort_index(inplace=True) return df[ticker]
def test_make_df_with_parsed_data(): table = parser.HTMLTableParser(HTML, 1) columns = [parser.DataColumn(i, {}, parser.div_parser) for i in range(5)] df = pd.DataFrame(DF_DATA) assert df.equals(table.make_df(columns))
def test_make_df(): table = parser.HTMLTableParser(HTML, 1) columns = [parser.DataColumn(i, {}, lambda x: x) for i in range(5)] df = pd.DataFrame(RESULT1) assert df.equals(table.make_df(columns))
def test_fast_second_parse(): table = parser.HTMLTableParser(HTML, 1) assert table.parsed_table == RESULT1 assert table.parsed_table == RESULT1
def test_no_table(): with pytest.raises(IndexError) as error: parser.HTMLTableParser(HTML, 2) assert error.value == 'На странице нет таблицы 2'
def test_parse_no_tbody(): table = parser.HTMLTableParser(HTML, 1) assert table.parsed_table == RESULT1
def test_make_df_fail_validate(): table = parser.HTMLTableParser(HTML, 1) columns = [parser.DataColumn(1, {0: '2.2', 1: 'test'}, lambda x: x)] with pytest.raises(ValueError) as error: table.make_df(columns) assert error.value == 'Значение в таблице "5.55 (сов)" - должно быть "test"'
def test_make_df_drop(): table = parser.HTMLTableParser(HTML, 1) columns = [parser.DataColumn(i, {}, parser.div_parser) for i in range(5)] df = pd.DataFrame(DF_DATA[1:2]) assert df.equals(table.make_df(columns, 1, 1))