1
resposta

Como formatar strings em python para transformar num array / object / json?

ente eu juro que tentei de tudo antes de perguntar aqui, mas parece que as vezes só me sinto um burro de não saber o que parece ser o básico e nem como pesquisar. Alguém pode me dar uma luz?

Eu to tentando fazer uma "automação" em selinium usando python, mas minha dúvida em si nem é essa, a parte do selinium consegui terminar já. Minha dúvida é em strings.

Eu queria fazer um object / json com as informações que obtive de uma lista de string, mas eu simplesmente não consigo. A informação da lista está dessa forma:

Universo De Sandman: País Dos Pesadelos Vol. 1
R$49,90
Adicionar ao Carrinho
Adicionar à lista de desejos
A Saga Da Liga Da Justiça Vol. 7
R$39,90
Adicionar ao Carrinho
Adicionar à lista de desejos
Sandman: Prelúdio - Edição Definitiva
R$180,90
Adicionar ao Carrinho
Adicionar à lista de desejos
Universo DC Por Neil Gaiman
R$104,90
Adicionar ao Carrinho
Adicionar à lista de desejos

Ou seja, a cada 4 linhas é um novo produto, queria deixar algo mais ou menos assim:

{
{
"Nome": "Universo De Sandman: País Dos Pesadelos Vol. 1"
"Preco": "49,90"
"Carrinho": "Adicionar ao Carrinho"
"Lista": "Adicionar à lista de desejos"
},
{
"Nome": "A Saga Da Liga Da Justiça Vol. 7"
"Preco": "R$39,90"
"Carrinho": "Adicionar ao Carrinho"
"Lista": "Adicionar à lista de desejos"
}
}

Mas eu realmente não consegui pensar em uma estratégia para fazer isso. Alguém sabe auxiliar?

Meu código atual:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select

import time

driver = webdriver.Edge()

driver.get("https://panini.com.br/")
time.sleep(3)
search = driver.find_element(By.ID, 'search')
search.send_keys('Universo Sandman')
search.submit()
time.sleep(3)

find_sorter = driver.find_element(By.ID, 'sorter')
select_sorter = Select(find_sorter)
select_sorter.select_by_visible_text('Mais recentes')

produtos = driver.find_element(By.CLASS_NAME, 'products-grid')
texto_produtos = produtos.text
lista_produtos = texto_produtos.split("\n")

array1 = []
i = 0

for produto in lista_produtos:
if (i < 4):
print(produto)
i = i + 1
if (i == 4):
print("----")
i = 0
1 resposta

Olá, André! Tudo bem com você.

Gente eu juro que tentei de tudo antes de perguntar aqui, mas parece que as vezes só me sinto um burro de não saber o que parece ser o básico e nem como pesquisar. Alguém pode me dar uma luz?

Tá tudo bem perguntar sempre aqui, esse espaço é pra isso! E tá tudo bem ter dificuldades para resolver certos problemas, todo mundo tem isso. Às vezes só estamos cansados ou simplesmente muito enviesados pensando no código. Nessas horas eu dou um tempo, vou fazer outra coisa que eu gosto, assistir filme, série... fazer coisas que me distraiam. A prova que você sabe o assunto e entende do que tá fazendo é seu código com o Selenium que não é nada básico.

Eu fiz um codigo aqui para tentar te ajudar a transformar o texto que você mandou em um dicionário da forma como você pediu, veja se soluciona o problema:

texto = """
Universo De Sandman: País Dos Pesadelos Vol. 1
R$49,90
Adicionar ao Carrinho
Adicionar à lista de desejos
A Saga Da Liga Da Justiça Vol. 7
R$39,90
Adicionar ao Carrinho
Adicionar à lista de desejos
Sandman: Prelúdio - Edição Definitiva
R$180,90
Adicionar ao Carrinho
Adicionar à lista de desejos
Universo DC Por Neil Gaiman
R$104,90
Adicionar ao Carrinho
Adicionar à lista de desejos
"""

dados = texto.strip().split("\n")
keys = ["Nome", "Preco", "Carrinho", "Lista"]

resultado = []
for i in range(0, len(dados), len(keys)):
    temp = {}
    for j, k in enumerate(keys):
        temp[k] = dados[i+j]
    resultado.append(temp)
print(resultado)

Saída:

[{'Carrinho': 'Adicionar ao Carrinho',
  'Lista': 'Adicionar à lista de desejos',
  'Nome': 'Universo De Sandman: País Dos Pesadelos Vol. 1',
  'Preco': 'R$49,90'},
 {'Carrinho': 'Adicionar ao Carrinho',
  'Lista': 'Adicionar à lista de desejos',
  'Nome': 'A Saga Da Liga Da Justiça Vol. 7',
  'Preco': 'R$39,90'},
 {'Carrinho': 'Adicionar ao Carrinho',
  'Lista': 'Adicionar à lista de desejos',
  'Nome': 'Sandman: Prelúdio - Edição Definitiva',
  'Preco': 'R$180,90'},
 {'Carrinho': 'Adicionar ao Carrinho',
  'Lista': 'Adicionar à lista de desejos',
  'Nome': 'Universo DC Por Neil Gaiman',
  'Preco': 'R$104,90'}]

Para criar o dicionário a partir das listas keys (valores que peguei de acordo com o que você colocou) e texto, podemos primeiro dividir o texto em uma lista de linhas usando o separador "\n". Depois, podemos criar um dicionário a partir dos valores da lista e das chaves.

No código acima usamos o enumerate. O enumerate é uma função embutida em Python que permite que você itere sobre uma sequência, como uma lista ou uma string, e obtenha ao mesmo tempo o índice e o valor de cada elemento dessa sequência.

Qualquer dúvida estou à disposição e espero ter ajudado.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!