Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Bug] Erro: tabela não existente?

Mesmo alterando o código para

## ind = pd.concat([fundamentus.get_papel(papel)[['Setor', 'Cotacao', 'Min_52_sem', 'Max_52_sem', 'Valor_de_mercado', 'Nro_Acoes', 'Patrim_Liq','Receita_Liquida_12m','Receita_Liquida_3m', 'Lucro_Liquido_12m', 'Lucro_Liquido_3m']] for papel in carteira_fund])

permanece a mensagem de erro:

ValueError                                Traceback (most recent call last)
/tmp/ipython-input-140024316.py in <cell line: 0>()
      1 # Criando um df com algumas infos da carteira
----> 2 ind = fundamentus.get_papel(carteira_fund)[['Setor', 'Cotacao', 'Min_52_sem', 'Max_52_sem', 'Valor_de_mercado',
      3                                             'Nro_Acoes', 'Patrim_Liq','Receita_Liquida_12m','Receita_Liquida_3m',
      4                                             'Lucro_Liquido_12m', 'Lucro_Liquido_3m']]
      5 ind.head(3)

8 frames
/usr/local/lib/python3.12/dist-packages/pandas/io/html.py in _parse_tables(self, document, match, attrs)
    596         tables = document.find_all(element_name, attrs=attrs)
    597         if not tables:
--> 598             raise ValueError("No tables found")
    599 
    600         result = []

ValueError: No tables found
1 resposta
solução!

Oi Amanda, tudo bem?

Rodei o código aqui e obtive o mesmo erro. E a causa não está no código em si, e sim em uma mudança recente do mercado somada ao funcionamento da biblioteca fundamentus.

Alguns tickers passaram por alteração, e isso afeta diretamente a busca no Fundamentus. A ação ELET3 deixou de existir: a Eletrobras mudou o nome para Axia Energia e seus tickers foram atualizados. O antigo ELET3 agora é AXIA3. Ao acessar manualmente:

https://www.fundamentus.com.br/detalhes.php?papel=ELET3

vai ver que a página não traz mais nenhuma tabela. Ela apenas exibe uma mensagem avisando da mudança de código. Como não existe nenhuma <table> para o pandas.read_html capturar, a biblioteca lança o erro ValueError: No tables found.

Para resolver, basta atualizar a sua carteira com o novo ticker:

Código atualizado:

carteira_fund = ["ABEV3", "B3SA3", "AXIA3", "GGBR4", "ITSA4",
                 "PETR4", "RENT3", "SUZB3", "VALE3", "WEGE3"]

Depois disso, o código funciona normalmente:

ind = pd.concat([
    fundamentus.get_papel(papel)[[
        'Setor', 'Cotacao', 'Min_52_sem', 'Max_52_sem',
        'Valor_de_mercado', 'Nro_Acoes', 'Patrim_Liq',
        'Receita_Liquida_12m', 'Receita_Liquida_3m',
        'Lucro_Liquido_12m', 'Lucro_Liquido_3m'
    ]]
    for papel in carteira_fund
])

ind.head(3)

Espero ter ajudado.

Qualquer dúvida que surgir, compartilhe no fórum. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!