Povestea despre cum a început

Vinerea era miezul nopții, prietenii mei se distrau afară și totuși am fost cuie pe ecranul computerului tastând.

În mod ciudat, nu m-am simțit lăsat deoparte.

Lucram la ceva care mi s-a părut cu adevărat interesant și minunat.

Am ieșit imediat de la facultate și aveam nevoie de un loc de muncă. Când am plecat la Seattle, aveam un rucsac plin de manuale de facultate și niște haine. Aș putea încadra tot ce dețineam în portbagajul Honda Civic din 2002.

Nu mi-a plăcut mult să socializez pe atunci, așa că am decis să abordez această problemă de găsire a locurilor de muncă cel mai bun mod în care știam cum. Am încercat să construiesc o aplicație care să o facă pentru mine, iar acest articol este despre cum am făcut-o. ?

Noțiuni introductive despre Craigslist

Eram în camera mea, construind cu furie niște programe care să mă ajute să colectez și să răspund la persoanele care căutau ingineri de software pe Craigslist. Craigslist este în esență piața internetului, unde puteți merge și găsi lucruri de vânzare, servicii, postări în comunitate și așa mai departe.

Cum mi am automatizat cautarea locurilor de munca construind un crawler
Craigslist

În acel moment, nu construisem niciodată o aplicație completă. Majoritatea lucrurilor la care am lucrat în facultate au fost proiecte academice care implicau construirea și analiza copacilor binari, grafica computerizată și modele simple de procesare a limbajului.

Eram destul de „newb”.

Acestea fiind spuse, am auzit întotdeauna despre acest nou limbaj de programare „fierbinte” numit Python. Nu știam prea mult Python, dar am vrut să-mi murdăresc mâinile și să aflu mai multe despre asta.

Așa că am pus două și două împreună și am decis să construiesc o mică aplicație folosind acest nou limbaj de programare.

Cum mi am automatizat cautarea locurilor de munca construind un crawler

Călătoria către construirea unui prototip (de lucru)

Am avut un uzat BenQ laptop pe care mi l-a dat fratele meu când am plecat la facultate pe care l-am folosit pentru dezvoltare.

Nu a fost cel mai bun mediu de dezvoltare. Foloseam Python 2.4 și o versiune mai veche a Text sublim, totuși procesul de scriere a unei aplicații de la zero a fost cu adevărat o experiență emoționantă.

Nu știam încă ce trebuie să fac. Încercam diverse lucruri pentru a vedea ce s-a blocat și prima mea abordare a fost să aflu cum pot accesa cu ușurință datele Craigslist.

Am căutat Craigslist pentru a afla dacă au un API REST disponibil public. Spre consternarea mea, nu au făcut-o.

Cu toate acestea, am găsit următorul cel mai bun lucru.

Craigslist avea un Flux RSS care era disponibil public pentru uz personal. Un flux RSS este în esență un rezumat lizibil de computer de actualizări pe care le trimite un site web. În acest caz, fluxul RSS mi-ar permite să iau noi liste de locuri de muncă ori de câte ori au fost postate. Acesta a fost perfect pentru nevoile mele.

1612064650 709 Cum mi am automatizat cautarea locurilor de munca construind un crawler
Exemplu de aspect al unui flux RSS

Apoi, aveam nevoie de o modalitate de a citi aceste fluxuri RSS. Nu am vrut să trec manual prin fluxurile RSS, pentru că ar fi o scădere a timpului și nu ar fi diferit de navigarea în Craigslist.

În această perioadă, am început să realizez puterea Google. Există o glumă în care inginerii de software își petrec cea mai mare parte a timpului căutând Google pentru răspunsuri. Cred că există cu siguranță un adevăr în asta.

După un pic de Google, am găsit această postare utilă pe StackOverflow care a descris cum să căutați printr-un flux RSS Craiglist. A fost un fel de funcționalitate de filtrare oferită gratuit de Craigslist. Tot ce trebuia să fac era să trec un anumit parametru de interogare cu cuvântul cheie care mă interesa.

M-am concentrat pe căutarea de locuri de muncă legate de software în Seattle. Cu aceasta, am tastat această adresă URL specifică pentru a căuta înregistrări în Seattle care să conțină cuvântul cheie „software”.

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

Și voilà! A mers frumos.

1612064651 52 Cum mi am automatizat cautarea locurilor de munca construind un crawler
Exemplu de flux RSS pentru Seattle cu „software” în titlu

Cea mai frumoasă supă pe care am gustat-o ​​vreodată

Cu toate acestea, nu eram convins că abordarea mea va funcționa.

În primul rând, numărul de înregistrări a fost limitat. Datele mele nu conțineau toate posturile disponibile în Seattle. Rezultatele returnate au fost doar un subset al întregului. Căutam să arunc o rețea cât mai largă posibil, așa că trebuia să știu toate listele de locuri de muncă disponibile.

În al doilea rând, mi-am dat seama că fluxul RSS nu a inclus nicio informație de contact. A fost o prostie. Aș putea găsi listele, dar nu aș putea contacta afișele decât dacă am filtrat manual aceste listări.

1612064651 35 Cum mi am automatizat cautarea locurilor de munca construind un crawler
Captură de ecran a linkului de răspuns Craigslist

Sunt o persoană cu multe abilități și interese, dar lucrul manual repetitiv nu este unul dintre ele. Aș fi putut angaja pe cineva care să o facă pentru mine, dar abia mă răzgândeam cu tăiței de cupă ramen de 1 dolar. Nu m-aș putea lăuda cu acest proiect secundar.

A fost o fundătură. Dar nu a fost Sfârșit.

Iterație continuă

Din prima mea încercare eșuată, am aflat că Craigslist avea un flux RSS pe care îl puteam filtra și că fiecare postare avea un link către postarea propriu-zisă.

Ei bine, dacă aș putea accesa postarea efectivă, atunci poate aș putea răpune adresa de e-mail din ea? ? Asta însemna că trebuia să găsesc o modalitate de a lua adrese de e-mail din postările originale.

Încă o dată, am ridicat Google-ul meu de încredere și am căutat „modalități de a analiza un site web”.

Cu puțin Google, am găsit un mic instrument Python numit Supă frumoasă. Este în esență un instrument inteligent care vă permite să analizați un întreg Arborele DOM și vă ajută să înțelegeți cum este structurată o pagină web.

Nevoile mele erau simple: aveam nevoie de un instrument ușor de utilizat și care să mă permită să colectez date de pe o pagină web. BeautifulSoup a bifat ambele cutii și nu a petrecut mai mult timp alegând cel mai bun instrumentAm ales un instrument care a funcționat și am continuat. Iată un lista alternativelor care fac ceva similar.

1612064651 440 Cum mi am automatizat cautarea locurilor de munca construind un crawler
Pagina principală a BeautifulSoup

Notă laterală: mi s-a părut minunat tutorial care vorbește despre cum să răzuiești site-urile web folosind Python și BeautifulSoup. Dacă sunteți interesat să aflați cum să răzuiești, atunci îți recomand să-l citești.

Cu acest nou instrument, fluxul meu de lucru a fost gata.

1612064651 169 Cum mi am automatizat cautarea locurilor de munca construind un crawler
Fluxul meu de lucru

Acum eram pregătit să abordez următoarea sarcină: răzuirea adreselor de e-mail din postările efective.

Acum, iată lucrul interesant despre tehnologiile open-source. Sunt liberi și funcționează grozav! Este ca și cum ai primi înghețată gratuită într-o zi fierbinte de vară, și un prăjitură de ciocolată proaspăt coaptă pentru a merge.

BeautifulSoup vă permite să căutați etichete HTML specifice sau markere pe o pagină web. Și Craigslist și-a structurat listările în așa fel încât a fost ușor să găsim adrese de e-mail. Eticheta era ceva de genul „e-mail-răspuns-link”, ceea ce subliniază în principiu că este disponibil un link de e-mail.

De atunci, totul a fost ușor. M-am bazat pe funcționalitatea încorporată oferită de BeautifulSoup și, cu o simplă manipulare simplă, am putut alege adresele de e-mail din postările Craigslist destul de ușor.

Unind lucrurile împreună

Într-o oră sau cam așa am avut primul MVP. Construisem un scraper web care să poată colecta adrese de e-mail și să răspundă persoanelor care caută ingineri software pe o rază de 100 de mile de Seattle.

1612064652 608 Cum mi am automatizat cautarea locurilor de munca construind un crawler
Captură de ecran a codului

Am adăugat diverse programe de completare pe partea de sus a scriptului original pentru a face viața mult mai ușoară. De exemplu, am salvat rezultatele într-o pagină CSV și HTML, astfel încât să le pot analiza rapid.

Desigur, au lipsit multe alte caracteristici notabile, cum ar fi:

  • posibilitatea de a înregistra adresele de e-mail pe care le-am trimis
  • reguli de oboseală pentru a preveni trimiterea excesivă de e-mailuri către oameni la care am contactat deja
  • cazuri speciale, cum ar fi unele e-mailuri care necesită un Captcha înainte ca acestea să fie afișate pentru a descuraja roboții automatizați (ceea ce am fost eu)
  • Craigslist nu a permis răzuitoarele pe platforma lor, așa că aș fi interzis dacă aș rula scenariul prea des. (Am încercat să trec între diferite VPN-uri pentru a încerca să „păcălesc” Craigslist, dar asta nu a funcționat) și
  • Încă nu am putut recupera toate postări pe Craigslist

Ultimul a fost un kicker. Dar m-am gândit dacă o postare stătea de ceva vreme, atunci poate că persoana care a postat-o ​​nu mai arăta nici măcar. A fost un compromis cu care am fost bine.

Întreaga experiență s-a simțit ca un joc de Tetris. Știam care este obiectivul meu final și adevărata mea provocare a fost să potrivesc piesele potrivite pentru a atinge acel obiectiv final specific. Fiecare piesă a puzzle-ului m-a adus într-o călătorie diferită. A fost o provocare, dar totuși plăcut și am învățat ceva nou la fiecare pas.

Lecții învățate

A fost o experiență care mi-a deschis ochii și am ajuns să aflu ceva mai multe despre modul în care funcționează Internetul (și Craigslist), despre modul în care diferite instrumente pot funcționa împreună pentru a rezolva o problemă, plus că am o poveste minunată cu care pot împărtăși prieteni.

Într-un fel, seamănă mult cu modul în care funcționează tehnologiile în zilele noastre. Găsiți o problemă mare, păroasă, pe care trebuie să o rezolvați și nu vedeți nicio soluție imediată, evidentă. Descompuneți marea problemă păroasă în mai multe bucăți diferite de gestionat și apoi le rezolvați câte o bucată la rând.

Privind în urmă, problema mea a fost aceasta: cum pot folosi acest director minunat de pe Internet pentru a ajunge rapid la persoane cu interese specifice? Nu existau produse sau soluții cunoscute disponibile la momentul respectiv, așa că le-am împărțit în mai multe bucăți:

  1. Găsiți toate listările de pe platformă
  2. Colectați informații de contact despre fiecare listă
  3. Trimiteți-le un e-mail dacă există informațiile de contact

Asta era tot. Tehnologia a acționat doar ca un mijloc până la sfârșit. Dacă aș fi putut folosi o foaie de calcul Excel pentru asta, aș fi optat pentru asta. Cu toate acestea, nu sunt un guru Excel, așa că am mers cu abordarea care avea cel mai mult sens pentru mine la acea vreme.

Domenii de îmbunătățire

Au existat multe domenii în care aș putea să mă îmbunătățesc:

  • Am ales o limbă cu care nu eram prea familiarizată pentru a începe și a existat o curbă de învățare la început. Nu a fost prea îngrozitor, deoarece Python este foarte ușor de ridicat. Recomand cu tărie ca orice pasionat de software începător să îl utilizeze ca primă limbă.
  • Bazându-se prea mult pe tehnologiile open-source. Software-ul open source are propriul set de probleme, de asemenea. Existau mai multe biblioteci pe care le-am folosit care nu mai erau în dezvoltare activă, așa că am întâmpinat probleme la început. Nu am putut importa o bibliotecă sau biblioteca ar eșua din motive aparent inofensive.
  • Abordarea unui proiect de unul singur poate fi distractivă, dar poate provoca, de asemenea, mult stres. Ai avea nevoie de mult impuls pentru a livra ceva. Acest proiect a fost rapid și ușor, dar mi-au luat câteva weekenduri pentru a adăuga îmbunătățirile. Pe măsură ce proiectul continua, am început să pierd motivația și impulsul. După ce am găsit un loc de muncă, am renunțat complet la proiect.

Resurse și instrumente pe care le-am folosit

Ghidul autostopistului la Python – Carte grozavă pentru învățarea Python în general. Recomand Python ca primul limbaj de programare pentru începători și vorbesc despre cum l-am folosit pentru a obține oferte de la mai multe companii de top de top în articolul meu Aici.

DailyCodingProblem: Este un serviciu care trimite zilnic probleme de codare către e-mailul dvs. și are unele dintre cele mai recente probleme de programare de la companii de top tehnologie. Folosiți codul meu de cupon, zhiachong, pentru a obține 10 $ reducere!

BeautifulSoup – Instrumentul utilitar inteligent pe care l-am folosit pentru a construi crawlerul meu web

Web Scraping cu Python – Un ghid util pentru a învăța cum funcționează răzuirea web cu Python.

Lean Startup – Am aflat despre prototiparea rapidă și crearea unui MVP pentru a testa o idee din această carte. Cred că ideile de aici sunt aplicabile în multe domenii diferite și, de asemenea, m-au ajutat să mă duc la finalizarea proiectului.

Evernote – Am folosit Evernote pentru a-mi compila gândurile împreună pentru această postare. Îl recomand cu tărie – îl folosesc practic pentru tot ceea ce fac.

Laptopul meu– Acesta este laptopul meu actual de acasă, configurat ca stație de lucru. Este mult, mult mai ușor să lucreze cu un laptop BenQ mai vechi, dar ambele ar funcționa doar pentru o programare generală.

Credite:

Brandon O’brien, mentorul și prietenul meu bun, pentru citire și furnizare de feedback valoros cu privire la modul de îmbunătățire a acestui articol.

Leon Tager, colegul meu de muncă și prietenul meu care îmi revizuiește și îmi face dovada cu o înțelepciune financiară atât de mare.

Puteți să vă înscrieți la știri din industrie, la informații aleatorii și să fiți primul care știe când public articole noi prin înscriere Aici.


Zhia Chong este inginer software la Twitter. Lucrează în echipa de măsurare a anunțurilor din Seattle, măsurând impactul anunțurilor și rentabilitatea investiției pentru agenții de publicitate. Echipa este angajare!

Îl poți găsi pe Stare de nervozitate și LinkedIn.