1
resposta

Websrapping de FIIs para análise de mercado

Olá,

Quero coletar os dados de FIIS (preço e último rendimento) de vários papeis de FIIS para salvar em um DataFrame e poder fazer algumas análises desses dados.

Estou fazendo, inicialmente, com uma lista de 10 FIIS para ser mais rápido, mas a intenção é fazer um loop for com todos os papeis e salvar essas informações no DataFrame.

pip install beautifulsoup4
pip install requests

import requests
from bs4 import BeautifulSoup
import pandas as pd

fiis = ['URPR11','BARI11', 'DEVA11','REIT11', 'HCTR11', 'TORD11', 'RECR11', 'BBFI11B', 'KNSC11','KNHY11']

preco = pd.DataFrame()
ultimo_rendimento = pd.DataFrame() 

for i in fiis:
  site = (f'https://www.fundsexplorer.com.br/funds/{i}')
  html = requests.get(site).content
  dados = BeautifulSoup(html,'html.parser')
  preco = dados.find('span', class_ = 'price')
   print(i)
  print(preco.text[19:])
  ultimo_rendimento = dados.find_all('span', class_ = 'indicator-value')
  ultimo_rendimento.append(ultimo_rendimento)
 print(ultimo_rendimento[1].text[17:])

Consegui imprimir os dados que preciso, porém não consegui salvar os dados em um DataFrame. Como poderia finalizar esse meu projeto?

1 resposta

Olá, Maria! Tudo bem com você? Espero que sim!

Desde já peço desculpa pela demora em respondê-la.

Para salvar os dados em um DataFrame, você pode criar um dicionário onde as chaves são os nomes das colunas e os valores são listas contendo os dados para cada FII. Depois, você pode usar a função pd.DataFrame() para converter esse dicionário em um DataFrame.

Aqui está um exemplo de como você pode fazer isso:

import requests
from bs4 import BeautifulSoup
import pandas as pd

fiis = ['URPR11','BARI11', 'DEVA11','REIT11', 'HCTR11', 'TORD11', 'RECR11', 'BBFI11B', 'KNSC11','KNHY11']

# Criação de listas vazias para armazenar os dados
fiis_lista = []
preco_lista = []
ultimo_rendimento_lista = []

for i in fiis:
  site = (f'https://www.fundsexplorer.com.br/funds/{i}')
  html = requests.get(site).content
  dados = BeautifulSoup(html,'html.parser')
  preco = dados.find('span', class_ = 'price')
  ultimo_rendimento = dados.find_all('span', class_ = 'indicator-value')
  
  # Adicionando os dados às respectivas listas
  fiis_lista.append(i)
  preco_lista.append(preco.text[19:])
  ultimo_rendimento_lista.append(ultimo_rendimento[1].text[17:])

# Criação de um dicionário para armazenar os dados
dados_dict = {'FII': fiis_lista, 'Preço': preco_lista, 'Último Rendimento': ultimo_rendimento_lista}

# Conversão do dicionário para um DataFrame
df = pd.DataFrame(dados_dict)

print(df)

Nesse código, criamos três listas: fiis_lista, preco_lista e ultimo_rendimento_lista. Dentro do loop, adicionamos os dados coletados a essas listas. Depois do loop, criamos um dicionário dados_dict onde as chaves são os nomes das colunas e os valores são as listas que contêm os dados. Finalmente, usamos pd.DataFrame(dados_dict) para converter o dicionário em um DataFrame.

Espero que isso te ajude a finalizar seu projeto. Lembre-se, pode ser necessário ajustar o código para atender às suas necessidades específicas, como tratar possíveis erros ou inconsistências nos dados coletados.

Espero ter ajudado e bons estudos!

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