Home > Software engineering >  Separate list obtained with selenium Python
Separate list obtained with selenium Python

Time:09-22

I am developing a script to scrape a page of hotels.com with selenium

import time
import os
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
import pandas as pd
import csv 

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

driver.get('https://es.hoteles.com/ho227810/secrets-lanzarote-resort-spa-adults-only-18-yaiza-espana/')

time.sleep(3)

try:
    cookies = driver.find_element(By.CLASS_NAME, 'osano-cm-button--type_accept')
    cookies.click()
    time.sleep(2)
except:
    pass

try:
    tamano_hotel = driver.find_elements(By.XPATH, '//*[@id="Amenities"]/div/div[1]/div/div[2]')
    hotel=[]
    for iterarhotel in tamano_hotel:
        hotel.append(iterarhotel.text)
    print(hotel)
    time.sleep(2)        
except:
    print("Nothing")

It extracts it as a list

['Tamaño del hotel\n331 habitaciones\nCuenta con 8 pisos\nEntrada y salida\nHorario del registro de entrada: de 15:00 a 0:00\nEdad mínima para efectuar el registro de entrada: 18\nSe puede efectuar el registro de salida hasta las 12:00\nRestricciones relacionadas con tu viaje\nConsulta las restricciones por el COVID-19.\nInstrucciones especiales de entrada\nEl personal de recepción estará esperando a los huéspedes a su llegada.\nPara obtener más información, ponte en contacto con el alojamiento a través de los datos que aparecen en la confirmación de la reserva.\nLos restaurantes del establecimiento abren en función de la temporada.\nDocumentación para el registro de entrada\nEs obligatorio presentar una tarjeta de crédito o de débito, o dejar un depósito en efectivo, para posibles cargos adicionales.\nPueden pedirte un documento de identidad válido.\nLa edad mínima para alojarse en este alojamiento es de 18 años\nLa edad mínima para realizar el registro de entrada es de 18 años.\nMenores\nCunas no disponibles\nMascotas\nSe admiten mascotas (solo perros y gatos, 1 por habitación hasta 10 kg)*\nCon restricciones*\nInternet\nConexión wifi gratis en las zonas comunes\nConexión wifi gratis en las habitaciones\nAparcamiento\nAparcamiento sin asistencia gratuito en las instalaciones\nAparcamiento para coches accesible en silla de ruedas en las instalaciones\nTraslados\nTraslado desde/hasta el aeropuerto*\nInformación adicional\nAlojamiento para no fumadores\nSolo para adultos']

I am trying to scrape the Amenities part but I get the list all together, how could I separate it in a way that it would be separated like this?

Tamaño del hotel: 331 habitaciones, Cuenta con 8 pisos

Entrada y salida: Horario del registro de entrada: de 15:00 a 0:00, Edad mínima para efectuar el registro de entrada: 18, Se puede efectuar el registro de salida hasta las 12:00

Restricciones relacionadas con tu viaje: Consulta las restricciones por el COVID-19.

etc...

CodePudding user response:

Create an empty dictionary object and add the key as header and value and li elements.

I have changed the locator as well.

try:
    tamano_hotel = driver.find_elements(By.CSS_SELECTOR, 'section#Amenities div.uitk-layout-columns-item')
    hotel=[]
    dictdetails={}
    for iterarhotel in tamano_hotel:
        dictdetails[iterarhotel.find_element(By.XPATH, ".//h3").text]=",".join([item.text for item in iterarhotel.find_elements(By.XPATH, ".//ul//li")])
        hotel.append(dictdetails)
    print(hotel)
    time.sleep(2)        
except:
    print("Nothing")

Console output:

[{'Tamaño del hotel': '331 habitaciones,Cuenta con 8 pisos', 'Entrada y salida': 'Horario del registro de entrada: de 15:00 a 0:00,Edad mínima para efectuar el registro de entrada: 18,Se puede efectuar el registro de salida hasta las 12:00', 'Restricciones relacionadas con tu viaje': 'Consulta las restricciones por el COVID-19.', 'Instrucciones especiales de entrada': 'El personal de recepción estará esperando a los huéspedes a su llegada.,Para obtener más información, ponte en contacto con el alojamiento a través de los datos que aparecen en la confirmación de la reserva.,Los restaurantes del establecimiento abren en función de la temporada.', 'Documentación para el registro de entrada': 'Es obligatorio presentar una tarjeta de crédito o de débito, o dejar un depósito en efectivo, para posibles cargos adicionales.,Pueden pedirte un documento de identidad válido.,La edad mínima para alojarse en este alojamiento es de 18 años,La edad mínima para realizar el registro de entrada es de 18 años.', 'Menores': 'Cunas no disponibles', 'Mascotas': 'Se admiten mascotas (solo perros y gatos, 1 por habitación hasta 10 kg)*,Con restricciones*', 'Internet': 'Conexión wifi gratis en las zonas comunes,Conexión wifi gratis en las habitaciones', 'Aparcamiento': 'Aparcamiento sin asistencia gratuito en las instalaciones,Aparcamiento para coches accesible en silla de ruedas en las instalaciones', 'Traslados': 'Traslado desde/hasta el aeropuerto*', 'Información adicional': 'Servicio de limpieza diario,Caja fuerte', 'Comida y bebida': '6 restaurantes,5 bares o lounges,Bar junto a la piscina,Cafetería,Café y té en una zona común,Servicio de habitaciones las 24 horas,Snack-bar o delicatessen', 'Actividades': 'Tenis,Ráquetbol o squash,Vóleibol,Submarinismo,Cerca de la playa,Rutas a pie o en bicicleta en las inmediaciones,Ciclismo de montaña en las inmediaciones,Kayak en las inmediaciones,Esnórquel en las inmediaciones,Alquiler de ciclomotores o scooters en las inmediaciones', 'Teletrabajo': 'Centro de negocios abierto las 24 horas,5 salas de reuniones,Sala de ordenadores,Centro de conferencias de 1899 metros cuadrados']
  • Related