Sıfırdan bir web tarayıcısı oluşturarak iş aramamı nasıl otomatik hale getirdim

Nasıl başladığının hikayesi

Bir Cuma gece yarısıydı, arkadaşlarım dışarıda iyi vakit geçiriyorlardı ve yine de bilgisayar ekranıma yazarak çivilenmiştim.

İşin garibi, dışlanmış hissetmedim.

Gerçekten ilginç ve harika olduğunu düşündüğüm bir şey üzerinde çalışıyordum.

Kolej bitirdim ve bir işe ihtiyacım vardı. Seattle'a gittiğimde, üniversite ders kitapları ve bazı kıyafetlerle dolu bir sırt çantam vardı. Sahip olduğum her şeyi 2002 Honda Civic'imin bagajına sığdırabilirdim.

O zamanlar sosyalleşmekten pek hoşlanmıyordum, bu yüzden bu iş bulma sorununu bildiğim en iyi şekilde çözmeye karar verdim. Bunu benim için yapacak bir uygulama geliştirmeye çalıştım ve bu makale bunu nasıl yaptığımla ilgili. ?

Craigslist'e başlarken

Odamdaydım, Craigslist'te yazılım mühendisleri arayan insanları toplamama ve onlara yanıt vermeme yardımcı olacak bazı yazılımları öfkeyle geliştiriyordum. Craigslist, esasen İnternet'in satış için bir şeyler bulabileceğiniz, hizmetler, topluluk gönderileri vb. Bulabileceğiniz pazar yeridir.

O noktada, hiçbir zaman tam teşekküllü bir uygulama geliştirmemiştim. Üniversitede üzerinde çalıştığım şeylerin çoğu, ikili ağaçların, bilgisayar grafiklerinin ve basit dil işleme modellerinin oluşturulmasını ve ayrıştırılmasını içeren akademik projelerdi.

Ben oldukça "yeniydim".

Bununla birlikte, Python adlı bu yeni "sıcak" programlama dilini her zaman duymuştum. Python'u pek bilmiyordum ama ellerimi kirletmek ve onun hakkında daha çok şey öğrenmek istedim.

Bu yüzden iki ve ikiyi bir araya getirdim ve bu yeni programlama dilini kullanarak küçük bir uygulama oluşturmaya karar verdim.

(Çalışan) bir prototip oluşturma yolculuğu

Geliştirme için kullandığım üniversiteden ayrılırken kardeşimin bana verdiği kullanılmış bir BenQ dizüstü bilgisayarım vardı.

Her açıdan en iyi geliştirme ortamı değildi. Python 2.4 ve Sublime metninin eski bir sürümünü kullanıyordum, ancak sıfırdan bir uygulama yazma süreci gerçekten heyecan verici bir deneyimdi.

Henüz ne yapmam gerektiğini bilmiyordum. Neyin sıkıştığını görmek için çeşitli şeyler deniyordum ve ilk yaklaşımım Craigslist verilerine nasıl kolayca erişebileceğimi bulmaktı.

Halka açık bir REST API'leri olup olmadığını öğrenmek için Craigslist'e baktım. Korkunç bir şekilde, yapmadılar.

Ancak, bir sonraki en iyi şeyi buldum .

Craigslist'in kişisel kullanım için halka açık bir RSS beslemesi vardı. RSS beslemesi, esasen bir web sitesinin gönderdiği güncellemelerin bilgisayar tarafından okunabilir bir özetidir . Bu durumda, RSS beslemesi, yayınlandıkları her seferinde yeni iş ilanları almamı sağlıyordu. Bu, ihtiyaçlarım için mükemmeldi .

Sonra, bu RSS beslemelerini okumak için bir yola ihtiyacım vardı. RSS beslemelerini kendim manuel olarak incelemek istemedim, çünkü bu bir zaman kaybı olurdu ve bu Craigslist'e göz atmaktan farklı olmazdı.

Bu sıralarda Google'ın gücünü fark etmeye başladım. Yazılım mühendislerinin zamanlarının çoğunu Google'da yanıtlar bulmak için harcadıkları şaka. Sanırım bunda kesinlikle bir miktar gerçek var.

Biraz Googling'den sonra, StackOverflow'da Craiglist RSS beslemesinde nasıl arama yapılacağını açıklayan bu yararlı gönderiyi buldum. Craigslist'in ücretsiz olarak sağladığı bir tür filtreleme işleviydi. Tek yapmam gereken, ilgilendiğim anahtar kelimeyle belirli bir sorgu parametresini geçirmekti.

Seattle'da yazılımla ilgili işleri aramaya odaklandım. Bununla birlikte, Seattle'da "yazılım" anahtar kelimesini içeren listeleri aramak için bu belirli URL'yi yazdım.

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

Ve voilà! Çok güzel çalıştı .

Şimdiye kadar tattığım en güzel çorba

Ancak yaklaşımımın işe yarayacağına ikna olmadım.

İlk olarak, listeleme sayısı sınırlıydı . Verilerim , Seattle'daki mevcut tüm iş ilanlarını içermiyordu . Dönen sonuçlar sadece bütünün bir alt kümesiydi. Mümkün olduğunca geniş bir ağ oluşturmak istiyordum, bu yüzden mevcut tüm iş ilanlarını bilmem gerekiyordu.

İkinci olarak, RSS beslemesinin herhangi bir iletişim bilgisi içermediğini fark ettim . Bu bir serseriydi. Listeleri bulabildim, ancak bu listeleri manuel olarak filtrelemediğim sürece posterlerle iletişim kuramadım.

Pek çok beceriye ve ilgi alanına sahip bir insanım, ancak tekrarlayan el işi yapmak bunlardan biri değil. Bunu benim yerime yapması için birini tutabilirdim, ama 1 dolarlık ramen kap eriştelerle zar zor geçiyordum. Bu yan projeyi savundum.

Bu bir çıkmaz sokaktı. Ama öyle değildi sonu.

Sürekli yineleme

İlk başarısız denememden, Craigslist'in filtreleyebileceğim bir RSS beslemesi olduğunu ve her gönderinin asıl gönderinin kendisine bir bağlantısı olduğunu öğrendim.

Peki, asıl gönderiye erişebilseydim, belki e-posta adresini ondan kazıyabilirim? ? Bu, e-posta adreslerini orijinal gönderilerden almanın bir yolunu bulmam gerektiği anlamına geliyordu.

Bir kez daha, güvenilir Google'ımı açtım ve "bir web sitesini ayrıştırmanın yollarını" aradım.

Biraz Googling ile Güzel Çorba adında harika bir küçük Python aracı buldum. Esasen, tüm bir DOM Ağacını ayrıştırmanıza izin veren ve bir web sayfasının nasıl yapılandırıldığını anlamanıza yardımcı olan şık bir araçtır.

İhtiyaçlarım basitti: Kullanımı kolay ve bir web sayfasından veri toplamama izin verecek bir araca ihtiyacım vardı. BeautifulSoup her iki kutuyu da işaretledi ve en iyi aracı seçmek için daha fazla zaman harcamak yerine , işe yarayan ve devam eden bir araç seçtim. İşte benzer bir şey yapan alternatiflerin bir listesi.

Yan not: Python ve BeautifulSoup kullanarak web sitelerinin nasıl kazınacağından bahseden bu harika öğreticiyi buldum. Nasıl kazınacağını öğrenmekle ilgileniyorsan, okumanızı tavsiye ederim.

Bu yeni araçla iş akışım tamamlandı.

Artık bir sonraki görevin üstesinden gelmeye hazırdım: e-posta adreslerini asıl gönderilerden almak.

Şimdi, işte açık kaynak teknolojileriyle ilgili harika olan şey. Ücretsizler ve harika çalışıyorlar! Sıcak bir yaz gününde bedava dondurma ve taze pişmiş çikolatalı kurabiye almaya benzer.

BeautifulSoup, bir web sayfasında belirli HTML etiketlerini veya işaretçileri aramanızı sağlar. Ve Craigslist listelerini e-posta adreslerini bulmak çok kolay olacak şekilde yapılandırdı. Etiket, temelde bir e-posta bağlantısının mevcut olduğuna işaret eden "e-posta-yanıt-bağlantısı" satırları boyunca bir şeydi.

O andan itibaren her şey kolaydı. BeautifulSoup'un sağladığı yerleşik işlevselliğe güvendim ve sadece basit bir manipülasyonla, Craigslist gönderilerinden e-posta adreslerini oldukça kolay bir şekilde seçebildim.

Bir şeyleri bir araya getirmek

Yaklaşık bir saat içinde ilk MVP'mi aldım. E-posta adreslerini toplayabilecek ve Seattle'ın 100 millik bir yarıçapı içinde yazılım mühendisleri arayan insanlara yanıt verebilecek bir web kazıyıcı inşa etmiştim.

Hayatı çok daha kolay hale getirmek için orijinal senaryonun üzerine çeşitli eklentiler ekledim. Örneğin, sonuçları hızlı bir şekilde ayrıştırabilmek için bir CSV ve HTML sayfasına kaydettim.

Elbette, eksik olan birçok önemli özellik vardı, örneğin:

  • gönderdiğim e-posta adreslerini kaydetme yeteneği
  • zaten ulaştığım kişilere fazla e-posta göndermeyi önlemek için yorgunluk kuralları
  • otomatik botları caydırmak için görüntülenmeden önce Captcha gerektiren bazı e-postalar gibi özel durumlar (ki ben de öyleydim)
  • Craigslist, platformlarında kazıyıcılara izin vermedi, bu yüzden senaryoyu çok sık çalıştırırsam yasaklanırdım. (Craigslist'i "kandırmaya" çalışmak için çeşitli VPN'ler arasında geçiş yapmayı denedim ama bu işe yaramadı) ve
  • Hala Craigslist'teki tüm ilanları alamadım

Sonuncusu bir şutördü. Ama bir ilan bir süredir oturuyorsa, o zaman belki gönderen kişinin artık bakmadığını düşündüm. Tamam olduğum bir değiş tokuştu.

Tüm deneyim bir Tetris oyunu gibiydi. Nihai hedefimin ne olduğunu biliyordum ve asıl zorluğum, bu belirli nihai hedefe ulaşmak için doğru parçaları bir araya getirmekti. Bulmacanın her parçası beni farklı bir yolculuğa çıkardı. Zorlayıcıydı ama yine de eğlenceliydi ve her adımda yeni bir şey öğrendim.

Dersler öğrenildi

Gözleri açan bir deneyimdi ve sonunda İnternet'in (ve Craigslist'in) nasıl çalıştığı, bir sorunu çözmek için çeşitli farklı araçların birlikte nasıl çalışabileceği hakkında biraz daha fazla şey öğrendim, ayrıca paylaşabileceğim harika bir küçük hikayem var Arkadaşlar.

Bir bakıma, bugünlerde teknolojilerin çalışma şekline çok benziyor. Çözmeniz gereken büyük, tüylü bir problem buluyorsunuz ve buna anında, açık bir çözüm göremiyorsunuz. Büyük tüylü problemi birden fazla farklı yönetilebilir parçaya ayırırsınız ve sonra bunları birer birer çözersiniz.

Geriye dönüp baktığımda, sorunum şuydu: İnternetteki bu harika dizini belirli ilgi alanlarına sahip kişilere hızlı bir şekilde ulaşmak için nasıl kullanabilirim ? O sırada bildiğim hiçbir ürün veya çözüm yoktu, bu yüzden birden çok parçaya böldüm:

  1. Platformdaki tüm listeleri bulun
  2. Her girişle ilgili iletişim bilgilerini toplayın
  3. İletişim bilgileri mevcutsa onlara bir e-posta gönderin

Hepsi bu kadardı. Teknoloji, yalnızca sonuca giden bir araç olarak hareket etti . Bunu benim için yapmak için bir Excel elektronik tablosu kullanabilseydim, bunun yerine bunu seçerdim. Ancak, ben bir Excel uzmanı değilim ve bu yüzden o zaman bana en mantıklı gelen yaklaşımı kullandım.

İyileştirme Alanları

İyileştirebileceğim birçok alan vardı:

  • Başlamak için pek aşina olmadığım bir dil seçtim ve başlangıçta bir öğrenme eğrisi vardı. Çok kötü değildi, çünkü Python'u almak çok kolay. Yeni başlayan yazılım meraklılarının bunu birinci dil olarak kullanmasını şiddetle tavsiye ederim.
  • Açık kaynak teknolojilerine çok fazla güvenmek. Açık kaynaklı yazılımın da kendi sorunları vardır . Kullandığım ve artık aktif geliştirmede olmayan birden fazla kitaplık vardı, bu yüzden erken sorunlarla karşılaştım. Bir kütüphaneyi içe aktaramadım, yoksa kütüphane görünüşte zararsız nedenlerden dolayı başarısız olurdu.
  • Bir projeyi tek başına ele almak eğlenceli olabilir ama aynı zamanda çok fazla strese neden olabilir . Bir şeyi göndermek için çok fazla ivmeye ihtiyacınız var. Bu proje hızlı ve kolaydı, ancak iyileştirmeleri eklemem birkaç hafta sonunu aldı. Proje ilerledikçe motivasyon ve ivme kaybetmeye başladım. Bir iş bulduktan sonra projeyi tamamen terk ettim.

Kullandığım Kaynaklar ve Araçlar

Otostopçunun Python Rehberi - Genel olarak Python öğrenmek için harika bir kitap. Python'u yeni başlayanların ilk programlama dili olarak öneriyorum ve buradaki makalemde birden çok üst düzey şirketten teklif almak için onu nasıl kullandığımdan bahsediyorum.

DailyCodingProblem: Günlük kodlama sorunlarını e-postanıza gönderen ve üst düzey teknoloji şirketlerinden en son programlama sorunlarından bazılarını içeren bir hizmettir. Kupon kodum olan zhiachong'u 10 $ indirim için kullan!

BeautifulSoup - Web tarayıcımı oluşturmak için kullandığım şık yardımcı araç

Python ile Web'den Kazıma - Python ile web kazımanın nasıl çalıştığını öğrenmek için yararlı bir kılavuz.

Yalın Başlangıç ​​- Bu kitaptan bir fikri test etmek için hızlı prototip oluşturmayı ve bir MVP oluşturmayı öğrendim. Buradaki fikirlerin birçok farklı alana uygulanabilir olduğunu ve ayrıca projeyi tamamlamama yardımcı olduğunu düşünüyorum.

Evernote - Bu yazı için düşüncelerimi derlemek için Evernote'u kullandım. Kesinlikle tavsiye ederim - bunu yaptığım her şey için kullanıyorum.

Dizüstü bilgisayarım- Bu benim şu anki evdeki dizüstü bilgisayarım, bir iş istasyonu olarak ayarlanmış. Bu, çok var daha kolay eski BenQ dizüstü daha birlikte çalışmak için, ancak her ikisi de sadece genel programlama çalışmaları için çalışacak.

Kredi:

Danışmanım ve iyi bir arkadaşım Brandon O'brien, prova okumak ve bu makaleyi nasıl geliştirebileceğime dair değerli geri bildirimler sağlamak için.

Leon Tager, iş arkadaşım ve bana çok ihtiyaç duyulan finansal bilgeliği kanıtlayan ve duş yapan arkadaşım.

Buraya kaydolarak sektör haberlerine, rastgele haberlere kaydolabilir ve yeni makaleler yayınladığımda ilk öğrenen siz olabilirsiniz.

Zhia Chong, Twitter'da bir yazılım mühendisidir. Seattle'daki Reklam Ölçüm ekibinde çalışıyor ve reklamverenler için reklamların etkisini ve YG'yi ölçüyor. Takım işe alıyor !

Onu Twitter ve LinkedIn'de bulabilirsiniz .