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

Dúvida get_text()

Pessoal estou praticando os ensinamentos desse cursos porém estou tendo dificuldade para obter os dados de um determinado anúncio.

Fiz alguns procedimentos em uma página de venda de brinquedos e obtive o seguinte código

<a class="productIdInRel image js--lazyload has--lazyload" data-id="100174265" data-nome="Quebra-Cabeça - 1000 Peças - Constelações - Grow" data-noscript="" data-preco="R$ 59,99" href="https://www.rihappy.com.br/quebra-cabeca-1000-pecas-constelacoes-grow/p" rel="100174265" title="Quebra-Cabeça - 1000 Peças - Constelações - Grow">
<noscript><img alt="quebra-cabeca-1000-pecas-constelacoes-grow-3743_Frente" height="280" id="" src="https://rihappy.vteximg.com.br/arquivos/ids/396390-240-280/quebra-cabeca-1000-pecas-constelacoes-grow-3743_Frente.jpg?v=637032026010330000" width="240"/></noscript>
</a>

Nesse objeto, chamado anuncio, apliquei anuncio.find('a', {'class' : 'productIdInRel'}).getText() Mas ao invés de receber os dados relevantes do produto, obtenho o seguinte resultado:

'\n\n'
4 respostas

Olá Miguel, peço desculpas pela demora no retorno, mas vou tentar ajudar com a dúvida.

O getText() não vai retornar tags, apenas o texto visível que apareceria ao abir o site no navegador.

Para selecionar o conteúdo da tag a você vai ter que usar o contents (retorna uma lista com os valores encontrados) ou ser mais específico para selecionar exatemente a tag interna desejada:

# Selecionando a tag img com find
anuncio.find('a', {'class' : 'productIdInRel'}).find('img')

# Selecionando a tag img diretamente
anuncio.find('a', {'class' : 'productIdInRel'}).img

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

Oi Lucas, infelizmente ainda continuo sem obter o resultado que desejo. Fazendo esse procedimento que você recomendou, anuncio.find('a', {'class' : 'productIdInRel'}).img, estou obtendo:

<img alt="quebra-cabeca-dinossauros-1000-pecas-grow-2660_frente" height="280" id="" src="https://rihappy.vteximg.com.br/arquivos/ids/378571-240-280/quebra-cabeca-dinossauros-1000-pecas-grow-2660_frente.jpg?v=636906858907330000" width="240"/>

e ela não inclui a informação que eu desejo que é o preço.

Talvez eu não esteja entendo o raciocínio que você está propondo, realmente nao tenho experiência nessa área, se puder me ajudar agradeço.

solução!

Ah, entendi melhor agora, o que você quer é pegar o preço.

Olhando no código que você selecionou dá pra ver que o preço não aparece internamente da tag a, provavelmente o preço fica em outra tag ou é inserido por meio de javascript.

Por sorte o preço é incluído como um atributo na tag a (muito provavelmente para ser lido pelo javascript), mais exatamente no atributo data-preco, assim pode ser acessado com esse código:

# Primeiro é selecionada a tag que queremos,
# e então é acessado o atributo dessa tag
soup.find('a', {'class' : 'productIdInRel'})['data-preco']

Acredito que seja isso que você precisa, recomendo apenas fazer uma verificação se o atributo data-preco existe na tag selecionada para evitar erros no código caso apareça uma tag productIdInRel que não tenha esse atributo, mas isso é algo extra apenas caso não "confie" na presença dos dados do site:

link = soup.find('a', {'class' : 'productIdInRel'})
if link.has_attr('data-preco'):
    print(link['data-preco'])
else:
    print('Preço não encontrado')

Caso ainda não seja isso que você precisa explica novamente por favor, e compartilha o resto do seu código junto do link do site que você está acessando.

Agora funcionou, obrigado pela atenção !