Foto de Rafael L.
Rafael há 11 meses
Enviada pelo
Site

Web scraping utilizando selenium

estava conseguindo resolver bem uma atividade mas fiquei preso com a parte de preço do produto, coloco a tag e a classe corretamente porem, na hora que tento fazer uma lista os valores ficam desproporcionais

 

 

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time

# Inicializar o Chrome
driver = webdriver.Chrome()

# Abrir o Mercado Livre
driver.get("https://www.mercadolivre.com.br")

# Encontrar o campo de busca pelo ID e inserir o termo de pesquisa "notebook"
campo_pesquisa = driver.find_element(By.ID, "cb1-edit")
campo_pesquisa.send_keys("notebook")
campo_pesquisa.send_keys(Keys.RETURN)

# Aguardar o carregamento
time.sleep(4)

# Obter e imprimir os títulos dos produtos encontrados
produtos = driver.find_elements(By.CLASS_NAME, "ui-search-item__title")
precos = driver.find_elements(By.CLASS_NAME, "andes-money-amount__fraction")

# Verificar se ambos têm o mesmo comprimento
if len(produtos) == len(precos):
    # Combinar produtos e preços em uma lista de tuplas
    lista_combinada = [(produtos[i].text, precos[i].text) for i in range(len(precos))]
    
    # Imprimir a lista combinada
    for produto, preco in lista_combinada:
        print(f"Produto: {produto}, Preço: {preco}")
else:
    print("As listas de preços e produtos não têm o mesmo comprimento.")

# Encerrar o processo
driver.quit()

 

na hora da verificacao sempre aparece que os produtos nao tem o mesmo comprimento mas nao consegui resolver

3 respostas
Professor Jhonni S.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 11 meses
Contatar Jhonni

O problema pode estar ocorrendo porque você está verificando o comprimento das listas de preços e produtos separadamente. Embora ambas as listas devam estar sincronizadas (cada produto tem um preço correspondente), o comprimento pode ser diferente se houver algum atraso no carregamento da página ou se houver algum elemento invisível que está sendo capturado.

 

Tente isso

 

# Verificar se ambos têm o mesmo comprimento
if len(produtos) == len(precos):
    # Combinar produtos e preços em uma lista de tuplas
    lista_combinada = []
    for i in range(len(produtos)):
        # Verificar se o preço está disponível para o produto
        if i < len(precos):
            lista_combinada.append((produtos[i].text, precos[i].text))
        else:
            # Se não houver preço disponível, adicione None como preço
            lista_combinada.append((produtos[i].text, None))
    
    # Imprimir a lista combinada
    for produto, preco in lista_combinada:
        print(f"Produto: {produto}, Preço: {preco}")
else:
    print("As listas de preços e produtos não têm o mesmo comprimento.")

Um professor já respondeu

Envie você também uma dúvida grátis
Ver resposta
Tire dúvidas com IA
Resposta na hora da Minerva IA
Enviar dúvida
Professor Mauricio C.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 10 meses
Contatar Mauricio

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Inicializar o Chrome
driver = webdriver.Chrome()

try:
    # Abrir o Mercado Livre
    driver.get("https://www.mercadolivre.com.br")

    # Encontrar o campo de busca pelo ID e inserir o termo de pesquisa "notebook"
    campo_pesquisa = driver.find_element(By.ID, "cb1-edit")
    campo_pesquisa.send_keys("notebook")
    campo_pesquisa.send_keys(Keys.RETURN)

    # Esperar os resultados carregarem
    WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "ui-search-item__title")))

    # Obter os títulos dos produtos encontrados
    produtos = driver.find_elements(By.CLASS_NAME, "ui-search-item__title")
    
    # Obter os preços dos produtos encontrados
    precos = driver.find_elements(By.CLASS_NAME, "andes-money-amount__fraction")

    # Filtrar produtos e preços para garantir que temos pares completos
    lista_combinada = []
    for produto, preco in zip(produtos, precos):
        lista_combinada.append((produto.text, preco.text))

    # Imprimir a lista combinada
    for produto, preco in lista_combinada:
        print(f"Produto: {produto}, Preço: {preco}")

finally:
    # Encerrar o processo
    driver.quit()

Uso de WebDriverWait: Utiliza-se WebDriverWait para esperar até que os elementos dos produtos estejam carregados, garantindo que a página esteja pronta para a coleta de dados.

Captura de Elementos Precisos: A função zip garante que apenas pares completos de produtos e preços sejam adicionados à lista combinada.

Filtragem de Dados: A lógica de filtragem evita que listas de produtos e preços de tamanhos diferentes causem problemas.

Um professor já respondeu

Envie você também uma dúvida grátis
Ver resposta
Professor Felipe M.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 9 meses
Contatar Felipe
O ocorrido é que esta ocorrendo porque você está verificando o comprimento das listas de preços e produtos separadamente. Embora ambas as listas devam estar sincronizadas (cada produto tem um preço correspondente), o comprimento pode ser diferente se houver algum atraso no carregamento da página ou se houver algum elemento invisível que está sendo capturado.

Um professor já respondeu

Envie você também uma dúvida grátis
Ver resposta
Minerva IA
do Profes
Respostas na hora
100% no WhatsApp
Envie suas dúvidas pelo App. Baixe agora
Prefere professores para aulas particulares ou resolução de atividades?
Aulas particulares
Encontre um professor para combinar e agendar aulas particulares Buscar professor
Tarefas
Envie sua atividade, anexe os arquivos e receba ofertas dos professores Enviar tarefa