Automatizando con Python, Idea 3: Job Scrapper

Cuando estás aprendiendo a programar lo mejor que puedes hacer es buscar formas de practicar. Con ideas de proyectos o incluso intentando automatizar algunas tareas diarias que puedes tener. Es por esta razón que en este post te traigo la tercera y última de tres ideas que puedes automatizar en Python. Aunque estas ideas, por supuesto que también las puedes automatizar en cualquier lenguaje.


Hoy tenemos un tutorial para automatizar con Python, puedes leer este post o ver y escuchar esta información en formato de video en nuestro canal de youtube en la que encontraras además de esta, dos ideas más para automatizar con python, te dejamos el link por si prefieres este formato. 😃 👍


Hola mundo y bienvenidos a este post,

Puede parecer algo complejo si aún no tenemos las bases del lenguaje, para esto te sugerimos aprender con el curso de de python que tenemos en la Academia de Hola Mundo para aprender los fundamentos y como construir aplicaciones web, has click qui para ver el curso: Python: HTML, CSS, Flask y MySQL.

Descripción de nuestro proyecto «Job Scrapper»

A continuación, vamos a hablar sobre la mejor alternativa para encontrar el trabajo remoto de tus sueños.

Este script buscará trabajos sobre algún patrón de búsqueda, como por ejemplo javascript o python, y guardará los resultados en un archivo de texto, este ustedes si desean lo pueden modificar para que envíe por correo el archivo o incluso agregar más condiciones como por ejemplo que solo muestre los trabajos que tengan un salario ofertado.

Preparación

Primero crearemos una nueva carpeta donde guardaremos nuestro proyecto y dentro de esta carpeta crearemos un nuevo archivo, lo llamaremos scrapper.py. Esta estructura la podemos lograr con la secuencia de comandos para tener el archivo necesario para trabajar con este script.

mkdir python_projects
 cd python_projects/
touch scrapper.py

Con esto tendríamos la carpeta y el archivo creado, tú puedes elegir la ruta donde crear estos archivos.

Comenzando el script

Ahora abriremos nuestro editor de código como lo es VsCode, pero tú puede utilizar el de tu preferencia para trabajar nuestro proyecto.

Dentro del archivo scrapper.py tenemos que importar los módulos:

request, el cual nos permitirá hacer peticiones a la web, y el módulo

bs4, de este usaremos a BeautifulSoup, el cual nos servirá para hacer scrapping con más facilidad,

Pero antes tendremos que instalarlos y lo haremos con el comando:

esto sí estás usando comandos Unix.

python3 -m pip install requests beautifulsoup4

Nuestras importaciones deberian quedar de la siguiente manera:

import request
from bs4 import BeautifulSoup

Definiremos una variable con la url de donde vendran los datos, en este caso usaremos el sitio seek.co.nz y la URL será la siguiente: https://www.seek.co.nz/python-jobs?salaryrange=100000-999999&salarytype=annual

url = "https://www.seek.co.nz/python-jobs?salaryrange=100000-999999&salarytype=annual"

Ahora inicializamos nuestra aplicación con y todo nuestro script va dentro de este bloque de código:

if __name__ == "__main__":

Obteniendo los datos

Comenzaremos con traer los datos de Internet o haremos con las siguientes líneas de código, primero trayendo la información con request, guardaremos este resultado en una variable page y después con BeautifulSoup interpretaremos el contenido de la petición y lo guardaremos en una variable llamada soup,

    page = requests.get(url)
    soup = BeautifulSoup(page.content, "html.parser")

Si el resultado de esta variable soup lo guardáramos en un HTML, veríamos algo como lo siguiente, te lo dejo por aquí para ver el resultado de ejecutar estas dos líneas de código, esto no lo tenemos que hacer:

Resultado de la variable soup

Ahora definimos una función para buscar según las tags de HTML en esta página específicamente se guardan las ofertas con el atributo data-search-sol-meta , entonces vamos a buscar aquellos elementos en este HTML que contengan estas etiquetas, lo haremos de la siguiente manera:

    def has_data_search(tag):
        return tag.has_attr("data-search-sol-meta")

Ahora en una lista vamos a obtener solo los resultados de las ofertas laborales, ya que no necesitamos todo el HTML, vamos a guardar esto en un variable llamada results, la cual va a usar a la variable soup y vamos a buscar en esta cuando encuentre el tag que colocamos en la función has_data_search:

results = soup.find_all(has_data_search) 

Extrayendo los datos que necesitamos

Ahora vamos a obtener los datos que necesitamos de cada oferta laboral, vamos a buscar:

  • Título de la vacante,
  • Empresa,
  • Salario, y
  • Link de la vacante

Entonces usando el ciclo for vamos a recorrer la lista de los elementos obtenidos en results, a cada resultado le llamaremos job y usaremos un bloque try/except ya que estamos usando código que podría salir mal por el tipo de ejecución que hacemos en el script

Vamos a buscar dentro de cada job mediante un find, la etiqueta con el atributo específico de cada elemento que buscamos y después con .get_text() obtendremos su texto.

Después definiremos a job como el resultado del siguiente texto: job = "Titulo: {}\nEmpresa: {}\nSalario: {}\nLink: {}a\n" y sustituiremos los valores con nuestros valores obtenidos del paso anterior con el método format() y lo hacemos de la siguiente manera: job = job.format(title, company, salary, joblink)

Al final imprimimos cada job. Pero no olvidemos que debemos colocar el bloque de except. Todo este código.

Todo este proceso nos debe quedar así:

    for job in results:
        try:
            titleElement = job.find("a", attrs={"data-automation": "jobTitle"})
            title = titleElement.get_text()
            company = job.find("a", attrs={"data-automation": "jobCompany"}).get_text()
            joblink = "https://www.seek.co.nz" + titleElement["href"]
            salary = job.find("span", attrs={"data-automation": "jobSalary"})
            salary = salary.get_text() if salary else 'n/a'

            job = "Titulo: {}\nEmpresa: {}\nSalario: {}\nLink: {}a\n"

            job = job.format(title, company, salary, joblink)
                  
            print(job)

Guardando las ofertas

Ahora podremos ejecutar nuestro script con el comando:

python3 scrapper.py

Con esto solo imprimiremos en consola el resultado, pero si queremos guardarlo en algún lugar, podemos hacer esto en la terminal de comandos, haremos uso de las pipes de la siguiente manera:

python3 scrapper.py >> jobs.txt

Con esto guardaremos este resultado en un archivo que llamamos jobs.txt

¡Resultados!

Ha sido un camino largo, pero ahora después de ejecutar el script tenemos en el archivo las ofertas que ha encontrado nuestro scrapper, este se ve de la siguiente manera:

jobs scrapper resultados python
Resultado en el archivo jobs.txt

Código y repositorio

Con esto está terminado nuestro script, te dejo el código completo del script así como él repositorio en GitHub donde puedes ver otros dos scripts con más ideas para automatizar con python, si no sabes qué es o te falta profundizar en la tecnología Git para entender que es un repositorio y cómo tener los tuyos, te recomendamos el curso de Git: Sin Fronteras de la Academia de Hola Mundo.

import requests # python3 -m pip install requests beautifulsoup4
from bs4 import BeautifulSoup

url = "https://www.seek.co.nz/python-jobs?salaryrange=100000-999999&salarytype=annual"

if "__main__" == __name__:
    page = requests.get(url)
    soup = BeautifulSoup(page.content, "html.parser")

    def has_data_search(tag):
        return tag.has_attr("data-search-sol-meta")

    results = soup.find_all(has_data_search) 

    for job in results:
        try:
            titleElement = job.find("a", attrs={"data-automation": "jobTitle"})
            title = titleElement.get_text()
            company = job.find("a", attrs={"data-automation": "jobCompany"}).get_text()
            joblink = "https://www.seek.co.nz" + titleElement["href"]
            salary = job.find("span", attrs={"data-automation": "jobSalary"})
            salary = salary.get_text() if salary else 'n/a'

            job = "Titulo: {}\nEmpresa: {}\nSalario: {}\nLink: {}a\n"

            job = job.format(title, company, salary, joblink)
                  
            print(job)
        except Exception as e:
            print("Exception: {}".format(e))
            pass)

Esta ha sido la tercera y última idea para automatrizar con python, ¿qué más se te ocurre que podemos hacer con python?, déjanos tu opinión en los comentarios.

Y ahora te dejamos aquí los post de las otras dos ideas anteriores para automatizar con python:

¿Cómo aprender python?

Puedes crear muchas más herramientas para automatizar tu día a día, pero lo primero es aprender las bases del lenguaje de programación, de nuevo te invitamos a tomar nuestro curso Python: HTML, CSS, Flask y MySQL, pero si prefieres otras tecnologías, te dejamos el link de la Academia de Hola Mundo para ver todos los cursos que tenemos disponible en diferentes tecnologías para formarte en un excelente desarrollador o desarrolladora.

Para más contenido y no perderte nada suscríbete a este blog, e igualmente síguenos en todas las redes como youtube, twitter e Instagram. y por último, te invitamos a escuchar nuestra música «Hola Beats» diseñada para ayudarte a concentrarte y acompañarte en tu aprendizaje o trabajo, estamos en Spotify y en Apple Music.

¡Hasta la próxima!, y chao mundo

Comments (2)

Deja un comentario

Press ESC to close

Descubre más desde Hola Mundo

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo