Cómo automaticé mi búsqueda de empleo construyendo un rastreador web desde cero

La historia de como empezó

Era la medianoche de un viernes, mis amigos estaban pasando un buen rato y, sin embargo, estaba clavado en la pantalla de mi computadora escribiendo.

Curiosamente, no me sentí excluida.

Estaba trabajando en algo que pensé que era realmente interesante e increíble.

Acababa de terminar la universidad y necesitaba un trabajo. Cuando me fui a Seattle, tenía una mochila llena de libros de texto universitarios y algo de ropa. Podría guardar todo lo que tenía en el maletero de mi Honda Civic 2002.

No me gustaba socializar mucho en ese entonces, así que decidí abordar este problema de búsqueda de trabajo de la mejor manera que sabía. Traté de crear una aplicación para que lo hiciera por mí, y este artículo trata sobre cómo lo hice. ?

Empezando con Craigslist

Estaba en mi habitación, construyendo furiosamente un software que me ayudaría a recopilar y responder a las personas que buscaban ingenieros de software en Craigslist. Craigslist es esencialmente el mercado de Internet, donde puede ir y encontrar cosas a la venta, servicios, publicaciones de la comunidad, etc.

En ese momento, nunca había creado una aplicación completa. La mayoría de las cosas en las que trabajé en la universidad fueron proyectos académicos que involucraban la construcción y análisis de árboles binarios, gráficos por computadora y modelos simples de procesamiento de lenguaje.

Yo era bastante "novato".

Dicho esto, siempre había oído hablar de este nuevo lenguaje de programación "caliente" llamado Python. No sabía mucho de Python, pero quería ensuciarme las manos y aprender más sobre él.

Así que puse dos y dos juntos, y decidí construir una pequeña aplicación usando este nuevo lenguaje de programación.

El viaje para construir un prototipo (funcional)

Tenía una computadora portátil BenQ usada que mi hermano me había dado cuando me fui a la universidad que usé para el desarrollo.

No fue el mejor entorno de desarrollo de ninguna manera. Estaba usando Python 2.4 y una versión anterior de Sublime text, pero el proceso de escribir una aplicación desde cero fue realmente una experiencia estimulante.

Todavía no sabía lo que tenía que hacer. Estaba probando varias cosas para ver qué funcionaba y mi primer enfoque fue averiguar cómo podía acceder fácilmente a los datos de Craigslist.

Busqué Craigslist para averiguar si tenían una API REST disponible públicamente. Para mi consternación, no lo hicieron.

Sin embargo, encontré la siguiente mejor opción.

Craigslist tenía una fuente RSS que estaba disponible públicamente para uso personal. Una fuente RSS es esencialmente un resumen legible por computadora de las actualizaciones que envía un sitio web. En este caso, la fuente RSS me permitiría buscar nuevas ofertas de trabajo cada vez que se publicaran. Esto fue perfecto para mis necesidades.

A continuación, necesitaba una forma de leer estos canales RSS. Yo no quería revisar las fuentes RSS manualmente, porque eso sería una pérdida de tiempo y no sería diferente a navegar por Craigslist.

Por esta época, comencé a darme cuenta del poder de Google. Hay una broma de que los ingenieros de software pasan la mayor parte de su tiempo buscando respuestas en Google. Creo que definitivamente hay algo de verdad en eso.

Después de buscar un poco en Google, encontré esta publicación útil en StackOverflow que describe cómo buscar a través de una fuente RSS de Craiglist. Era una especie de función de filtrado que Craigslist proporcionaba de forma gratuita. Todo lo que tenía que hacer era pasar un parámetro de consulta específico con la palabra clave que me interesaba.

Estaba enfocado en buscar trabajos relacionados con el software en Seattle. Con eso, escribí esta URL específica para buscar listados en Seattle que contuvieran la palabra clave "software".

//seattle.craigslist.org/search/sss?format=rss&query=software

¡Y voilá! Funcionó de maravilla .

La sopa más hermosa que he probado en mi vida

Sin embargo, no estaba convencido de que mi enfoque funcionaría.

Primero, el número de listados era limitado . Mis datos no contenían todas las ofertas de trabajo disponibles en Seattle. Los resultados devueltos fueron simplemente un subconjunto del todo. Estaba buscando lanzar una red lo más amplia posible, así que necesitaba conocer todos los listados de trabajo disponibles.

En segundo lugar, me di cuenta de que la fuente RSS no incluía ninguna información de contacto . Eso fue un fastidio. Pude encontrar los listados, pero no podía contactar a los carteles a menos que filtrara manualmente estos listados.

Soy una persona con muchas habilidades e intereses, pero el trabajo manual repetitivo no es uno de ellos. Podría haber contratado a alguien para que lo hiciera por mí, pero apenas me las arreglaba con fideos de taza de ramen de 1 dólar. No podría derrocharme en este proyecto paralelo.

Eso fue un callejón sin salida. Pero no fue el final.

Iteración continua

Desde mi primer intento fallido, supe que Craigslist tenía un canal RSS en el que podía filtrar y que cada publicación tenía un enlace a la publicación real.

Bueno, si pudiera acceder a la publicación real, ¿tal vez podría eliminar la dirección de correo electrónico? ? Eso significaba que necesitaba encontrar una manera de obtener direcciones de correo electrónico de las publicaciones originales.

Una vez más, busqué mi Google de confianza y busqué "formas de analizar un sitio web".

Con un poco de búsqueda en Google, encontré una pequeña herramienta de Python llamada Beautiful Soup. Es esencialmente una herramienta ingeniosa que le permite analizar un árbol DOM completo y le ayuda a entender cómo está estructurada una página web.

Mis necesidades eran simples: necesitaba una herramienta que fuera fácil de usar y que me permitiera recopilar datos de una página web. BeautifulSoup marcó ambas casillas y, en lugar de dedicar más tiempo a elegir la mejor herramienta , elegí una que funcionaba y seguí adelante. Aquí hay una lista de alternativas que hacen algo similar.

Nota al margen: encontré este increíble tutorial que habla sobre cómo raspar sitios web usando Python y BeautifulSoup. Si está interesado en aprender a raspar, le recomiendo leerlo.

Con esta nueva herramienta, mi flujo de trabajo estaba listo.

Ahora estaba listo para abordar la siguiente tarea: extraer direcciones de correo electrónico de las publicaciones reales.

Ahora, aquí está lo interesante de las tecnologías de código abierto. ¡Son gratis y funcionan muy bien! Es como recibir un helado gratis en un caluroso día de verano y una galleta con chispas de chocolate recién horneada para llevar.

BeautifulSoup le permite buscar etiquetas HTML o marcadores específicos en una página web. Y Craigslist ha estructurado sus listados de tal manera que fue muy fácil encontrar direcciones de correo electrónico. La etiqueta era algo parecido a "email-reply-link", que básicamente indica que hay un enlace de correo electrónico disponible.

A partir de ahí todo fue fácil. Confié en la funcionalidad incorporada que proporcionó BeautifulSoup, y con solo una simple manipulación, pude seleccionar direcciones de correo electrónico de las publicaciones de Craigslist con bastante facilidad.

Poniendo las cosas juntas

En una hora más o menos, tuve mi primer MVP. Había construido un raspador web que podía recopilar direcciones de correo electrónico y responder a personas que buscaban ingenieros de software en un radio de 160 kilómetros de Seattle.

Agregué varios complementos sobre el script original para hacer la vida mucho más fácil. Por ejemplo, guardé los resultados en una página CSV y HTML para poder analizarlos rápidamente.

Por supuesto, faltaban muchas otras características notables, como:

  • la capacidad de registrar las direcciones de correo electrónico que envié
  • reglas de fatiga para evitar el envío excesivo de correos electrónicos a personas con las que ya me había comunicado
  • casos especiales, como algunos correos electrónicos que requieren un Captcha antes de que se muestren para disuadir a los bots automatizados (que yo era)
  • Craigslist no permitía raspadores en su plataforma, por lo que me prohibirían si ejecutaba el script con demasiada frecuencia. (Intenté cambiar entre varias VPN para intentar "engañar" a Craigslist, pero no funcionó), y
  • Sigo sin poder recuperar todas las publicaciones en Craigslist

El último fue un pateador. Pero pensé que si una publicación había estado pendiente por un tiempo, entonces tal vez la persona que la publicó ya no estaría mirando. Era una compensación con la que estaba bien.

Toda la experiencia se sintió como un juego de Tetris. Sabía cuál era mi objetivo final y mi verdadero desafío era encajar las piezas correctas para lograr ese objetivo final específico. Cada pieza del rompecabezas me llevó a un viaje diferente. Fue desafiante, pero agradable, no obstante, aprendí algo nuevo en cada paso del camino.

Lecciones aprendidas

Fue una experiencia reveladora y terminé aprendiendo un poco más sobre cómo funciona Internet (y Craigslist), cómo varias herramientas diferentes pueden trabajar juntas para resolver un problema, además obtuve una pequeña historia interesante con la que puedo compartir amigos.

En cierto modo, se parece mucho a cómo funcionan las tecnologías en estos días. Encuentra un problema grande y complicado que necesita resolver, y no ve ninguna solución inmediata y obvia. Se divide el gran problema peludo en múltiples partes manejables diferentes, y luego las resuelve una parte a la vez.

Mirando hacia atrás, mi problema era el siguiente: ¿cómo puedo usar este increíble directorio en Internet para llegar rápidamente a personas con intereses específicos ? No había productos o soluciones conocidos disponibles para mí en ese momento, así que lo dividí en varias partes:

  1. Encuentra todos los listados en la plataforma
  2. Recopile información de contacto sobre cada listado
  3. Envíeles un correo electrónico si existe la información de contacto

Eso es todo. La tecnología simplemente actuó como un medio para el fin . Si hubiera podido usar una hoja de cálculo de Excel para hacerlo por mí, habría optado por eso. Sin embargo, no soy un gurú de Excel, así que seguí el enfoque que tenía más sentido para mí en ese momento.

Áreas de mejora

Había muchas áreas en las que podía mejorar:

  • Para empezar, elegí un idioma con el que no estaba muy familiarizado, y hubo una curva de aprendizaje al principio. No fue tan terrible, porque Python es muy fácil de aprender. Recomiendo encarecidamente que cualquier entusiasta del software principiante lo use como primer idioma.
  • Depender demasiado de las tecnologías de código abierto. El software de código abierto también tiene su propio conjunto de problemas . Había varias bibliotecas que usé que ya no estaban en desarrollo activo, así que encontré problemas desde el principio. No pude importar una biblioteca, o la biblioteca fallaría por razones aparentemente inocuas.
  • Abordar un proyecto por su cuenta puede ser divertido, pero también puede causar mucho estrés . Necesitaría mucho impulso para enviar algo. Este proyecto fue rápido y fácil, pero me tomó algunos fines de semana agregar las mejoras. A medida que avanzaba el proyecto, comencé a perder motivación e impulso. Después de encontrar un trabajo, abandoné por completo el proyecto.

Recursos y herramientas que utilicé

The Hitchhiker's Guide to Python - Gran libro para aprender Python en general. Recomiendo Python como el primer lenguaje de programación para principiantes, y hablo sobre cómo lo usé para obtener ofertas de múltiples compañías de primer nivel en mi artículo aquí.

DailyCodingProblem: es un servicio que envía problemas de codificación diarios a su correo electrónico y tiene algunos de los problemas de programación más recientes de las empresas de tecnología de primer nivel. ¡Use mi código de cupón, zhiachong, para obtener $ 10 de descuento!

BeautifulSoup: la ingeniosa herramienta de utilidad que usé para construir mi rastreador web

Web Scraping con Python: una guía útil para aprender cómo funciona el web scraping con Python.

Lean Startup: aprendí sobre la creación rápida de prototipos y la creación de un MVP para probar una idea de este libro. Creo que las ideas aquí son aplicables en muchos campos diferentes y también me ayudaron a completar el proyecto.

Evernote: utilicé Evernote para recopilar mis pensamientos para esta publicación. Lo recomiendo encarecidamente: lo uso básicamente para todo lo que hago.

Mi computadora portátil: esta es mi computadora portátil actual en casa, configurada como una estación de trabajo. Es mucho, mucho más fácil trabajar con él que con un viejo portátil BenQ, pero ambos funcionarían solo para el trabajo de programación general.

Créditos:

Brandon O'brien, mi mentor y buen amigo, por la corrección de pruebas y sus valiosos comentarios sobre cómo mejorar este artículo.

Leon Tager, mi compañero de trabajo y amigo que corrige y me llena de sabiduría financiera muy necesaria.

Puede suscribirse para recibir noticias de la industria, información al azar y ser el primero en saber cuándo publico nuevos artículos registrándose aquí.

Zhia Chong es ingeniera de software en Twitter. Trabaja en el equipo de medición de anuncios en Seattle, midiendo el impacto de los anuncios y el ROI para los anunciantes. ¡El equipo está contratando !

Lo puedes encontrar en Twitter y LinkedIn .