nerdemma

empleos it argentina

Oct 27th, 2025
1,027
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.33 KB | None | 0 0
  1. import requests
  2. from bs4 import BeautifulSoup
  3. import json
  4. import re
  5.  
  6. # 1. Definir la URL de la página web
  7. URL = "https://www.empleosit.com.ar/search-results-jobs/?searchId=1761583867.6528&action=search&page=1&listings_per_page=100&view=list"
  8.  
  9. def scrape_empleos(url):
  10.     """
  11.    Descarga el contenido de la URL, extrae los datos de los empleos
  12.    (nombre, descripción, fecha, empresa) y los devuelve en formato JSON.
  13.    """
  14.     # Intentar obtener el contenido de la página
  15.     try:
  16.         # Usar headers para simular un navegador y evitar ser bloqueado
  17.         headers = {
  18.             'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
  19.         }
  20.         response = requests.get(url, headers=headers, timeout=10)
  21.         response.raise_for_status()  # Lanza una excepción para errores HTTP (4xx o 5xx)
  22.         html_doc = response.text
  23.     except requests.exceptions.RequestException as e:
  24.         return json.dumps({"error": f"Error al acceder a la URL: {e}"}, indent=4, ensure_ascii=False)
  25.  
  26.     # 2. Parsear el HTML con BeautifulSoup
  27.     soup = BeautifulSoup(html_doc, 'html.parser')
  28.     jobs_data = []
  29.  
  30.     # Identificar el contenedor de cada oferta de empleo
  31.     # Las ofertas están en divs con clases 'evenrow' u 'oddrow' dentro de 'searchResultsJobs'
  32.     job_listings = soup.select('.searchResultsJobs > div.evenrow, .searchResultsJobs > div.oddrow')
  33.  
  34.     if not job_listings:
  35.          return json.dumps({"mensaje": "No se encontraron ofertas de empleo con la estructura esperada."}, indent=4, ensure_ascii=False)
  36.  
  37.  
  38.     # 3. Iterar sobre cada oferta y extraer los datos
  39.     for job in job_listings:
  40.         # Extraer el Nombre del Puesto (Título)
  41.         title_tag = job.select_one('.listing-title a')
  42.         name = title_tag.get_text(strip=True) if title_tag else "N/A"
  43.  
  44.         # Extraer la Descripción (resumen)
  45.         description_tag = job.select_one('.show-brief')
  46.         if description_tag:
  47.             # Eliminar la etiqueta <strong> para dejar solo la descripción
  48.             strong_tag = description_tag.find('strong')
  49.             if strong_tag:
  50.                 strong_tag.decompose()
  51.             # Limpiar el texto: quitar espacios extra y el posible ":" inicial
  52.             description = description_tag.get_text(strip=True).replace(':', '', 1).strip()
  53.         else:
  54.             description = "N/A"
  55.            
  56.         # Extraer la Fecha
  57.         # Se encuentra en <span class="captions-field posted-ico">
  58.         date_tag = job.select_one('.captions-field.posted-ico')
  59.         date = date_tag.get_text(strip=True) if date_tag else "N/A"
  60.        
  61.         # Extraer la Empresa
  62.         # Se encuentra en <a> dentro de <span class="captions-field company-ico">
  63.         company_tag = job.select_one('.captions-field.company-ico a')
  64.         company = company_tag.get_text(strip=True) if company_tag else "N/A"
  65.        
  66.         # Agregar los datos al resultado final
  67.         jobs_data.append({
  68.             "nombre": name,
  69.             "descripcion": description,
  70.             "fecha": date,
  71.             "empresa": company
  72.         })
  73.  
  74.     # 4. Convertir la lista de diccionarios a formato JSON
  75.     return json.dumps(jobs_data, indent=4, ensure_ascii=False)
  76.  
  77. # Ejecutar el script
  78. json_output = scrape_empleos(URL)
  79.  
  80. print(json_output)
Advertisement
Add Comment
Please, Sign In to add comment