Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Dúvida read_html()

Fala galera, tudo bem?

Estou com uma dúvida da função read_html().

Li na documentação que ela procura todas as tag

do código html e as retornam.

Porém, quando rodei meu código ela não trouxe todas. Queria saber se alguém poderia me dizer o por quê.

Ela não retornou a tabela que aparece no link que enviei: Link

url_ipca = 'http://www.ibge.gov.br/estatisticas/economicas/precos-e-custos/9256-indice-nacional-de-precos-ao-consumidor-amplo.html?=&t=resultados'
ipca_table = pd.read_html(url_ipca)
ipca_table

Resultado:

[          Mês        Período
 0     Janeiro  28/12 - 28/01
 1   Fevereiro  29/01 - 02/03
 2       Março  03/03 - 30/03
 3       Abril  31/03 - 29/04
 4        Maio  30/04 - 28/05
 5       Junho  29/05 - 30/06
 6       Julho  01/07 - 28/07
 7      Agosto  29/07 - 27/08
 8    Setembro  28/08 - 28/09
 9     Outubro  29/09 - 27/10
 10   Novembro  28/10 - 27/11
 11   Dezembro  28/11 - 29/12,
    Áreas Pesquisadas   Peso       
    Áreas Pesquisadas  INPC1  IPCA2
 0             BRASIL  10000  10000
 1         Rio Branco     72     51
 2              Belém    695    394
 3           São Luís    347    162
 4          Fortaleza    516    323
 5             Recife    560    392
 6            Aracaju    129    103
 7           Salvador    792    599
 8     Belo Horizonte   1035    969
 9            Vitória    191    186
 10    Rio de Janeiro    938    943
 11         São Paulo   2460   3228
 12          Curitiba    737    809
 13      Porto Alegre    715    861
 14      Campo Grande    173    157
 15           Goiânia    443    417
 16          Brasília    197    406,
    Áreas Pesquisadas   Peso
 0             BRASIL  10000
 1              Belém    446
 2          Fortaleza    388
 3             Recife    471
 4           Salvador    719
 5     Belo Horizonte   1004
 6     Rio de Janeiro    977
 7          São Paulo   3345
 8           Curitiba    809
 9       Porto Alegre    861
 10           Goiânia    496
 11          Brasília    484,
                                 Operação estatística Previsão de divulgação
 0  Índice Nacional de Preços ao Consumidor AmploP...             10/07/2020
 1  Índice Nacional de Preços ao Consumidor AmploP...             07/08/2020
 2  Índice Nacional de Preços ao Consumidor AmploP...             09/09/2020
 3  Índice Nacional de Preços ao Consumidor AmploP...             09/10/2020
 4  Índice Nacional de Preços ao Consumidor AmploP...             06/11/2020
 5  Índice Nacional de Preços ao Consumidor AmploP...             08/12/2020
 6  Índice Nacional de Preços ao Consumidor AmploP...             12/01/2021,
   .... tem mais código
5 respostas

Olá Romeu, tudo bem!

Ao abrir a página com a tabela você pode ver que a tabela carrega um pouco depois da página, isso acontece porque a tabela está sendo carregada por javascript. Você pode até testar desativando o javascript no navegador e abrindo a página, a tabela nem aparece.

Por padrão o python não vai conseguir executar o javascript da página, para isso temos que utilizar uma ferramenta mais avançada como o selenium. Ele vai simular um navegador completo e fazer a execução do javascript.

Segue um notebook de exemplo utilizando o selenium:

https://colab.research.google.com/drive/1jqSEhdAM_5gnWW1lAca-ie303hIzDyPV?usp=sharing

Espero ter ajudado, qualquer dúvida é só falar!

Fala Lucas!

Eu estava lendo sobre o Selenium e consegui configurar aqui e testei, porém estava vindo o mesmo resultado.

Testei agora com o seu código e uma hora veia com a tabela que queria e outra não.

Será que isso se deve pela resposta do script e a velocidade que a página abre?

Tem como setar para o selenium esperar ela carregar toda?

solução!

Verdade Romeu, executei o código mais algumas vezes hoje e aconteceu de não carregar a tabela em alguns casos. Como você já suspeitou é um problema relacionado ao tempo que leva para o script carregar a tabela.

Mas dá para informar ao selenium para esperar um tempo determinado para permitir que toda a página carregue:

# Define uma espera de 10 segundos para a garantir que toda a página carregue
driver.implicitly_wait(10)

# Acessando a página através do driver do selenuim
url_ipca = 'http://www.ibge.gov.br/estatisticas/economicas/precos-e-custos/9256-indice-nacional-de-precos-ao-consumidor-amplo.html?=&t=resultados'
driver.get(url_ipca)

Depois de vários testes com 10 segundos de espera consegui acessar a tabela 100% das vezes, mas você pode testar com menos tempo ou mais tempo se ainda não considerar esse tempo confiável.

Atualizei também o notebook com o código de exemplo:

https://colab.research.google.com/drive/1jqSEhdAM_5gnWW1lAca-ie303hIzDyPV?usp=sharing

Lucassss

Muito obrigado pela força aí!

Você é dez!

Sem problemas Romeu, qualquer coisa é só falar!

Bons estudos!