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

como criar um dicionário a partir de 2 listas

Tenho o seguinte código de selenium:

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import pandas as pd

driver = webdriver.Chrome() 
driver.get("http://www.amazon.com.br/") # abre a página no navegador
driver.maximize_window() # Maximizo a janela, pois o input aparece com a janela maximizada


input_element = driver.find_element_by_id("twotabsearchtextbox") # procuro o input pelo id
input_element.send_keys("iphone") # digita no campo de input
input_element.send_keys(Keys.RETURN) # tecla o ENTER

# mudo o driver.get para a página atual de pesquisa que foi aberta
pagina_atual = driver.window_handles[0]
driver.switch_to.window(pagina_atual)

driver.implicitly_wait(10) # espera para que o html da página atual seja carregado

resultado_da_pesquisa = driver.find_elements_by_css_selector("h2.a-size-mini") # acesso a classe que mostra os resultados da pesquisa
resultado_da_pesquisa1 = driver.find_elements_by_class_name("a-price-whole")
resultado_da_pesquisa1 = resultado_da_pesquisa1[:10]
resultado_da_pesquisa = resultado_da_pesquisa[:10] # Capturo os 10 primeiros resultados da busca

for resultado in resultado_da_pesquisa:
    print(resultado.text)
for resultado1 in resultado_da_pesquisa1:
    print(resultado1.text)




time.sleep(2)
driver.quit()

Que foi criado a partir do código no tópico: https://cursos.alura.com.br/forum/topico-como-utilizar-um-input-digitando-alguma-coisa-126339

iPhone 8 Apple Dourado com Tela de 4,7", 4G, 64 GB e Câmera de 12 MP
Apple iPhone 8 Cinza Espacial 64GB com 4,7", iOS 11, Processador A11, 4G, Câmera de 12 MP Desbloqueado
iPhone XR Apple Preto 64GB, Tela Retina LCD de 6,1”, iOS 12, Câmera Traseira 12MP, Resistente à Água e Reconhecimento Facial
Smartphone, Apple, iPhone 7 MN912BR/A, 32 GB, 4.7'', Rosa/Dourado
IPHONE 11 PRETO, TELA DE 6,1", 4G, 128 GB E CÂMERA DE 12 MP
iPhone 6s Plus 32GB Cinza Espacial
iPhone 7 32GB Preto Matte 4G Tela 4.7 Retina - Cam. 12MP + Selfie 7MP iOS 11 - Apple
Iphone Xr Apple Preto, 128gb Desbloqueado - Mry92br/a
iPhone Xs Max Apple 64GB Tela Super Retina 6.5'' iOS Câmera 12MP Cinza Espacial MT502BZ/A
Iphone Xr Apple Preto, 64gb Desbloqueado - Mry42br/a
2.349
4.966
2.590
2.399
4.078
6.499
1.519
3.649
4.820
8.974

Eu gostaria de concatenar as duas listas em duas colunas correspondentes, para posteriormente exportá-las para o excel. Como eu faço isso?

3 respostas
solução!

Oi Cristiano, como vai?

Você pode utilizar a biblioteca pandas tanto para a concatenação, quanto para gerar o export para o excel. Abaixo deixo o código responsável por fazer essa operação e posteriormente comento sobre as linhas adicionadas:

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import pandas as pd

driver = webdriver.Chrome()
driver.get("http://www.amazon.com.br/") # abre a página no navegador
driver.maximize_window() # Maximizo a janela, pois o input aparece com a janela maximizada


input_element = driver.find_element_by_id("twotabsearchtextbox") # procuro o input pelo id
input_element.send_keys("iphone") # digita no campo de input
input_element.send_keys(Keys.RETURN) # tecla o ENTER

# mudo o driver.get para a página atual de pesquisa que foi aberta
pagina_atual = driver.window_handles[0]
driver.switch_to.window(pagina_atual)

driver.implicitly_wait(10) # espera para que o html da página atual seja carregado

resultado_da_pesquisa = driver.find_elements_by_css_selector("h2.a-size-mini") # acesso a classe que mostra os resultados da pesquisa
resultado_da_pesquisa1 = driver.find_elements_by_class_name("a-price-whole")
resultado_da_pesquisa1 = resultado_da_pesquisa1[:10]
resultado_da_pesquisa = resultado_da_pesquisa[:10] # Capturo os 10 primeiros resultados da busca

produto = []
preco = []
for resultado in resultado_da_pesquisa:
    produto.append(resultado.text)
for resultado1 in resultado_da_pesquisa1:
    preco.append(resultado1.text)

dados = pd.DataFrame(list(zip(produto, preco)), columns=['Produto', 'Preço']) # cria dataframe com as duas listas de preço e produto
dados.to_excel("output.xlsx", engine='openpyxl') # envia o resultado para uma planilha excel

time.sleep(2)
driver.quit()

No código acima criamos duas listas(uma com o nome do produto e outra com o preço do produto) que armazenará o resultado obtido pela propriedade text de cada resultado da pesquisa. Após isso, criamos um Dataframe com essas duas listas, é através desse dataframe que iremos colocar os dados em colunas. E por fim, exportamos esse Dataframe para excel.

Teremos como resultado:

image

Observação: para gerar o excel, instale a biblioteca openpyxl:

pip install openpyxl

Qualquer dúvida é só dizer.

Abraços e bons estudos!

Olá Nádia, tudo bem? O openpyxl já estava instalado porém quando eu rodo o código aparece o seguinte erro e não gera o arquivo excel:

DevTools listening on ws://127.0.0.1:65249/devtools/browser/99011103-e21c-456b-b443-6761ee462841
[13072:104:0911/165120.904:ERROR:device_event_log_impl.cc(208)] [16:51:20.904] Bluetooth: bluetooth_adapter_winrt.cc:1074 Getting Default Adapter failed.

Será algum problema no meu ambiente? Obrigado por ajudar...

Obrigado, agora funcionou, o arquivo excel foi gerado, embora apareça esse erro no console, deve ser alguma "sujeira" do selenium. MUITO OBRIGADO Nádia.