Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import requests
- from bs4 import BeautifulSoup
- import json
- import re
- # 1. Definir la URL de la página web
- URL = "https://www.empleosit.com.ar/search-results-jobs/?searchId=1761583867.6528&action=search&page=1&listings_per_page=100&view=list"
- def scrape_empleos(url):
- """
- Descarga el contenido de la URL, extrae los datos de los empleos
- (nombre, descripción, fecha, empresa) y los devuelve en formato JSON.
- """
- # Intentar obtener el contenido de la página
- try:
- # Usar headers para simular un navegador y evitar ser bloqueado
- headers = {
- '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'
- }
- response = requests.get(url, headers=headers, timeout=10)
- response.raise_for_status() # Lanza una excepción para errores HTTP (4xx o 5xx)
- html_doc = response.text
- except requests.exceptions.RequestException as e:
- return json.dumps({"error": f"Error al acceder a la URL: {e}"}, indent=4, ensure_ascii=False)
- # 2. Parsear el HTML con BeautifulSoup
- soup = BeautifulSoup(html_doc, 'html.parser')
- jobs_data = []
- # Identificar el contenedor de cada oferta de empleo
- # Las ofertas están en divs con clases 'evenrow' u 'oddrow' dentro de 'searchResultsJobs'
- job_listings = soup.select('.searchResultsJobs > div.evenrow, .searchResultsJobs > div.oddrow')
- if not job_listings:
- return json.dumps({"mensaje": "No se encontraron ofertas de empleo con la estructura esperada."}, indent=4, ensure_ascii=False)
- # 3. Iterar sobre cada oferta y extraer los datos
- for job in job_listings:
- # Extraer el Nombre del Puesto (Título)
- title_tag = job.select_one('.listing-title a')
- name = title_tag.get_text(strip=True) if title_tag else "N/A"
- # Extraer la Descripción (resumen)
- description_tag = job.select_one('.show-brief')
- if description_tag:
- # Eliminar la etiqueta <strong> para dejar solo la descripción
- strong_tag = description_tag.find('strong')
- if strong_tag:
- strong_tag.decompose()
- # Limpiar el texto: quitar espacios extra y el posible ":" inicial
- description = description_tag.get_text(strip=True).replace(':', '', 1).strip()
- else:
- description = "N/A"
- # Extraer la Fecha
- # Se encuentra en <span class="captions-field posted-ico">
- date_tag = job.select_one('.captions-field.posted-ico')
- date = date_tag.get_text(strip=True) if date_tag else "N/A"
- # Extraer la Empresa
- # Se encuentra en <a> dentro de <span class="captions-field company-ico">
- company_tag = job.select_one('.captions-field.company-ico a')
- company = company_tag.get_text(strip=True) if company_tag else "N/A"
- # Agregar los datos al resultado final
- jobs_data.append({
- "nombre": name,
- "descripcion": description,
- "fecha": date,
- "empresa": company
- })
- # 4. Convertir la lista de diccionarios a formato JSON
- return json.dumps(jobs_data, indent=4, ensure_ascii=False)
- # Ejecutar el script
- json_output = scrape_empleos(URL)
- print(json_output)
Advertisement
Add Comment
Please, Sign In to add comment