es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

BeautifulSoup – cómo obtener elementos de un sitio web que no contienen div, como el resto de los elementos.

Estoy intentando raspar anuncios de trabajo desde el sitio web: https://www.jobs.bg/front_job_search.php?frompage=0&add_sh=1&categories%5B0%5D=29&location_sid=1&keywords%5B0%5D=python&term=#paging.

Quiero obtener todos los datos visibles: título del trabajo, ubicación, descripción corta como: Full Stack; DBA, Big Data; Data Science, IA, ML y Embedded; Test, QA y la parte de raspar para esto es:

result = requests.get(“https://www.jobs.bg/front_job_search.php?frompage=0&add_sh=1&categories%5B0%5D=29&location_sid=1&keywords%5B0%5D=python&term=#paging”).text
soup = bs4.BeautifulSoup(result, “lxml”)
jobs = soup.find_all(‘td’, class_=”offerslistRow”)
for job in jobs:
description = find_all(‘div’, class_=”card__subtitle mdc-typography mdc-typography–body2″)

y es la parte [0] para ser precisos, ya que hay dos tipos de descripciones cortas con el mismo nombre de clase, pero este no es el problema.

Algunos anuncios no tienen descripción corta, pero tampoco tienen la parte de div mencionada (no está vacía, simplemente no existe en absoluto).

¿Hay alguna manera de obtener la descripción para tales anuncios y también “N/A” o algo así?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, hay una manera de manejar los anuncios de trabajo que no tienen una breve descripción. Se puede usar un bloque try-except para manejar la excepción que se genera cuando la parte de div no se encuentra. Dentro del bloque except, se puede asignar el valor de la descripción como “N/A” o cualquier otra cadena que se prefiera. Aquí hay un ejemplo:

    resultado = requests.get("https://www.jobs.bg/front_job_search.php?frompage=0&add_sh=1&categories%5B0%5D=29&location_sid=1&keywords%5B0%5D=python&term=#paging").text
    sopa = bs4.BeautifulSoup(resultado, "lxml")
    trabajos = sopa.find_all('td', class_= "offerslistRow")
    
    for trabajo in trabajos:
        try:
            descripcion = trabajo.find ('div', class_ = "card__subtitle mdc-typography mdc-typography--body2"). text.strip()
        except AttributeError:
            descripción = "N/A"
    
        #Extraer título y ubicación del trabajo
        título = trabajo.find ('a', class_="swoop")["title"]
        ubicación = trabajo.find ('span', class_="addInfo").text.strip()
    
        #Imprimir resultados
        print (f"Título: {título}\nUbicación: {ubicación}\nDescripción: {descripción}\n")
    

    En este ejemplo, usamos un bloque try-except para manejar el AttributeError que se genera cuando la parte de div no se encuentra. Dentro del bloque except, asignamos el valor de la descripción como “N/A”. De esta manera, aunque el anuncio de trabajo no tenga una breve descripción, aún obtendremos un valor para la descripción en nuestra salida.

Comments are closed.