Hogyan automatizáltam az álláskeresést azáltal, hogy a semmiből felépítettem egy webrobotot

A történet, hogyan kezdődött

Péntek éjfél volt, a barátaim jól érezték magukat, és mégis odaszegeztek a számítógép képernyőjére.

Furcsa módon nem éreztem magam kimaradtnak.

Olyan dolgon dolgoztam, amelyet valóban érdekesnek és fantasztikusnak gondoltam.

Pontosan kimaradtam az egyetemről, és munkára volt szükségem. Amikor elindultam Seattle-be, volt egy hátizsákom, tele egyetemi tankönyvekkel és néhány ruhával. A 2002-es Honda Civic csomagtartójába mindent elfértem.

Akkoriban nem nagyon szerettem társasági életet folytatni, ezért úgy döntöttem, hogy a lehető legjobban kezelem ezt az álláskeresési problémát. Megpróbáltam egy alkalmazást létrehozni, hogy megtegye helyettem, és ez a cikk arról szól, hogyan csináltam. ?

A Craigslist kezdete

A szobámban voltam, és dühödten építettem néhány szoftvert, amely segíteni fog azoknak az embereknek a gyűjtésében és azok megválaszolásában, akik szoftvermérnököket kerestek a Craigslisten. A Craigslist lényegében az Internet piaca, ahol el lehet keresni eladó dolgokat, szolgáltatásokat, közösségi bejegyzéseket stb.

Ebben az időpontban még soha nem készítettem teljes értékű alkalmazást. A legtöbb dolgon, amin a főiskolán dolgoztam, akadémiai projektek szerepeltek, amelyek bináris fák építését és elemzését, számítógépes grafikát és egyszerű nyelvfeldolgozási modelleket vezettek be.

Én voltam a „újonc”.

Ennek ellenére mindig hallottam erről az új, „forró” programozási nyelvről, amelyet Pythonnak hívtak. Nem sokat tudtam a Pythonról, de be akartam piszkítani a kezem, és többet megtudni róla.

Így kettőt és kettőt összeraktam, és úgy döntöttem, hogy elkészítek egy kis alkalmazást ezen új programozási nyelv használatával.

Az út egy (működő) prototípus felépítéséig

Volt egy használt BenQ laptopom, amelyet a bátyám adott nekem, amikor otthagytam az egyetemet, amit fejlesztésként használtam.

Ez semmilyen szempontból nem volt a legjobb fejlesztői környezet. A Python 2.4-et és a Sublime szöveg egy régebbi verzióját használtam, ennek ellenére az alkalmazás nulláról történő írásának folyamata valóban izgalmas élmény volt.

Még nem tudtam, mit kell tennem. Különféle dolgokat próbáltam megnézni, hogy mi ragadt el, és az első megközelítésem az volt, hogy megtudjam, hogyan tudok könnyen hozzáférni a Craigslist adataihoz.

Utánanéztem a Craigslistnek, hogy megtudjam, van-e nyilvánosan elérhető REST API-juk. Megdöbbenésemre nem tették.

Megtaláltam azonban a következő legjobb dolgot.

A Craigslistnek volt egy RSS-hírcsatornája, amely nyilvánosan elérhető volt személyes használatra. Az RSS-hírcsatorna lényegében a számítógép által olvasható összefoglaló a webhely által kiküldött frissítésekről. Ebben az esetben az RSS-hírcsatorna lehetővé tenné számomra az új állásajánlatok felvételét, amikor azok felkerülnek. Ez tökéletesen megfelelt az igényeimnek.

Ezután szükségem volt egy módra ezeknek az RSS-hírcsatornáknak az elolvasására. Magam sem akartam manuálisan átnézni az RSS-hírcsatornákat, mert ez időbeli süllyedés lenne, és ez nem különbözne a Craigslist böngészésétől.

Körülbelül ekkor kezdtem felismerni a Google erejét. Van egy olyan vicc, hogy a szoftvermérnökök idejük nagy részét Google-on keresik a válaszok keresésére. Azt hiszem, ebben mindenképpen van némi igazság.

Egy kis Google-keresés után megtaláltam ezt a hasznos bejegyzést a StackOverflow-n, amely leírta, hogyan lehet keresni egy Craiglist RSS-hírcsatornán. Ez egyfajta szűrési funkció volt, amelyet a Craigslist ingyenesen biztosított. Csak annyit kellett tennem, hogy beírtam egy konkrét lekérdezési paramétert az érdeklődő kulcsszóval.

A szoftverrel kapcsolatos munkák keresésére összpontosítottam Seattle-ben. Ezzel beírtam ezt a konkrét URL-t, hogy Seattle-ben olyan listákat keressek, amelyek tartalmazzák a „szoftver” kulcsszót.

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

És voilà! Gyönyörűen működött .

A legszebb leves, amit valaha kóstoltam

Nem voltam azonban meggyőződve arról, hogy a megközelítésem működni fog.

Először is, a listák száma korlátozott volt . Adataim nem tartalmazták az összes elérhető álláshirdetést Seattle-ben. A visszaküldött eredmények csupán részei voltak az egésznek. A lehető legszélesebb hálót akartam leadni, ezért tudnom kellett az összes elérhető álláshirdetést.

Másodszor rájöttem, hogy az RSS-hírcsatorna nem tartalmaz semmilyen elérhetőséget . Ez egy lökhárító volt. Megtaláltam a listákat, de nem tudtam kapcsolatba lépni a plakátokkal, hacsak nem szűrtem le kézzel ezeket a listákat.

Sok készséggel és érdeklődéssel rendelkező ember vagyok, de az ismétlődő fizikai munka nem tartozik közéjük. Felvehettem volna valakit, aki megteszi helyettem, de alig kapartam el 1 dolláros ramen csésze tésztával. Nem tudtam kibökni ezen a mellékprojekten.

Ez zsákutca volt. De nem ez volt a vége.

Folyamatos iteráció

Az első sikertelen próbálkozásomból megtudtam, hogy a Craigslistnek van egy RSS-hírcsatornája, amelyet szűrni tudok, és minden egyes hozzászóláshoz tartozik egy link a magához a tényleges feladathoz.

Nos, ha hozzáférhetek a tényleges kiküldetéshez, akkor talán lekaparhatom róla az e-mail címet? ? Ez azt jelentette, hogy meg kell találnom a módját, hogy megragadjam az e-mail címeket az eredeti feladásokból.

Még egyszer felhúztam a megbízható Google-t, és kerestem a „webhely elemzésének módjait”.

Egy kis guglizással találtam egy klassz kis Python eszközt Gyönyörű leves néven. Ez lényegében egy remek eszköz, amely lehetővé teszi egy teljes DOM-fa elemzését, és segít megérteni a weboldal felépítését.

Szükségeim egyszerűek voltak: szükségem volt egy könnyen használható eszközre, amely lehetővé tette, hogy adatokat gyűjtsek egy weboldalról. A BeautifulSoup mindkét jelölőnégyzetet bejelölte, és ahelyett, hogy több időt töltöttem volna a legjobb eszköz kiválasztásával, egy olyan eszközt választottam, amely működött és tovább lépett. Itt van egy lista az alternatívákról, amelyek valami hasonlót tesznek.

Mellékjegyzet: Megtaláltam ezt a fantasztikus oktatóanyagot, amely arról beszél, hogy miként lehet weboldalakat kaparni a Python és a BeautifulSoup segítségével. Ha érdekel a kaparás elsajátítása, akkor javaslom elolvasni.

Ezzel az új eszközzel a munkafolyamatom be volt állítva.

Most készen állok a következő feladat megoldására: az e-mail címek lekaparása a tényleges feladásokból.

Itt van a legjobb dolog a nyílt forráskódú technológiákkal kapcsolatban. Szabadok és remekül működnek! Olyan, mint egy fagylaltot kapni egy forró nyári napon, és egy frissen sült csokis sütit.

A BeautifulSoup segítségével meghatározott HTML-címkéket vagy jelölőket kereshet egy weboldalon. A Craigslist pedig úgy építette fel listáikat, hogy szellő volt megtalálni az e-mail címeket. A címke valami olyasmi volt, mint az „email-válasz-link”, ami alapvetően rámutat, hogy elérhető egy e-mail link.

Ettől kezdve minden könnyű volt. Bíztam a BeautifulSoup beépített funkcionalitására, és csak néhány egyszerű manipulációval meglehetősen egyszerűen ki tudtam választani az e-mail címeket a Craigslist bejegyzéseiből.

A dolgok összerakása

Körülbelül egy órán belül megvan az első MVP-m. Építettem egy webkaparót, amely képes e-mail címek összegyűjtésére és válaszolásra a szoftvermérnököt kereső emberek számára Seattle 100 mérföldes körzetében.

Az eredeti forgatókönyv tetejére különféle kiegészítéseket tettem, hogy sokkal könnyebbé tegyem az életet. Például elmentettem az eredményeket egy CSV és HTML oldalra, hogy gyorsan elemezhessem őket.

Természetesen sok más figyelemre méltó funkció hiányzott, például:

  • az elküldött e-mail címek naplózási képessége
  • fáradtsági szabályok, amelyek megakadályozzák az e-mailek túlzott küldését azoknak az embereknek, akikhez már eljutottam
  • speciális esetek, például néhány olyan e-mail, amely megköveteli a Captchát, mielőtt megjelenítenék őket az automatizált botok visszatartására
  • A Craigslist nem engedélyezte a kaparók használatát a platformjukon, ezért kitiltottak, ha túl gyakran futtattam a szkriptet. (Megpróbáltam váltani a különféle VPN-ek között, hogy megpróbáljam "átverni" a Craigslistet, de ez nem sikerült), és
  • Még mindig nem tudtam letölteni az összes bejegyzést a Craigslisten

Az utolsó egy rúgó volt. De arra gondoltam, hogy egy kiküldetés egy ideje ült-e, akkor talán az sem írta tovább, aki feladta. Ez egy kompromisszum volt, amivel jól voltam.

Az egész élmény a Tetris játékának érződött. Tudtam, mi a végcélom, és az igazi kihívásom az volt, hogy a megfelelő darabokat illesszem össze a konkrét végcél elérése érdekében. A rejtvény minden darabja más-más útra vitt. Kihívást jelentett, de mégis élvezetes volt, és az út minden egyes lépésében valami újat tanultam.

Tanulságok

Szembetűnő tapasztalat volt, és végül egy kicsit többet tudtam meg arról, hogyan működik az internet (és a Craigslist), hogyan tudnak különböző eszközök együtt működni egy probléma megoldása érdekében, ráadásul kaptam egy jó kis történetet, amellyel megoszthatom barátok.

Bizonyos értelemben nagyon hasonlít ezekre a technológiákra manapság. Talál egy nagy, szőrös problémát, amelyet meg kell oldania, és nem lát azonnali, nyilvánvaló megoldást. A nagy szőrös problémát több különböző kezelhető darabra bontja, majd egyenként megoldja őket.

Visszatekintve a problémám a következő volt: hogyan használhatom ezt a fantasztikus könyvtárat az interneten, hogy gyorsan elérjem a sajátos érdeklődésű embereket ? Abban az időben nem álltak rendelkezésemre ismert termékek vagy megoldások, ezért több részre bontottam:

  1. Találd meg az összes listát a platformon
  2. Gyűjtsön elérhetőségeket az egyes tételekről
  3. Küldjön e-mailt nekik, ha vannak elérhetőségi adatok

Ennyi volt benne. A technológia csupán eszköz volt a cél elérése érdekében . Ha egy Excel-táblázatot használhattam volna helyettem, akkor inkább ezt választottam volna. Azonban nem vagyok Excel-guru, és ezért a szemléletmódot választottam, amely akkoriban a legértelmesebb volt számomra.

Fejlesztési területek

Számos olyan területen fejlődhettem, ahol fejlődhettem:

  • Olyan nyelvet választottam, amelyet nem nagyon ismertem az induláshoz, és az elején volt egy tanulási görbe. Nem volt túl szörnyű, mert a Python nagyon könnyen felvehető. Nagyon ajánlom, hogy minden kezdő szoftverrajongó használja ezt első nyelvként.
  • Túlságosan támaszkodva a nyílt forráskódú technológiákra. A nyílt forráskódú szoftvereknek saját problémakészlete is van. Több olyan könyvtár is volt, amelyet használtam, és amelyek már nem voltak aktív fejlesztés alatt, ezért korán belefutottam a problémákba. Nem tudtam könyvtárat importálni, különben ártalmatlannak tűnő okokból a könyvtár megbukik.
  • Egy projekt önálló kezelése szórakoztató lehet, de sok stresszt is okozhat . Nagy lendületre lenne szüksége, ha valamit szállít. Ez a projekt gyors és egyszerű volt, de néhány hétvégére szükségem volt a fejlesztésekhez. Amint a projekt folytatódott, kezdtem elveszíteni a motivációt és a lendületet. Miután találtam munkát, teljesen elárasztottam a projektet.

Az általam használt források és eszközök

A stoppos útmutató a Pythonhoz - Remek könyv a Python tanulásához általában. A Python-ot kezdő első programozási nyelvként ajánlom, és arról beszélek, hogy itt cikkemben hogyan használtam fel több csúcsminőségű vállalat ajánlatait.

DailyCodingProblem: Ez egy olyan szolgáltatás, amely napi kódolási problémákat küld az e-mailre, és a legfrissebb technológiai vállalatok legfrissebb programozási problémáival rendelkezik. Használja a zhiachong kuponkódomat, hogy 10 dollár kedvezményt kapjon!

BeautifulSoup - A remek segédprogram, amelyet a webrobotom elkészítéséhez használtam

Webes kaparás Python-nal - Hasznos útmutató a Python-nal történő webes kaparás működésének megismeréséhez.

Lean Startup - A könyv prototípusának gyors megalkotásáról és egy MVP létrehozásáról tanultam. Úgy gondolom, hogy az itt szereplő ötletek számos területen alkalmazhatók, és segítettek a projekt befejezésében is.

Evernote - Az Evernote segítségével készítettem össze a gondolataimat ehhez a bejegyzéshez. Nagyon ajánlom - ezt alapvetően _mindhez_ használom.

A laptopom - Ez a jelenlegi otthoni laptopom, amelyet munkaállomásként állítottam fel. Sokkal- sokkal könnyebb vele dolgozni, mint egy régi BenQ laptopnál, de mindkettő csak általános programozási munkákra működne.

Hitelek:

Brandon O'brien, mentorom és jó barátom, a lektorálásért és értékes visszajelzésekért a cikk továbbfejlesztésével kapcsolatban.

Leon Tager, munkatársam és barátom, aki leleplezi és megmutatja nekem a szükséges pénzügyi bölcsességet.

Iratkozzon fel az iparági hírekre, a véletlenszerű hírekre, és itt regisztrálva elsőként értesülhet új cikkek közzétételéről.

Zhia Chong a Twitter szoftvermérnöke. A seattle-i Ads Measurement csapatnál dolgozik, a hirdetések hatásának és megtérülésének mérésével. A csapat felvesz !

Megtalálhatja a Twitteren és a LinkedIn - en .