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

Posição de Uma Lista de Valores

Boa noite!

Estou tentando retornar um dado da página com o find. Porém, o find retorna o primeiro valor do filtro. Porém, preciso pegar o segundo. Coloquei o código completo abaixo. Eu preciso que o trecho cards['Valor'] = soup.find("strong", class_="value d-block lh-4 fs-4 fw-700").get_text() retorne o segundo valor de uma lista que contem vários valores. Podem me ajudar?

from urllib.request import Request, urlopen, urlretrieve
from urllib.error import URLError, HTTPError
from bs4 import BeautifulSoup
import pandas as pd

url = 'https://statusinvest.com.br/acoes/itsa4'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'}

try:
    req = Request(url, headers = headers)
    response = urlopen(req)

except HTTPError as e:
    print(e.status, e.reason)

except URLError as e:
    print(e.reason)

html = response.read().decode('utf-8')
soup = BeautifulSoup(html, 'html.parser')

card = []
cards = {}

cards['Sigla'] = soup.find("h1", class_="lh-4").get_text()
cards['Valor'] = soup.find("strong", class_="value d-block lh-4 fs-4 fw-700").get_text()
cards['DY'] = soup.find("strong", class_="value d-block lh-4 fs-4 fw-700").get_text() 
card.append(cards)

card
2 respostas
solução!

Olá Henrique, tudo bem? Espero que sim!

Desculpe pela demora em retornar.

Você pode usar o método find_all(). Esse método retorna uma lista com todos os valores com aquela tag html. Feito isso você pode acessar através do índice da lista. Como a lista começa com índice 0, você deve passar como parâmetro o íncide 1 para retornar o segundo elemento. O código ficará dessa forma:

cards['Valor'] = soup.find_all("strong", class_="value d-block lh-4 fs-4 fw-700")[1].get_text()

O resultado que obtive foi:

[{'Sigla': 'ITSA4 - ITAUSA', 'Valor': '12,23', 'DY': '2,71%'}]

Bons estudos!

João Vitor, muito obrigado man! Que coisa mais linda o BeautifulSoup :D