Criando Scrapping em Python com a ajuda do ChatGPT

Paulo Henrique
7 min readFeb 17, 2023

Um scrapping que calcula o earning yield de uma ação, e lista em ordem decrescente para todas as ações do Ibovespa.

ChatGPT + Python

Motivação

Gosto de estudar sobre investimentos e entender como tomar uma decisão sobre onde investir (mesmo que não tenha grana), aliado com uma outra paixão por criar scrapings, então decidi criar um scrapping pensando como um usuário leigo poderia fazer utilizando o cara do momento, o ChatGPT.

De forma resumida, o ChatGPT é uma inteligência artificial que atua como um buscador na internet de forma mais precisa e inteligente nos seus resultados.

Tenho uma publicação criando um scraping utilizando Scrapy que você pode consultar aqui:
https://medium.com/@wolking/extraindo-dados-com-scrapy-e-salvando-em-um-banco-de-dados-sqlite-4be0954e473f
e uma outra iniciativa para criar um aplicativo nativo em Android voltado para acompanhar o mercado e criar alertas do preço médio de uma ação que você pode conhecer mais e acompanhar aqui:
https://github.com/paulowolking/investing-android

Talvez você não saiba muito sobre ações, fundos imobiliários e mercado de valores em geral, então vou resumir sobre qual informação iremos analisar.

As ações listadas em bolsa de valores possuem indicadores que os analistas de investimentos utilizam para avaliar como anda a saúde da empresa e se vale a pena investir nela. Um indicador importante e que é utilizado em muitas estratégias de investimentos, é avaliar o earning yield de uma ação, um indicador que diz o quanto uma ação dá de retorno para o investidor.

Você pode conhecer mais sobre earning yield neste link: https://investidorsardinha.r7.com/aprender/earning-yield/

O que vou te mostrar?

Não quero te ensinar sobre investimentos e nem mesmo te dar dicas de investimento. Aqui é um experimento de como você pode utilizar o ChatGPT sendo uma pessoa leiga em programação, e construir scripts para te ajudar no dia a dia.

O que nosso script irá fazer?

Iremos criar um script em Python que calcule o earning yield de todas as ações listadas na bolsa de valores, e depois exibir essas ações em ordem decrescente.

Como efeito apenas educacional, vou utilizar um site que gosto bastante e que traz esse indicadores pra gente para criar o nosso scrapping, o status invest. Mas você pode usar qualquer outro site, afinal quem irá criar o script não seremos nós, mas sim o ChatGPT.

https://statusinvest.com.br

Como calcular o earning yield?

O ChatGPT responde essa pra gente.

ChatGPT informando como calcular o earning yield de uma ação

Vamos lá então

  1. Primeiro vamos instalar em nosso computador o python já que iremos utilizar ele como linguagem de programação. Você pode baixar um instalável aqui: https://www.python.org/downloads, não esqueça de marcar a opção de adicionar o python em sua variável de ambiente (se estiver utilizando windows).
  2. Vamos analisar como a informação está estruturada no site verificando o html da página, como no link: https://statusinvest.com.br/acoes/petr4. Iremos precisar aqui de apenas duas informações, o LPA que indica o lucro por ação e também o valor da ação.

Para conseguir o LPA, temos esse HTML.

E para conseguir o valor da ação, temos esse HTML.

3. Agora vamos pedir para o ChatGPT criar um script que pegue o LPA (lucro por ação) com base no HTML que temos.

ChatGPT informando como pegar um strong em uma div

4. Já temos o LPA, agora só falta a gente conseguir o valor da ação. Então vamos pedir ao ChatGPT com base no HTML do valor da ação.

ChatGPT informando como pegar um strong em uma div

5. Repare que ele fala e importa duas bibliotecas importantes para o nosso script, a requests e a BeautifulSoup, e com isso precisamos instalá-las com a ajuda do pip , um gerenciador de pacotes para o python. Digitando os seguintes comandos no terminal.

pip install requests
pip install beautifulsoup4

Agrupando os resultados

Agora pra finalizar precisamos pegar todos os códigos do Ibovespa e calcular o earning yield para cada ação, para depois ordenar pelo valor de cada uma em ordem decrescente.

Como iremos acessar cada ação pelo seu código, então precisamos ter as nossas ações em uma variável e criar um loop de acesso ao site.

# Código das ações para ser acessado a página
# Aqui você coloca todas as ações que irão fazer parte do ranking
stocks = ["TRPL4","VALE3","PETR4"]

# Array que salva o resultado de cada ação com o seu earning yield
earnigs_yield = []

# Cabeçalhos
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
}

for stock in stocks:
# Define a URL do site a ser visitado
url = 'https://statusinvest.com.br/acoes/' + stock

Após extrair a informação, precisamos calcular o earning yield.

# Calcula Earning Yield
ey = (float(valor_lucratividade.replace(',','.')) / float(valor_ativo.replace(',','.'))) * 100

# Arredonda o resultado do earning yield
round_ey = round(ey,2)

Vamos agora criar uma tupla com o nome da ação e o resultado do cálculo e depois adicionar em nosso array declarado lá acima.

# Cria uma tupla com o nome da ação e o seu earning yield
tupla = (stock, round_ey)

# Salva o resultado em nosso array declarado lá acima
earnigs_yield.append(tupla)

Para exibir o resultado precisamos somente ordenar de forma decrescente pelo segundo valor da tupla (corresponde ao earning yield) para depois exibir o resultado.

# ordenando o nosso array
earnigs_yield.sort(key=lambda a: a[1], reverse=True)

# Exibindo o resultado ordenado de forma decrescente pelo earning yield
for stock in earnigs_yield:
print(stock[0] + ": " + str(stock[1]))

Concluindo

Temos então o nosso script completo após fazer algumas pequenas mudanças para realizar o cálculo do earning yield, ordenar e depois exibir o resultado.

import requests
from bs4 import BeautifulSoup

# Código das ações para ser acessado a página
stocks = ["TRPL4","VALE3","PETR4"]

# Array que salva o resultado de cada ação com o seu earning yield
earnigs_yield = []

# Cabeçalhos
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
}

for stock in stocks:
# Define a URL do site a ser visitado
url = 'https://statusinvest.com.br/acoes/' + stock

# Faz a requisição GET na URL
response = requests.get(url, headers=headers)

# Verifica se a requisição foi bem-sucedida
if response.status_code == 200:
# Cria um objeto BeautifulSoup com o conteúdo HTML da página
soup = BeautifulSoup(response.content, 'html.parser')

# Encontra a div com o title "Indicar se a empresa é ou não lucrativa"
div_lucratividade = soup.find('div', {'title': lambda x: x and 'Indicar se a empresa é ou não lucrativa' in x})

# Encontra o elemento strong dentro da div
strong_lucratividade = div_lucratividade.find('strong')

# Extrai o valor do elemento strong para o LPA
valor_lucratividade = strong_lucratividade.text

# Encontra a primeira div cujo atributo "title" é igual a "Valor atual do ativo"
div_valor_ativo = soup.find('div', {'title': 'Valor atual do ativo'})

# Encontra o elemento strong dentro da div
strong_valor_ativo = div_valor_ativo.find('strong')

# Extrai o valor do elemento strong para o valor da ação
valor_ativo = strong_valor_ativo.text

# Calcula Earning Yield
ey = (float(valor_lucratividade.replace(',','.')) / float(valor_ativo.replace(',','.'))) * 100

# Arredonda o resultado do earning yield
round_ey = round(ey,2)

# Exibe os resultados
print('Valor atual do ativo:', valor_ativo)
print('Valor da lucratividade:', valor_lucratividade)
print('EY:', round_ey)

# Cria uma tupla com o nome da ação e o seu earning yield
tupla = (stock, round_ey)

# Salva o resultado em nosso array declarado lá acima
earnigs_yield.append(tupla)

else:
print('Erro ao acessar o site:', response.status_code)

print('Ranking ordenado pelo earning yield')

# Exibindo o resultados ordenado de forma decrescente pelo ey
earnigs_yield.sort(key=lambda a: a[1], reverse=True)
for stock in earnigs_yield:
print(stock[0] + ": " + str(stock[1]))

Executando o nosso script

Para executar o nosso script, você deve criar um arquivo com a extensão .py (por exemplo stocks.py) e digitar o comando abaixo.

# python "nome_do_arquivo".py
python stocks.py

Com isso temos o resultado do nosso script, exibindo as 3 ações que colocamos para calcular o earning yield.

Resultado do script

Se quiser conferir o script com todas as ações listadas no Ibovespa é só verificar neste repositório.

--

--