Hvordan jeg automatiserede min jobsøgning ved at opbygge en webcrawler fra bunden

Historien om, hvordan det begyndte

Det var midnat på en fredag, mine venner var ude og havde det sjovt, og alligevel blev jeg spikret på min computerskærm ved at skrive væk.

Mærkeligt nok følte jeg mig ikke udeladt.

Jeg arbejdede på noget, som jeg syntes var virkelig interessant og fantastisk.

Jeg var lige ude af college, og jeg havde brug for et job. Da jeg rejste til Seattle, havde jeg en rygsæk fuld af skolebøger og noget tøj. Jeg kunne passe alt, hvad jeg ejede, i bagagerummet på min Honda Civic fra 2002.

Jeg kunne ikke lide at omgås meget dengang, så jeg besluttede at tackle dette jobproblem på den bedste måde, jeg vidste hvordan. Jeg forsøgte at bygge en app til at gøre det for mig, og denne artikel handler om, hvordan jeg gjorde det. ?

Kom godt i gang med Craigslist

Jeg var på mit værelse og byggede rasende noget software, der ville hjælpe mig med at indsamle og svare på folk, der ledte efter softwareingeniører på Craigslist. Craigslist er i det væsentlige markedspladsen for Internettet, hvor du kan gå og finde ting til salg, tjenester, fællesskabsindlæg osv.

På det tidspunkt havde jeg aldrig bygget et fuldt udbygget program. De fleste af de ting, jeg arbejdede med på college, var akademiske projekter, der involverede bygning og parsering af binære træer, computergrafik og enkle sprogbehandlingsmodeller.

Jeg var ganske ”nybegynder”.

Når det er sagt, havde jeg altid hørt om dette nye “hotte” programmeringssprog kaldet Python. Jeg kendte ikke meget Python, men jeg ville have mine hænder beskidte og lære mere om det.

Så jeg satte to og to sammen og besluttede at bygge en lille applikation ved hjælp af dette nye programmeringssprog.

Rejsen til at opbygge en (fungerende) prototype

Jeg havde en brugt BenQ-bærbar computer, som min bror havde givet mig, da jeg gik til college, som jeg brugte til udvikling.

Det var ikke det bedste udviklingsmiljø på nogen måde. Jeg brugte Python 2.4 og en ældre version af sublim tekst, men processen med at skrive en applikation fra bunden var virkelig en spændende oplevelse.

Jeg vidste ikke, hvad jeg havde brug for at gøre endnu. Jeg prøvede forskellige ting for at se, hvad der sidder fast, og min første tilgang var at finde ud af, hvordan jeg let kunne få adgang til Craigslist-data.

Jeg kiggede op på Craigslist for at finde ud af, om de havde en offentligt tilgængelig REST API. Til min forfærdelse gjorde de det ikke.

Jeg fandt dog den næstbedste ting.

Craigslist havde et RSS-feed, der var offentligt tilgængeligt til personlig brug. Et RSS-feed er i det væsentlige en computerlæselig oversigt over opdateringer, som et websted sender ud. I dette tilfælde vil RSS-feedet give mig mulighed for at hente nye jobfortegnelser, hver gang de blev sendt. Dette var perfekt til mine behov.

Dernæst havde jeg brug for en måde at læse disse RSS-feeds på. Jeg ønskede ikke selv at gennemgå RSS-feeds manuelt, fordi det ville være en time-sink, og det ville ikke være anderledes end at gennemsøge Craigslist.

Omkring dette tidspunkt begyndte jeg at indse kraften i Google. Der er en løbende vittighed, at softwareingeniører bruger det meste af deres tid på at google efter svar. Jeg tror, ​​der er bestemt sandhed i det.

Efter en smule googling fandt jeg dette nyttige indlæg på StackOverflow, der beskrev, hvordan man søger gennem et Craiglist RSS-feed. Det var en slags filtreringsfunktionalitet, som Craigslist leverede gratis. Alt, hvad jeg skulle gøre, var at videregive en bestemt forespørgselsparameter med det nøgleord, jeg var interesseret i.

Jeg var fokuseret på at søge efter software-relaterede job i Seattle. Med det skrev jeg denne specifikke URL op for at lede efter lister i Seattle, der indeholdt nøgleordet "software".

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

Og voilà! Det fungerede smukt .

Den smukkeste suppe, jeg nogensinde har smagt

Jeg var dog ikke overbevist om, at min tilgang ville fungere.

For det første var antallet af lister begrænset . Mine data indeholdt ikke alle tilgængelige jobannoncer i Seattle. De returnerede resultater var blot en delmængde af helheden. Jeg ledte efter at kaste et så bredt net som muligt, så jeg havde brug for at kende alle ledige stillinger.

For det andet indså jeg, at RSS-feedet ikke indeholdt nogen kontaktoplysninger . Det var en bummer. Jeg kunne finde listerne, men jeg kunne ikke kontakte plakaterne, medmindre jeg manuelt filtrerede gennem disse lister.

Jeg er en person med mange færdigheder og interesser, men det at arbejde gentagne manuelt er ikke en af ​​dem. Jeg kunne have hyret nogen til at gøre det for mig, men jeg skar næppe forbi med 1 dollar ramen cup nudler. Jeg kunne ikke sprøjte på dette sideprojekt.

Det var en blindgyde. Men det var ikke den sidste ende.

Kontinuerlig iteration

Fra mit første mislykkede forsøg lærte jeg, at Craigslist havde et RSS-feed, som jeg kunne filtrere på, og hver indlæg havde et link til selve udstationering.

Nå, hvis jeg kunne få adgang til den faktiske udstationering, så kunne jeg måske skrabe e-mail-adressen ud af den? ? Det betød, at jeg var nødt til at finde en måde at få fat i e-mail-adresser fra de originale poster.

Endnu en gang trak jeg mit pålidelige Google op og søgte efter "måder at analysere et websted på."

Med lidt googling fandt jeg et sejt lille Python-værktøj kaldet Beautiful Soup. Det er i det væsentlige et smukt værktøj, der giver dig mulighed for at analysere et helt DOM-træ og hjælper dig med at forstå, hvordan en webside er struktureret.

Mine behov var enkle: Jeg havde brug for et værktøj, der var let at bruge, og som lod mig indsamle data fra en webside. BeautifulSoup afkrydset begge felter, og i stedet for at bruge mere tid på at vælge det bedste værktøj , valgte jeg et værktøj, der fungerede og gik videre. Her er en liste over alternativer, der gør noget lignende.

Side note: Jeg fandt denne fantastiske tutorial, der taler om, hvordan man skraber websteder ved hjælp af Python og BeautifulSoup. Hvis du er interesseret i at lære at skrabe, anbefaler jeg at læse det.

Med dette nye værktøj var min arbejdsgang klar.

Jeg var nu klar til at tackle den næste opgave: at skrabe e-mail-adresser fra de faktiske poster.

Nu er her den seje ting ved open source-teknologier. De er gratis og fungerer godt! Det er som at få gratis is en varm sommerdag og en friskbagt chokoladechip-cookie til at gå.

BeautifulSoup giver dig mulighed for at søge efter specifikke HTML-tags eller markører på en webside. Og Craigslist har struktureret deres lister på en sådan måde, at det var en leg at finde e-mail-adresser. Tagget var noget i retning af "e-mail-svar-link", hvilket grundlæggende påpeger, at et e-mail-link er tilgængeligt.

Fra da af var alt let. Jeg stolede på den indbyggede funktionalitet, som BeautifulSoup leverede, og med blot en simpel manipulation var jeg i stand til at udvælge e-mail-adresser fra Craigslist-indlæg ganske let.

Sætter ting sammen

Inden for en times tid havde jeg min første MVP. Jeg havde bygget en webskraber, der kunne indsamle e-mail-adresser og svare på folk på udkig efter softwareingeniører inden for en radius af 100 kilometer fra Seattle.

Jeg tilføjede forskellige tilføjelser oven på det originale script for at gøre livet meget lettere. For eksempel gemte jeg resultaterne på en CSV- og HTML-side, så jeg hurtigt kunne analysere dem.

Der manglede naturligvis mange andre bemærkelsesværdige funktioner, såsom:

  • evnen til at logge de e-mail-adresser, jeg sendte
  • regler for træthed for at forhindre oversendelse af e-mails til folk, jeg allerede havde nået ud til
  • særlige tilfælde, såsom nogle e-mails, der kræver en Captcha, før de vises for at afskrække automatiserede bots (som jeg var)
  • Craigslist tillod ikke skrabere på deres platform, så jeg ville blive forbudt, hvis jeg kørte scriptet for ofte. (Jeg forsøgte at skifte mellem forskellige VPN'er for at prøve at “narre” Craigslist, men det fungerede ikke), og
  • Jeg kunne stadig ikke hente alle opslag på Craigslist

Den sidste var en kicker. Men jeg regnede med, at hvis et indlæg havde siddet et stykke tid, så måske den person, der sendte det ikke engang længere. Det var en kompromis, jeg var okay med.

Hele oplevelsen føltes som et spil Tetris. Jeg vidste, hvad mit slutmål var, og min virkelige udfordring var at passe de rigtige brikker sammen for at nå det specifikke slutmål. Hvert stykke af puslespillet bragte mig på en anden rejse. Det var udfordrende, men alligevel behageligt, og jeg lærte noget nyt hvert trin på vejen.

Erfaringer

Det var en øjenåbnende oplevelse, og jeg endte med at lære lidt mere om, hvordan Internettet (og Craigslist) fungerer, hvordan forskellige forskellige værktøjer kan arbejde sammen for at løse et problem, plus jeg fik en sej lille historie, jeg kan dele med venner.

På en måde ligner det meget, hvordan teknologier fungerer i disse dage. Du finder et stort, behåret problem, som du skal løse, og du kan ikke se nogen umiddelbar, åbenbar løsning på det. Du opdeler det store hårede problem i flere forskellige håndterbare bidder, og derefter løser du dem en bid ad gangen.

Når jeg ser tilbage, var mit problem dette: hvordan kan jeg bruge dette fantastiske bibliotek på Internettet til hurtigt at nå ud til mennesker med specifikke interesser ? Der var ingen kendte produkter eller løsninger tilgængelige for mig på det tidspunkt, så jeg delte det i flere stykker:

  1. Find alle lister på platformen
  2. Indsaml kontaktoplysninger om hver liste
  3. Send en e-mail til dem, hvis kontaktoplysningerne findes

Det var alt, hvad der var til det. Teknologi fungerede blot som et middel til slutningen . Hvis jeg kunne have brugt et Excel-regneark til at gøre det for mig, ville jeg have valgt det i stedet. Jeg er dog ingen Excel-guru, og så gik jeg med den tilgang, der gav mest mening for mig på det tidspunkt.

Forbedringsområder

Der var mange områder, hvor jeg kunne forbedre:

  • Jeg valgte et sprog, som jeg ikke var særlig fortrolig med for at starte, og der var en indlæringskurve i starten. Det var ikke så forfærdeligt, fordi Python er meget let at hente. Jeg anbefaler stærkt, at enhver begyndende softwareentusiast bruger det som førstesprog.
  • At stole for meget på open source-teknologier. Open source-software har også sit eget sæt problemer . Der var flere biblioteker, jeg brugte, der ikke længere var i aktiv udvikling, så jeg stødte på problemer tidligt. Jeg kunne ikke importere et bibliotek, ellers kunne biblioteket fejle af tilsyneladende uskadelige grunde.
  • At tackle et projekt selv kan være sjovt, men det kan også forårsage en masse stress . Du har brug for meget momentum for at sende noget. Dette projekt var hurtigt og nemt, men det tog mig et par weekender at tilføje forbedringerne. Da projektet fortsatte, begyndte jeg at miste motivation og momentum. Efter at jeg havde fundet et job, slog jeg projektet helt væk.

Ressourcer og værktøjer, jeg brugte

The Hitchhiker's Guide to Python - Fantastisk bog til at lære Python generelt. Jeg anbefaler Python som begynderens første programmeringssprog, og jeg taler om, hvordan jeg brugte det til at lande tilbud fra flere top-top-topvirksomheder i min artikel her.

DailyCodingProblem: Det er en tjeneste, der sender daglige kodningsproblemer til din e-mail og har nogle af de seneste programmeringsproblemer fra top-tech-virksomheder. Brug min kuponkode, zhiachong, for at få $ 10 i rabat!

BeautifulSoup - Det smarte værktøjsværktøj, jeg brugte til at opbygge min webcrawler

Webskrabning med Python - En nyttig guide til at lære, hvordan webskrabning med Python fungerer.

Lean Startup - Jeg lærte om hurtig prototyping og oprettelse af en MVP for at teste en idé fra denne bog. Jeg tror, ​​at ideerne herinde er anvendelige på mange forskellige områder og hjalp mig også med at få mig til at gennemføre projektet.

Evernote - Jeg brugte Evernote til at kompilere mine tanker sammen til dette indlæg. Stærkt anbefale det - jeg bruger dette til grundlæggende _ alt, hvad jeg gør.

Min bærbare computer - Dette er min nuværende hjemme-bærbare computer, der er konfigureret som en arbejdsstation. Det er meget, meget lettere at arbejde med end en gammel BenQ-bærbar computer, men begge fungerer kun til almindeligt programmeringsarbejde.

Kreditter:

Brandon O'brien, min mentor og gode ven, til korrekturlæsning og til at give værdifuld feedback om, hvordan man kan forbedre denne artikel.

Leon Tager, min kollega og ven, der korrekturlæser og viser mig med tiltrængt økonomisk visdom.

Du kan tilmelde dig industriens nyheder, tilfældige godbidder og være den første der ved, hvornår jeg offentliggør nye artikler ved at tilmelde dig her.

Zhia Chong er softwareingeniør hos Twitter. Han arbejder på Ads Measurement-teamet i Seattle og måler annonces påvirkning og ROI for annoncører. Holdet ansætter !

Du kan finde ham på Twitter og LinkedIn .