Kuinka automatisoin työnhaun rakentamalla verkkoindeksoijan tyhjästä

Tarina kuinka se alkoi

Oli keskiyö perjantaina, ystäväni olivat pitäneet hauskaa, ja silti olin naulattu tietokoneen näytölle kirjoittamalla pois.

Kummallista, en tuntenut olevani jätetty pois.

Työskentelin jotain, joka oli mielestäni todella mielenkiintoinen ja mahtava.

Olin heti yliopistosta ja tarvitsin työtä. Kun lähdin Seattleen, minulla oli reppu täynnä yliopiston oppikirjoja ja vaatteita. Voisin sovittaa kaiken omistamani vuoden 2002 Honda Civic -laukun tavaratilaan.

En halunnut seurustella paljoaan silloin, joten päätin puuttua tähän työnhaku-ongelmaan parhaiten tuntemallani tavalla. Yritin rakentaa sovelluksen tehdä se minulle, ja tämä artikkeli kertoo kuinka tein sen.

Craigslistin käytön aloittaminen

Olin huoneessani, rakentaen raivoisasti ohjelmistoja, jotka auttavat minua keräämään ihmisiä, jotka etsivät ohjelmistoinsinöörejä Craigslistista, ja vastaamaan niihin. Craigslist on lähinnä Internet-kauppapaikka, josta voit käydä etsimässä myytäviä asioita, palveluita, yhteisöviestejä ja niin edelleen.

Craigslist

Tuolloin en ollut koskaan rakennettu täysimääräistä sovellusta. Suurin osa asioista, joita olen työskennellyt yliopistossa, olivat akateemisia projekteja, joihin kuului binaaripuiden, tietokonegrafiikan ja yksinkertaisten kieltenkäsittelymallien rakentaminen ja jäsentäminen.

Olin melko ”newb”.

Olin kuitenkin kuullut tästä uudesta ”kuumasta” ohjelmointikielestä nimeltä Python. En tiennyt paljon Pythonia, mutta halusin saada käteni likaiseksi ja oppia siitä lisää.

Joten koonnin kaksi ja kaksi yhdessä ja päätin rakentaa pienen sovelluksen käyttämällä tätä uutta ohjelmointikieltä.

Matka rakentamaan (toimiva) prototyyppi

Minulla oli käytetty BenQ-kannettava tietokone, jonka veljeni oli antanut minulle, kun lähdin yliopistoon, jota käytin kehitykseen.

Se ei ollut mitenkään paras kehitysympäristö. Käytin Python 2.4: tä ja sitä vanhempaa versiota Sublime-tekstistä, mutta prosessin kirjoittaminen alusta alkaen oli todella innostava kokemus.

En tiennyt vielä mitä minun piti tehdä. Yritin erilaisia ​​asioita nähdäkseni mikä jumissa oli, ja ensisijaisena lähestymistapanani oli selvittää, kuinka pääsen Craigslist-tietoihin helposti.

Katsoin Craigslistia saadakseni selville, onko heillä julkisesti saatavilla olevaa REST-sovellusliittymää. Valitettavasti he eivät tehneet.

Löysin kuitenkin seuraavan parhaan asian.

Craigslistillä oli RSS-syöte, joka oli julkisesti saatavilla henkilökohtaiseen käyttöön. RSS-syöte on pääosin tietokoneella luettava yhteenveto päivityksistä, jotka verkkosivusto lähettää. Tässä tapauksessa RSS-syöte antaisi minulle mahdollisuuden noutaa uusia työluetteloita aina, kun ne lähetettiin. Tämä sopii täydellisesti tarpeisiini.

Esimerkki siitä, miten RSS-syöte näyttää

Seuraavaksi tarvitsin tapa lukea nämä RSS-syötteet. En halunnut itse käydä läpi RSS-syötteitä, koska se olisi aikaa vievä ja se ei olisi erilainen kuin selaaminen Craigslistissa.

Tänä aikana aloin ymmärtää Googlen voiman. Siellä on käynnissä vitsi, jonka mukaan ohjelmistosuunnittelijat käyttävät suurimman osan ajastaan ​​Googlen avulla vastauksiin. Mielestäni siihen on ehdottomasti jotain totuutta.

Pienen Googlen löytämisen jälkeen löysin tämän hyödyllisen viestin StackOverflowsta, joka kuvaa kuinka etsiä Craiglist RSS-syötteestä. Se oli eräänlainen suodatustoiminto, jonka Craigslist tarjosi ilmaiseksi. Ainoa mitä minun oli tehtävä, oli välittää tietty kyselyparametri avainsanalla, josta olin kiinnostunut.

Tosin olin aivan tuolloin täysin uusi koko Web-kaavinta-ajatukseen. Jos haluat oppia rakentamaan sivuprojekteja tai laskemaan työtä ohjelmistosuunnittelijana, voit tarkistaa pienen luokan, jota opetan täällä tai verkkosivustollani: zhiachong.com.

Keskityin etsimään ohjelmistoihin liittyviä töitä Seattlessa. Kirjoitin sen avulla tämän nimenomaisen URL-osoitteen etsimään Seattlessa olevia ilmoituksia, jotka sisälsivät avainsanaa ”ohjelmisto”.

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

Ja voilà! Se toimi kauniisti.

Esimerkki RSS-syötteestä Seattlelle, jonka otsikossa on ”ohjelmisto”

Kaunein keitto mitä olen koskaan maistanut

En kuitenkaan ollut vakuuttunut siitä, että lähestymistapa toimisi.

Ensinnäkin luetteloiden lukumäärä oli rajoitettu. Tietoni eivät sisältäneet kaikkia saatavilla olevia työpaikkailmoituksia Seattlessa. Palautetut tulokset olivat vain osa kokonaisuutta. Halusin luoda niin laajan verkon kuin mahdollista, joten minun piti tietää kaikki saatavilla olevat työluettelot.

Toiseksi tajusin, että RSS-syöte ei sisältänyt mitään yhteystietoja. Se oli bummer. Löysin ilmoitukset, mutta en pystynyt ottamaan yhteyttä julisteisiin, ellei suodattanut näitä tietoja manuaalisesti.

Kuvakaappaus Craigslist-vastauslinkistä

Olen henkilö, jolla on monia taitoja ja kiinnostuksen kohteita, mutta toistuvan käsityön tekeminen ei ole yksi heistä. Voisin palkata jonkun tekemään sen puolestani, mutta raapasin tuskin yhden dollarin ramenkuppi-nuudeleita. En voinut levittää tätä sivuprojektia.

Se oli umpikuja. Mutta se ei ollut loppua.

Jatkuva toisto

Ensimmäisestä epäonnistuneesta yrityksestäni sain tietää, että Craigslistillä oli RSS-syöte, johon voin suodattaa, ja jokaisella lähettämisellä oli linkki itse lähettämiseen.

No, jos voisin päästä käsiksi varsinaiseen lähettämiseen, ehkä voisin kaapia sähköpostiosoitteen siitä pois? Tämä tarkoitti, että minun piti löytää tapa tarttua sähköpostiosoitteisiin alkuperäisistä viesteistä.

Jälleen kerran vedin luotetun Googleni ja etsin "tapoja jäsentää verkkosivustoa".

Pienellä Googlen avulla löysin viileän pienen Python-työkalun nimeltä Beautiful Soup. Se on pohjimmiltaan hieno työkalu, jonka avulla voit jäsentää koko DOM-puun ja auttaa sinua ymmärtämään verkkosivun rakennetta.

Tarpeeni olivat yksinkertaiset: tarvitsin helppokäyttöisen työkalun, joka antoi minun kerätä tietoja verkkosivulta. BeautifulSoup tarkisti molemmat ruudut, ja sen sijaan, että viettäisin enemmän aikaa parhaan työkalun valintaan, valitsin työkalun, joka toimi ja siirtyi eteenpäin. Tässä on luettelo vaihtoehdoista, jotka tekevät jotain samanlaista.

BeautifulSoupin kotisivu
Sivuhuomautus: Löysin tämän upean opetusohjelman, joka kertoo verkkosivustojen kaavailusta Pythonin ja BeautifulSoupin avulla. Jos olet kiinnostunut raaputtamisen oppimisesta, suosittelen sen lukemista.

Tämän uuden työkalun avulla työnkulku oli valmis.

Oma työnkulku

Olin nyt valmis vastaamaan seuraavaan tehtävään: raapimaan sähköpostiosoitteet todellisista viesteistä.

Nyt tässä on avoimen lähdekoodin tekniikoiden hieno asia. He ovat ilmaisia ​​ja toimivat hienosti! Se on kuin ilmaisen jäätelön hankkiminen kuumana kesäpäivänä ja vastaleivotun suklaa-siru-evästeen käynti.

BeautifulSoup antaa sinun etsiä tiettyjä HTML-tunnisteita tai merkkejä verkkosivulta. Ja Craigslist on järjestänyt luettelonsa siten, että oli helppoa löytää sähköpostiosoitteita. Tunniste oli jotain "email-Reply-link" -linjan tapaan, mikä pohjimmiltaan korostaa, että sähköpostilinkki on saatavana.

Siitä lähtien kaikki oli helppoa. Luotin sisäänrakennettuun BeautifulSoup-toimintoon, ja vain muutamalla yksinkertaisella manipuloinnilla pystyin poimimaan sähköpostiosoitteet Craigslist-viesteistä melko helposti.

Asioiden kokoaminen

Noin tunnin sisällä minulla oli ensimmäinen MVP. Olin rakentanut web-kaavin, joka voi kerätä sähköpostiosoitteita ja vastata ihmisille, jotka etsivät ohjelmistosuunnittelijoita 100 mailin säteellä Seattlesta.

Näyttökuva koodista

Lisäin alkuperäisen komentosarjan päälle erilaisia ​​lisäosia, jotta elämästä olisi paljon helpompaa. Tallensin tulokset esimerkiksi CSV- ja HTML-sivulle, jotta voin jäsentää ne nopeasti.

Tietysti puuttui monia muita merkittäviä ominaisuuksia, kuten:

  • kyky kirjata lähettämäni sähköpostiosoitteet
  • väsymyssäännöt estämään sähköpostien liiallinen lähettäminen ihmisille, joille olin jo tavoittanut
  • erityistapaukset, kuten jotkut sähköpostiviestit, jotka edellyttävät captchaa ennen niiden näyttämistä automaattisten robottipesäkkeiden estämiseksi (mikä minä olin)
  • Craigslist ei sallinut kaavinten käyttöä niiden alustalla, joten minut kiellettäisiin, jos ajaisin skriptiä liian usein. (Yritin vaihtaa VPN-verkkojen välillä yrittääksesi huijata Craigslistia, mutta se ei toiminut), ja
  • En edelleenkään pystynyt noutamaan kaikkia Craigslist-julkaisuja

Viimeinen oli kicker. Mutta tajusin, että jos lähettäjä olisi istunut jonkin aikaa, niin ehkä lähettäjä ei edes etsinyt enää. Se oli kompromissi, jonka kanssa minulla oli OK.

Koko kokemus tuntui Tetriksen pelistä. Tiesin, mikä oli lopullinen päämääräni, ja todellinen haasteeni oli sovittaa oikeat kappaleet yhteen kyseisen lopullisen tavoitteen saavuttamiseksi. Jokainen palapelin pala toi minut toiselle matkalle. Se oli haastavaa, mutta silti nautinnollista, ja olen oppinut jotain uutta joka vaiheessa.

Opittua

Se oli silmiä avaava kokemus, ja päädyin oppimaan vähän enemmän siitä, kuinka Internet (ja Craigslist) toimii, kuinka erilaiset työkalut voivat toimia yhdessä ongelman ratkaisemiseksi. Sain myös hienon pienen tarinan, jonka voin jakaa ystävät.

Tavallaan se on paljon, kuten tekniikat toimivat nykyään. Löydät suuren, karvaisen ongelman, joka sinun on ratkaistava, etkä löydä mitään välitöntä, selvää ratkaisua siihen. Jaotat suuren karvaisen ongelman useiksi erilaisiksi hallittaviksi palasiksi ja sitten ratkaiset ne yhdeksi palaseksi kerrallaan.

Takaisin taaksepäin ongelmani oli seuraava: kuinka voin käyttää tätä mahtavaa Internet-hakemistoa tavoittamaan nopeasti ihmisiä, joilla on tiettyjä kiinnostuksen kohteita? Minulle ei tuolloin ollut saatavana tunnettuja tuotteita tai ratkaisuja, joten hajotin ne useiksi kappaleiksi:

  1. Löydä kaikki alustan ilmoitukset
  2. Kerää yhteystiedot jokaisesta listasta
  3. Lähetä heille sähköpostia, jos yhteystietoja on

Siinä kaikki siinä oli. Teknologia toimi vain välineenä loppuun asti. Jos olisin voinut käyttää Excel-laskentataulukkoa tehdäkseni sen puolestani, olin valinnut sen sen sijaan. En kuitenkaan ole Excel-guru, joten menin lähestymistavan kanssa, joka minusta oli tuolloin eniten järkevää.

Parannusalueet

Voin parantaa monia aloja:

  • Valitsin aloittamiseen kielen, jota en tiennyt hyvin, ja alussa oli oppimiskäyrä. Se ei ollut liian kauhea, koska Python on erittäin helppo noutaa. Suosittelen erittäin voimakkaasti, että kaikki aloittelevat ohjelmistoharrastajat käyttävät sitä ensimmäisenä kielenä.
  • Luotamme liian voimakkaasti avoimen lähdekoodin tekniikkaan. Avoimen lähdekoodin ohjelmistolla on myös omat ongelmansa. Käytin useita kirjastoja, joita ei enää kehitetty aktiivisesti, joten käsittelin aiheita jo varhaisessa vaiheessa. En voinut tuoda kirjastoa, tai kirjasto epäonnistuu näennäisesti turmeltumattomista syistä.
  • Projektin itse tekeminen voi olla hauskaa, mutta voi myös aiheuttaa paljon stressiä. Tarvitset paljon vauhtia lähettääksesi jotain. Tämä projekti oli nopea ja helppo, mutta parannusten tekeminen kesti muutaman viikonlopun. Projektin edetessä aloin menettää motivaatiota ja vauhtia. Kun löysin työpaikan, ojensin projektin kokonaan.

Käytetyt resurssit ja työkalut

Hitchhiker's Guide to Python - Upea kirja Pythonin oppimiseen yleensä. Suosittelen Pythonia aloittelijan ensimmäisenä ohjelmointikielenä ja puhun tässä artikkelissani siitä, kuinka käytin sitä useiden ylimmän tason yritysten tarjousten laskemiseen.

DailyCodingProblem: Se on palvelu, joka lähettää päivittäiset koodausongelmat sähköpostiisi ja jolla on joitain viimeisimmistä ohjelmisto-ongelmista huipputeknologiayrityksiltä. Käytä kuponkikoodini, zhiachong, saadaksesi 10 dollaria pois!

BeautifulSoup - näppärä apuohjelmatyökalu, jota olen käyttänyt web-indeksoijani rakentamiseen

Web-kaavinta Pythonin avulla - hyödyllinen opas, jolla opitaan kuinka Pyramon verkkokaappaus toimii.

Lean Startup - Olen oppinut nopeasta prototyypistä ja MVP: n luomisesta idean testaamiseksi tästä kirjasta. Mielestäni täällä olevat ideat ovat sovellettavissa monille eri aloille ja auttoivat minua myös auttamaan minua loppuun projektin toteuttamisessa.

Evernote - Käytin Evernotea kootakseni ajatuksiani yhdessä tähän viestiin. Suosittelen sitä - käytän tätä periaatteessa _kaikkea_ teen.

Oma kannettava tietokone - tämä on nykyinen kotikannettavani, joka on asetettu työasemana. Työskentely on paljon, paljon helpompaa kuin vanhan BenQ-kannettavan kanssa, mutta molemmat toimisivat vain yleisen ohjelmoinnin parissa.

Laajuus:

Mentorini ja hyvä ystäväni Brandon O’brien todisteluista ja arvokkaasta palautteesta tämän artikkelin parantamiseksi.

Leon Tager, työtoverini ja ystäväni, joka tarkistaa ja suihkuttaa minua kaivatulla taloudellisella viisaudella.

Voit ilmoittautua alan uutisia, satunnaisia ​​vinkkejä ja olla ensimmäinen, joka tietää, kun julkaisen uusia artikkeleita, ilmoittautumalla täällä.

Zhia Chong on Twitter-ohjelmistoinsinööri. Hän työskentelee Seattlen Ads Measurement -tiimissä, joka mittaa mainosten vaikutusta ja mainostajien sijoitetun pääoman tuottoprosenttia. Joukkue palkkaa!

Löydät hänet Twitteristä ja LinkedInistä.