cristobalvch / Jobs-Chile

Como automatizar tus búsquedas para encontrar la mejor oferta de arriendos utilizando Python y Power Bi
8 stars 5 forks source link

Aqui una recomendación #2

Closed MetaMedScope closed 4 months ago

MetaMedScope commented 1 year ago

import time import pandas as pd from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC

Configuración de Selenium

chrome_options = Options() chrome_options.add_argument("--headless") # Ejecutar en modo sin cabeza (headless) driver = webdriver.Chrome("ruta_a_tu_chromedriver", options=chrome_options) # Reemplaza "ruta_a_tu_chromedriver" por la ruta correcta

URL del sitio web objetivo

url = 'https://www.bne.cl/ofertas?page=1'

Función para extraer los datos de una página

def scrape_page(url): driver.get(url) WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, 'oferta'))) soup = BeautifulSoup(driver.page_source, 'html.parser')

data = []
job_elements = soup.find_all('article', class_='oferta')

for job in job_elements:
    title = job.find('h2').text.strip()
    company = job.find('span', class_='company').text.strip()
    location = job.find('span', class_='location').text.strip()

    data.append({'Title': title, 'Company': company, 'Location': location})

return data

Función para realizar el scraping de múltiples páginas

def scrape_multiple_pages(base_url, num_pages): all_data = []

for page in range(1, num_pages + 1):
    url = base_url + str(page)
    print("Scraping page:", url)
    data = scrape_page(url)
    all_data.extend(data)

    # Agregar un retraso entre las solicitudes
    time.sleep(1)

return all_data

Ejecutar el web scraping de 5 páginas y almacenar los datos en un DataFrame de pandas

result = scrape_multiple_pages(url, 5) df = pd.DataFrame(result)

Imprimir los primeros 10 registros del DataFrame

print(df.head(10))

Cerrar el navegador

driver.quit()

MetaMedScope commented 1 year ago

este código utiliza Selenium para navegar por las páginas web y BeautifulSoup para analizar el HTML y extraer los datos necesarios. Utiliza el modo sin cabeza (--headless) para ejecutar Chrome en segundo plano sin abrir una ventana visible.

Recuerda reemplazar "ruta_a_tu_chromedriver" con la ruta correcta hacia el archivo ejecutable del ChromeDriver en tu sistema. Además, puedes ajustar el número de páginas que deseas raspar modificando el segundo argumento en la llamada a scrape_multiple_pages(url, 5).

Espero que este código mejorado te sea útil para tu tarea de web scraping. ¡Buena suerte!