Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Lab11/Bumeran2_py.ipynb
2714 views
Kernel: Python 3 (ipykernel)
#Library # --- # Librerias de selenium from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.support.ui import Select # selccionar opciones de las lista desplegable from selenium.webdriver.common.by import By # permite seleccionar los elementos en un html from selenium.webdriver.common.keys import Keys # ingresar datos a un formulario from selenium.common.exceptions import NoSuchElementException # Opciones driver from selenium.webdriver.chrome.options import Options # dataframes import pandas as pd from pandas import json_normalize import numpy as np # Similamos comportamiento humano al añadir tiempos aleatorios import time from time import sleep import random from tqdm import tqdm # Limpear data (tildes sobretodo) import unidecode # Manipular Json files import json
# Open la página driver = webdriver.Chrome("chromedriver_07.exe") driver.get("https://www.bumeran.com.pe/") driver.maximize_window()
C:\Users\Roberto\AppData\Local\Temp\ipykernel_22708\2097753898.py:3: DeprecationWarning: executable_path has been deprecated, please pass in a Service object driver = webdriver.Chrome("chromedriver_07.exe")
# Click en Puestos_ejecutivo # Full path //*[@id="root"]/div/div[1]/div/div[2]/div/div/div[1]/ul/li[2]/a driver.find_elements(By.XPATH, '//a[@class="sc-gFaPwZ curEiY sc-fYxtnH ettxiZ"]')[1].click()
# Se cambia el driver a nueva ventana abierta driver.switch_to.window(driver.window_handles[1])
# Se pude verificar que el url es de la nueva ventana driver.current_url
'https://www.bumeran.com.pe/empleos-seniority-gerencia-alta-gerencia-direccion.html?landing-puestos-ejecutivos=true'
# Objeto que continene todos los avisos listado_de_avisos = driver.find_element(By.ID,"listado-avisos")
# almacenamos los urls de cada oferta laboral urls = [] links = listado_de_avisos.find_elements(By.TAG_NAME,'a') for link in links[2:]: urls.append(link.get_attribute('href')) # se extrae el atributo URL
urls
['https://www.bumeran.com.pe/empleos/gerente-comercial-millennials-investments-s.a.c.-1115514542.html', 'https://www.bumeran.com.pe/postulantes/productos/doctorcv', 'https://www.bumeran.com.pe/empleos/gerente-de-tienda-chilis-chiclayo-chilis-1115500497.html', 'https://www.bumeran.com.pe/empleos/gerente-general-sector-textil-y-manufactura-rcs-capital-humano-1115481433.html', 'https://www.bumeran.com.pe/empleos/jefe-de-mejora-operacional-plazo-fijo-minera-chinalco-1115463888.html', 'https://www.bumeran.com.pe/empleos/consultor-de-customer-experience-izo-peru-1115462151.html', 'https://www.bumeran.com.pe/empleos/gerente-de-operaciones-sector-seguridad-bumeran-selecta-1115438357.html', 'https://www.bumeran.com.pe/empleos/directora-general-institucion-educativa-virtus-headhunter-1115524138.html', 'https://www.bumeran.com.pe/empleos/gerente-comercial-trisur-consulting-group-s.a.c.-1115523364.html', 'https://www.bumeran.com.pe/empleos/consultor-de-customer-experience-izo-peru-1115523264.html', 'https://www.bumeran.com.pe/empleos/gerente-general-empresa-de-alimentos-en-lurin-1115523214.html', 'https://www.bumeran.com.pe/empleos/sub-gerente-logistico-experiencia-en-almacenes-1115522415.html', 'https://www.bumeran.com.pe/empleos/marketing-en-area-de-maquillajes-internacionales-san-borja-1115522382.html', 'https://www.bumeran.com.pe/empleos/marketing-en-area-de-maquillajes-internacionales-san-isidro-1115522377.html', 'https://www.bumeran.com.pe/empleos/ventas-en-productos-de-salud-y-belleza-mexicana-miraflores2-1115522375.html', 'https://www.bumeran.com.pe/empleos/digital-business-manager-kam-stefanini-peru-s.a-1115522288.html', 'https://www.bumeran.com.pe/empleos/gerente-comercial-agencia-de-carga-tci-cargo-group-s.a.c.-1115522037.html', 'https://www.bumeran.com.pe/empleos/ventas-en-productos-de-salud-y-belleza-mexicana-barranco-1115521852.html', 'https://www.bumeran.com.pe/empleos/ventas-en-productos-de-belleza-san-borja-1115521837.html', 'https://www.bumeran.com.pe/empleos/gerente-legal-cl-selection-s.a.c.-1115521048.html', 'https://www.bumeran.com.pe/empleos/ingeniero-asistente-residente-mina-subterranea-1115520171.html', 'https://www.bumeran.com.pe/empleos-seniority-gerencia-alta-gerencia-direccion.html?landing-puestos-ejecutivos=true#', 'https://www.bumeran.com.pe/empleos-seniority-gerencia-alta-gerencia-direccion.htmllanding-puestos-ejecutivos=true', 'https://www.bumeran.com.pe/empleos-seniority-gerencia-alta-gerencia-direccion.htmllanding-puestos-ejecutivos=true&page=2', 'https://www.bumeran.com.pe/empleos-seniority-gerencia-alta-gerencia-direccion.htmllanding-puestos-ejecutivos=true&page=3', 'https://www.bumeran.com.pe/empleos-seniority-gerencia-alta-gerencia-direccion.htmllanding-puestos-ejecutivos=true&page=4', 'https://www.bumeran.com.pe/empleos-seniority-gerencia-alta-gerencia-direccion.htmllanding-puestos-ejecutivos=true&page=5', 'https://www.bumeran.com.pe/empleos-seniority-gerencia-alta-gerencia-direccion.htmllanding-puestos-ejecutivos=true&page=7', 'https://www.bumeran.com.pe/empleos-seniority-gerencia-alta-gerencia-direccion.htmllanding-puestos-ejecutivos=true&page=2']
# Urls de cada oferta laboral urls = [urls[0]] + urls[2:21] # retiramos el aviso de CV doctor urls # Solo nos quedamos con los links que contiene /empleos/
['https://www.bumeran.com.pe/empleos/gerente-comercial-millennials-investments-s.a.c.-1115514542.html', 'https://www.bumeran.com.pe/empleos/gerente-de-tienda-chilis-chiclayo-chilis-1115500497.html', 'https://www.bumeran.com.pe/empleos/gerente-general-sector-textil-y-manufactura-rcs-capital-humano-1115481433.html', 'https://www.bumeran.com.pe/empleos/jefe-de-mejora-operacional-plazo-fijo-minera-chinalco-1115463888.html', 'https://www.bumeran.com.pe/empleos/consultor-de-customer-experience-izo-peru-1115462151.html', 'https://www.bumeran.com.pe/empleos/gerente-de-operaciones-sector-seguridad-bumeran-selecta-1115438357.html', 'https://www.bumeran.com.pe/empleos/directora-general-institucion-educativa-virtus-headhunter-1115524138.html', 'https://www.bumeran.com.pe/empleos/gerente-comercial-trisur-consulting-group-s.a.c.-1115523364.html', 'https://www.bumeran.com.pe/empleos/consultor-de-customer-experience-izo-peru-1115523264.html', 'https://www.bumeran.com.pe/empleos/gerente-general-empresa-de-alimentos-en-lurin-1115523214.html', 'https://www.bumeran.com.pe/empleos/sub-gerente-logistico-experiencia-en-almacenes-1115522415.html', 'https://www.bumeran.com.pe/empleos/marketing-en-area-de-maquillajes-internacionales-san-borja-1115522382.html', 'https://www.bumeran.com.pe/empleos/marketing-en-area-de-maquillajes-internacionales-san-isidro-1115522377.html', 'https://www.bumeran.com.pe/empleos/ventas-en-productos-de-salud-y-belleza-mexicana-miraflores2-1115522375.html', 'https://www.bumeran.com.pe/empleos/digital-business-manager-kam-stefanini-peru-s.a-1115522288.html', 'https://www.bumeran.com.pe/empleos/gerente-comercial-agencia-de-carga-tci-cargo-group-s.a.c.-1115522037.html', 'https://www.bumeran.com.pe/empleos/ventas-en-productos-de-salud-y-belleza-mexicana-barranco-1115521852.html', 'https://www.bumeran.com.pe/empleos/ventas-en-productos-de-belleza-san-borja-1115521837.html', 'https://www.bumeran.com.pe/empleos/gerente-legal-cl-selection-s.a.c.-1115521048.html', 'https://www.bumeran.com.pe/empleos/ingeniero-asistente-residente-mina-subterranea-1115520171.html']
# He hecho click en una de las ofertas laborales # Se cambia el driver a la nueva ventana driver.switch_to.window(driver.window_handles[1])
# se extrae el titulo del empleo job = driver.find_element(By.XPATH, "//h1[@class='sc-jxgvnK eOHPZp sc-jKJlTe PCuwg']").text job = unidecode.unidecode(job).title() # se retira las tildes
job
'Gerente Comercial'
# Se extrae el nombre de la empresa company = driver.find_element(By.XPATH, "//h3[@class='sc-duVqjH dczkmc']").text company = unidecode.unidecode(company).upper() company
'MILLENNIALS INVESTMENTS S.A.C.'
# Click en el icono de tiempo de publicación driver.find_elements(By.XPATH, "//i[@name='icon-light-clock']/following-sibling::h2")[0].text # tenemos dos opciones. La primera opción indica hace cuanto tiempo se publico la oferta laboral # accedemos al tag <h2></h2> dentro del tag del icino de tiempo con following-sibling::h2
'Publicado hace 5 días'
# Click en el icono ubicación driver.find_elements(By.XPATH, "//i[@name='icon-light-location-pin']/following-sibling::h2")[0].text # la primera opción correcponde a la ubicación de interés
'Santiago de Surco, Lima, Peru'
# Diccionario principal all_info = {} all_info['executive_jobs']=[] for url in tqdm(urls): driver.get(url) time.sleep(random.randint(3,5)) # tiempo aleatorio page = {} # se crea un diccionaruo vacío # ------------------------------ HEADERS ------------------------- # Switch to new page job = driver.find_element(By.XPATH, "//h1[@class='sc-jxgvnK eOHPZp sc-jKJlTe PCuwg']").text job = unidecode.unidecode(job).title() print(job) # Append page['JOB_AVAILABLE'] = job # Location by xpath company = driver.find_element(By.XPATH, "//h3[@class='sc-duVqjH dczkmc']").text company = unidecode.unidecode(company).upper() # mayuscula # Si la empresa es confidencias if company == "CONFIDENCIAL": company = company.lower() # Append page['COMPANY'] = company # ------------------------------ SECTION RED ------------------------- # Tiempo de publicación publication_date = driver.find_elements(By.XPATH, "//i[@name='icon-light-clock']/following-sibling::h2")[0].text # Append page['PUBLICATION_DATE'] = publication_date # Ubicación location = driver.find_elements(By.XPATH, "//i[@name='icon-light-location-pin']/following-sibling::h2")[0].text location = unidecode.unidecode(location) # Append page['LOCATION'] = location try: # Usando XPATH si la ofeta laboral esta dirigido a personas con alguna discapacidad disability = driver.find_element(By.XPATH, '//a[@href="/empleos-discapacitados-apto.html"]').text # Append page['SUITABLE_FOR_PEOPLE_WITH_DISABILITIES'] = disability except: pass # ------------------------------- SECTION BLUE ------------------------------ # Tipo de empleo (Full time o part time) page['SCHEDULES_AVAILABLE'] = driver.find_elements(By.XPATH, "//i[@name='icon-light-clock']/following-sibling::h2")[1].text # Location by xpath using name try: money = driver.find_element(By.XPATH, '//i[@name="icon-light-money"]/following-sibling::h2').text # Append page['SALARY'] = money except: pass # Area laboral area = driver.find_element(By.XPATH, '//i[@name="icon-light-cube"]/following-sibling::h2').text area = unidecode.unidecode(area) # Append page['AREA'] = area # Modalidad (presencia o remoto, etc) modality = driver.find_element(By.XPATH,'//i[@name="icon-light-office"]/following-sibling::h2').text modality = unidecode.unidecode(modality) # Append page['MODALITY_AVAILABLE'] = modality all_info['executive_jobs'].append(page) # se añade el diccionario page como un elemento de la lista all_info time.sleep(3) driver.close()
0%| | 0/20 [00:00<?, ?it/s]
Gerente Comercial
5%|████▏ | 1/20 [00:06<02:12, 6.96s/it]
Gerente De Tienda Chili'S Chiclayo
10%|████████▎ | 2/20 [00:13<02:03, 6.88s/it]
Gerente General - Sector Textil Y Manufactura
15%|████████████▍ | 3/20 [00:21<02:04, 7.31s/it]
Jefe De Mejora Operacional - Plazo Fijo
20%|████████████████▌ | 4/20 [00:29<01:59, 7.50s/it]
Consultor De Customer Experience
25%|████████████████████▊ | 5/20 [00:37<01:53, 7.58s/it]
Gerente De Operaciones - Sector Seguridad
30%|████████████████████████▉ | 6/20 [00:44<01:46, 7.64s/it]
Director(A) General - Institucion Educativa
35%|█████████████████████████████ | 7/20 [00:52<01:39, 7.67s/it]
Gerente Comercial
40%|█████████████████████████████████▏ | 8/20 [00:59<01:28, 7.35s/it]
Consultor De Customer Experience
45%|█████████████████████████████████████▎ | 9/20 [01:08<01:25, 7.81s/it]
Gerente General - Empresa De Alimentos En Lurin
50%|█████████████████████████████████████████ | 10/20 [01:14<01:14, 7.47s/it]
Sub Gerente Logistico - Experiencia En Almacenes
55%|█████████████████████████████████████████████ | 11/20 [01:21<01:05, 7.24s/it]
Marketing En Area De Maquillajes Internacionales San Borja
60%|█████████████████████████████████████████████████▏ | 12/20 [01:30<01:01, 7.69s/it]
Marketing En Area De Maquillajes Internacionales San Isidro
65%|█████████████████████████████████████████████████████▎ | 13/20 [01:38<00:56, 8.01s/it]
Ventas En Productos De Salud Y Belleza Mexicana Miraflores2
70%|█████████████████████████████████████████████████████████▍ | 14/20 [01:45<00:45, 7.63s/it]
Digital Business Manager (Kam)
75%|█████████████████████████████████████████████████████████████▌ | 15/20 [01:53<00:38, 7.74s/it]
Gerente Comercial - Agencia De Carga
80%|█████████████████████████████████████████████████████████████████▌ | 16/20 [02:00<00:29, 7.45s/it]
Ventas En Productos De Salud Y Belleza Mexicana Barranco
85%|█████████████████████████████████████████████████████████████████████▋ | 17/20 [02:08<00:22, 7.54s/it]
Ventas En Productos De Belleza San Borja
90%|█████████████████████████████████████████████████████████████████████████▊ | 18/20 [02:16<00:15, 7.64s/it]
Gerente Legal
95%|█████████████████████████████████████████████████████████████████████████████▉ | 19/20 [02:24<00:07, 7.93s/it]
Ingeniero Asistente Residente Mina Subterranea
100%|██████████████████████████████████████████████████████████████████████████████████| 20/20 [02:32<00:00, 7.63s/it]
data = json_normalize(all_info['executive_jobs']) # jsaon diccionario dentro de una lista data
# Export df to excel data.to_excel('Bumeran_jobs.xlsx')
# Export df to Json data.to_json('Bumeran_jobs.json')