2
respostas

Extrair dados de um TD específico

Olá pessoal,

Estou extraindo os dados de empresas da B3 através do site do fundamentus, consegui chegar na parte onde o dado fica:

tr class="par"><td><a href="detalhes.php?papel=ABCB3">ABCB3</a></td><td>ABC Brasil</td><td>BANCO ABC BRASIL S/A</td></tr>

Como consigo acessar separadamente a td 1, 2 e 3?

Código completo:


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

url = 'https://www.fundamentus.com.br/detalhes.php?papel='
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'}
req = Request(url, headers = headers)
response = urlopen(req)
html = response.read().decode('ISO-8859-1')
html = " ".join(html.split()).replace('> <', '><')
soup = BeautifulSoup(html,'html.parser')

try:
    print("Success")

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

except URLError as e:
    print(e.reason)

coleta = soup.findAll(class_="par")

Consegui extrair os dados da TD 1 através de uma função:

coleta = soup.findAll(class_="par")
ticker = []

def coleta_ticker():
    i = 0
    while i < len(coleta):
        coleta_2 = coleta[i].td.a.get_text()
        ticker.extend([coleta_2])
        i += 1
coleta_ticker()      

Ai ficou faltando as td 2 e 3 que são o nome e razão social da empresa.

2 respostas

Olá Arthur, tenta o seguinte

tabela = []

for box in coleta:
    dic = {}
    dic['Papel'] = box.findAll('td')[0].get_text()
    dic['Nome comercial'] =box.findAll('td')[1].get_text()
    dic['Razão Social'] = box.findAll('td')[2].get_text()

    tabela.append(dic)

O Dicionário não é necessário, na verdade existe varias maneiras de se pegar, me diz se ele vai dar problemas no pandas.

Opa Henrique, Deu certinho, muito obrigado! Abs.