Cómo Conseguir Un Trabajo Con Python

Lazar Gugleta
Jun 24, 2020

Cómo Conseguir Un Trabajo Con Python

Jun 24, 2020 8 minutes read

Hay tantos sitios web que ofrecen listas de trabajos para diferentes campos de trabajo. Aunque estés en un determinado puesto, siempre debes buscar un trabajo y eso puede ser aburrido. Pero aquí viene una solución simple para poder pasar por muchas de esas ofertas de trabajo con facilidad!

Vamos a construir un sencillo script en Python para obtener listas de trabajos y filtrarlas a tu gusto.

Es un simple uso de Python y no necesitas ninguna habilidad específica para hacer esto conmigo. Iremos paso a paso y construiremos todo juntos.

Lea También: Consigue Tu Primer Trabajo Como Científico De Datos

¡Saltemos directamente a ello!




Codificación


Planificar el proceso
Primero, tenemos que encontrar el sitio web de la lista de trabajos de los que vamos a recibir las ofertas.

Elijo un sitio web llamado Indeed. (Es sólo un ejemplo para este tutorial, pero si tienes un sitio web que prefieres usar para buscar trabajo, ¡por favor, siéntete libre de hacerlo!)

Esto es lo que vamos a hacer:

Filtrar los criterios de los trabajos que nos convienen y realizar raspaduras en ellos.

Así es como se ve el sitio web de Indeed después de que busque la Ciencia de los Datos en los Estados Unidos.

Search on the Website example


Al final, una vez que tengamos nuestros datos, vamos a empaquetarlos en DataFrames y obtener un archivo CSV, que se puede abrir fácilmente con Excel o Libre Office.





Configurar El Entorno

Tendrás que instalar un ChromeDriver y usarlo con Selenio, lo que nos permitirá manipular el navegador y enviarle comandos para probarlo y después para usarlo.

Abra el enlace y descargue el archivo para su sistema operativo. Recomiendo el último lanzamiento estable a menos que ya sepas lo que estás haciendo.

A continuación, tienes que descomprimir ese archivo. Recomendaría entrar en Archivos y hacerlo manualmente haciendo clic con el botón derecho y luego "Extraer aquí".



Dentro de la carpeta, hay un archivo llamado "chromedriver", que tenemos que mover a una carpeta específica de su ordenador. 

Abra la terminal y escriba estos comandos:

sudo su #enter the root mode
cd      #go back to base from the current location
mv /home/*your_pc_name*/Downloads/chromedriver /usr/local/bin 
#move the file to the right location

Sólo en lugar de *your_pc_name* inserta tu nombre real de la computadora. 

Se necesitan algunas bibliotecas más para que esto funcione: 

En esa terminal debería instalar esto:

pip3 install pandas

Pandas es una herramienta de análisis y manipulación de datos de código abierto, rápida, potente, flexible y fácil de usar, construida sobre el lenguaje de programación Python.

sudo pip3 install beautifulsoup4

Beautiful Soup es una biblioteca de Python para obtener datos de HTML, XML y otros lenguajes de marcado.

Una vez que terminemos con eso, abrimos el editor. Mi elección personal es Visual Studio Code. Es fácil de usar, personalizable y ligero para su ordenador.

Abre un nuevo proyecto donde quieras y crea dos nuevos archivos. Este es un ejemplo de cómo la mía parece ayudarte:

Visual Studio Code — Project setup


En el VS Code, hay una pestaña "Terminal" con la que se puede abrir un terminal interno dentro del VS Code, lo que es muy útil para tener todo en un solo lugar. 

Cuando tienes eso abierto, hay pocas cosas más que necesitamos instalar y eso es el entorno virtual y el selenium para el controlador web. Escriba estos comandos en su terminal.

pip3 install virtualenv
source venv/bin/activate
pip3 install selenium

Después de activar el entorno virtual, estamos completamente listos para comenzar.




Creando La Herramienta

¡Tenemos todo listo y ahora vamos a programar! 
Primero, como se mencionó antes, tenemos que importar las bibliotecas instaladas.

from selenium import webdriver
import pandas as pd
from bs4 import BeautifulSoup
from time import sleep

Crea tu herramienta con cualquier nombre e inicia el controlador para Chrome.

class FindJob():
  def __init__(self):
    self.driver = webdriver.Chrome()

Eso es todo lo que necesitamos para empezar a desarrollar. Ahora ve a tu terminal y escribe:

python -i findJob.py

Este comando nos permite nuestro archivo como un espacio de juego interactivo. La nueva pestaña del navegador se abrirá y podremos empezar a emitir comandos a la misma. 
Si quieres experimentar, puedes usar la línea de comandos en lugar de escribirla directamente en tu archivo fuente. En lugar de usar el bot. 

Para el terminal:

bot = FindJob()
  bot.driver.get('https://www.indeed.com/jobs?q=data+science&l=United+States&start=')

Y ahora el código fuente:

self.driver.get('https://www.indeed.com/jobs?q=data+science&l=United+States&start=')

Crear el DataFrame que vamos a usar es fácil, ¡así que empecemos por ahí!

Para este data frame, necesitamos tener “Title”, “Location”, “Company”, “Salary”, “Description” todos relacionados con los trabajos que vamos a raspar o scrape.

dataframe = pd.DataFrame(
  columns=["Title", "Location", "Company", "Salary", "Description"])

Usaremos este DataFrame como nombre de columna para nuestro archivo CSV.

El asunto con este sitio web es que en cada página hay 10 ofertas de trabajo y el enlace cambia cuando vas a la siguiente página. Una vez que lo he descubierto, he hecho un bucle de "for" que comprueba cada página y después de hacerlo va a la siguiente. Esto es lo que parece:

for cnt in range(0, 50, 10):
  self.driver.get("https://www.indeed.com/jobs?q=data+science&l=United+States&start=" + str(cnt))

Configuré una variable de contador "cnt" y agregué ese número, convertido en cadena a mi enlace. El bucle for comienza específicamente con 0, llega hasta 50 y lo hace en iteraciones de 10, porque así es como se nos muestra la cantidad de trabajos por página.

Cuando lleguemos a la primera página, tenemos que raspar la tabla de ofertas una por una y lo haremos de esta manera:

En la imagen de arriba, donde se ven las ofertas, están empaquetadas en una tabla y podemos encontrar esa tabla presionando F12 en el teclado o con el botón derecho del ratón -> Inspeccionar.

Le podría interesar leer también: Cómo Superé El Síndrome Del Impostor En El Análisis De Datos

Esto es lo que parece:




Encontraremos la tabla por el nombre de la clase y entraremos en esta línea:

jobs = self.driver.find_elements_by_class_name('result')

Eso guarda todos los elementos de la web que ha encontrado por el resultado del nombre de la clase.

Una vez que tenemos esos guardados podemos crear otro bucle for y pasar por cada elemento dentro de esa tabla y usar los datos que encontramos dentro.

Antes de mostrarles más código sobre el scraping de esas ofertas, deberíamos repasar un par de cosas. 
 
Para esta parte, vamos a utilizar BeautifulSoup ya que creo que funciona mucho más rápido. 
 
Tenemos que configurar algunas cosas para BeatifulSoup, y esos son los datos reales que le damos para realizar su búsqueda y el analizador que decimos que debe utilizar:

result = job.get_attribute('innerHTML')
soup = BeautifulSoup(result, 'html.parser')

Una vez que los tengamos, sólo tenemos que encontrar elementos dentro de la variable definida "soup", que es sólo un dato preparado por BeautifulSoup. 

Obtenemos los datos para el DataFrame que queremos:

title = soup.find("a", class_="jobtitle").text.replace('\n', '')
location = soup.find(class_="location").text
employer = soup.find(class_="company").text.replace('\n',   '').strip()
try:
  salary = soup.find(class_="salary").text.replace(
    '\n', '').strip()
except:
  salary = 'None'

Hice una parte del salario de tal manera porque a veces no está definido y tenemos que poner Ninguno o vacío para esa celda en particular.
 
Ya que estoy trabajando en la terminal para probar mi código, también puedes imprimir lo que has encontrado hasta ahora:

print(title, location, employer, salary)

Una vez que este script esté hecho, se verá así:




Lo último que falta en el DataFrame es la descripción del trabajo y lo dejó fuera porque, para obtener el texto de la descripción del trabajo, tienes que hacer clic en la oferta de trabajo primero. Yo lo hago de esta manera:

summ = job.find_elements_by_class_name("summary")[0]
summ.click()
job_desc = self.driver.find_element_by_id('vjs-desc').text

Una vez que tenemos todos los elementos que deberían entrar en el DataFrame, lo llenamos:

dataframe = dataframe.append(
  {'Title': title, 'Location': location, 'Employer': employer, 'Description': job_desc}, ignore_index=True)



Una cosa más que tengo que mencionar antes de que empieces a probar esto por ti mismo. 
 
Una vez que vayas a la segunda página del sitio web, hay un popup que te bloquea para que no puedas hacer clic en nada más. 
 
También he pensado en eso y he creado un try-expect, que cerrará el popup y seguirá scraping datos!


pop_up = self.driver.find_element_by_xpath('/html/body/table[2]/tbody/tr/td/div[2]/div[2]/div[4]/div[3]/div[2]/a')
pop_up.click()


Una vez que el bucle for termina, copiamos los datos del marco de datos a CSV llamado "jobs":

dataframe.to_csv("jobs.csv", index=False)

Consigue un trabajo remoto en python y en data science aqui.

¡Hemos Terminado!


El código completo está aquí abajo en mi cuenta de GitHub:

https://github.com/lazargugleta/findJob



Los Siguientes Pasos 


Puedes llevar este guión a otro nivel implementando una comparación entre diferentes sitios web y obtener las mejores ofertas de Internet en general.

Si quieres acceder a trabajos remotos con python y data science, este es un buen lugar.

Hasta entonces, ¡sígueme para más! 😎 
¡Gracias por leer!

Join our private community in Discord

Keep up to date by participating in our global community of data scientists and AI enthusiasts. We discuss the latest developments in data science competitions, new techniques for solving complex challenges, AI and machine learning models, and much more!