>> [MÜZİK OYUN]
ROBERT KRABEK: Merhaba, beyler.
Benim adım Robert Krabek ve bir Sizi öğretim olacak
ile web'de kazımak nasıl Ruby kütüphane Nokogiri,
ve bir Chrome uzantısıdır Kimono.
>> Yani ilk var bir kaç şey sen misin
Eğer oldum belki yapabilirim Bugüne kadar tüm psets yapıyor
ve çalışma alanıdır Biraz dolmak.
Biz aslında sadece gidip edebilirsiniz Sizin için yeni bir çalışma alanı oluşturmak
sadece yepyeni bir proje yapmak için.
Devam etmek istiyor musunuz Yani eğer CS50 şablon kimliği çalışan
Eğer şu anda sahip olduğu, çekinmeyin ve sadece can
CFLAGS ile Nokogiri yüklemek equals-- mücevher Nokogiri yükleyin.
Ama aksi takdirde ben size göstereceğim Yeni bir tane kurmanız için nasıl.
Ve sonra bu temelde Daha fazla eğitim tekerlekleri bırakarak.
Eğer sanki Ve kodlama ediyoruz Sadece Sublime falan kodlama.
Bunu üzerine vardiya Yani eğer.
>> Yani bu mevcut CS 50 ID olduğunu söylüyorlar.
Sadece burada Cloud9 gidebilirsiniz.
Sen pano gidebilirsiniz.
Bu Workspaces sekmesini getirmek gerekir.
Ve sonra sadece tıklayabilirsiniz Burada, Yeni Bir Çalışma Alanı oluşturun.
Yeni çalışma alanı ad, belki test ya da kazıma.
Ve sonra burada bu özel sekmesini tıklatın, Bunun yerine CS50 şablonları sekmesinin.
Ve sonra sadece gidebilirsiniz ve yeni bir çalışma alanı oluşturmak.
>> Ben zaten burada bir çalışma alanı oluşturduk.
Yani biz bu birlikte çalışma olacak.
Ve yeni bir oluşturduğunuz takdirde Çalışma alanı Özel sekmesinde öylesine,
Sadece taş yüklemek yazabilirsiniz Burada gitmiyor Nokogiri.
Tamam, biraz donmuş var.
Ama Nokogiri yüklemek mücevher yazabilirsiniz.
Ve hepsi olması gerektiği tesisata var.
>> Dediğim gibi, önce hala iseniz senin CS50 şablon kimliği çalışan,
Sadece CFLAGS yazmanız gerekir taş Nokogiri yüklemek eşittir.
Ve ben zaten yükledim Burada ben bunu yapmayacağım.
Ancak için, aşağıdaki birlikte, bunu yapmak için çekinmeyin.
>> Eğer Nokogiri var bu yüzden bir kez çalışma alanı veya kütüphane yüklü,
Sana biraz vereceğim Ruby sözdizimi bir kurs ve
Nokogiri Ruby kütüphane çünkü.
Yani bazı temel bilmek gerekir Nokogiri ile çalışmak için Ruby sözdizimi.
Yani bazı temel farklar alıştığınız ne
belki çalışıyoruz eğer Bugüne kadar sadece C ve PHP,
hiçbir türüyle değişkenleri bildirmek.
Sen noktalı virgül kullanmayın, hangi bir rahatlama türüdür.
Şimdi etrafta hiçbir parantez var ya da döngüleri sırasında, mesela.
Sadece kod bloğunu var ve o zaman o sonunda sona erdirdi.
Hiçbir artı var artı veya eksi eksi, sadece bu yüzden
zaman için biliyorum Eğer döngüler için yapıyoruz,
sadece artı ve eksi eşittir eşittir.
Ve yerine karma içerir Eğer ihtiyaç kullanmak ve edeceğiz
çalışıyor olursa olsun kütüphanesi programınıza yüklemek için.
>> Ruby derlenmiş bir dil değildir.
Yani başka bir rahatlama.
PHP nerede daha benzer var bu bir dil var.
Herhangi bir Ruby komut çalıştırabilirsiniz Yakut takip ile yazdığınız
senin komut dosyası veya programın adıyla.
Bir Ruby programı olduğunu belirtmek için, Sadece .rb yerine .c ile bitirin.
Ve değişken vardır Ruby boyutlu diziler,
hangi olduğunuzda süper uygun kazıma ve belki de eklemek istiyorum
Eğer bir diziye kazınmış ettik veriler.
Sen yeni bir dizi malloc zorunda değilsiniz ve Yeni diziye eski dizi kopyalayın.
Sadece ile ekleyebilirsiniz iki ok işaretleri.
Ve hiçbir karakter var, orada Sadece tek harf dizeleri.
Yani biraz daha kolay olmalı.
>> Yani biz sadece sana vereceğim Bazı temel Ruby sözdizimi örnekleri.
Yani burada yerine görebilirsiniz çizgi çizgi, Ruby Yorumlamak için
Sadece pound işareti kullanın.
Ve Değişken bildirimi, sen Sadece değişken eşittir tip
ne olursa olsun değişken olmak istiyorum.
Onlar dizeleri olabilirler.
Sen dizi var hangi Eğer değerlerle doldurmak.
koyar ve baskılar benzerdir.
Bizim amaçlarımız için, Tek fark gerçekten
Bu açılımı, hangi koyar koyar, sadece yeni bir satır koyar
karakter ne olursa olsun at yazdırdığınız ediyoruz.
>> Biz küçük verirsen yüzden Burada gösteri,
Bu Şarkı söylemeyi kes çalışabilir yeni bir terminal açın.
Bu tüm görebilirsiniz Benim terminalde bulunan dosyalar.
Ve ben sadece çalıştırırsanız Yakut, yakut intro.rb, o
Merhaba beş koyar Mather, Quincy, Taşıyıcı.
Adams.
Hepsi bu yüzden orada ilan diziler.
HEDEF KİTLE: Robert yapabilirsiniz yazı tipi biraz daha büyük?
ROBERT KRABEK: Evet.
Bunu yapamazsınız çünkü ben yakınlaştırma yapabilirsiniz görünüşte Terminal yazı tipleri yakınlaştırmak.
>> Yani yazdırmak nasıl senin terminale değişkenleri.
Da kullanabilirsiniz bir dize içindeki değişkenler.
Yani son zamanlarda PHP, Eğer öğrenmiş olabilir
dize enterpolasyon olduğunu.
Yani burada bir göz atın, eğer, ben ise , üç değişken, isim, kütüphane beyan
ve dil ve ben koyar, ben Bir dize yazmak, merhaba benim adım.
Ve sonra yerine PHP dize enterpolasyon versiyonu
hangi Böyle biraz daha bakar, Eğer bir pound işareti ve
Bir kaşlı ayraç, ve sonra değişkenin adı.
Ve bu yazdırmak istiyorum, nasıl ki var, ne olursa olsun, değişken adıdır.
>> Ve o zaman da yapabilirsiniz dizeleri bitiştirmek.
Ruby süper yapar artı işareti kolay.
Sadece tek bir dize var Soldaki artı değişkeni
başka bir dize artı bir dize ya da.
Ben bu çıktısını eğer, olması gerektiği Yani Sadece benim adım Robert Merhaba, söylüyorlar.
Seni Ruby Nokogiri öğretim olacak.
>> Ve Sadece bu teyit edelim Gerçekten case-- yakut intro.
Merhaba, benim adım Robert.
Seni Ruby Nokogiri öğretim olacak.
>> Devam ediyoruz, başka ifadeleri ise, Biraz farklı
Eğer için kullanılmış olabilir ne C de çalışıyoruz eğer
Sen parantez gerek yok.
Sen küme parantezi gerekmez.
Ve yerine else if bölgesinin Bir birleştirilmiş elsif var.
Buraya Yani, ben beyan ettik kadar x Gördüğümüz gibi burada, x hala 5'tir.
X 3'ten az ise Yani, küçük koyacağım.
O 7, orta, başka büyük az ise.
Yani 5 orta sayıdır.
Ve ben ucu Bu kod bloğunu sonunda.
>> İşte döngü için benim olayım.
Ve bu sözdizimi da biraz degisik.
0 beş sadece esas 0 ile 5 arasında bir dizi ilan edilir.
Yani dizide beş yuva var.
Ve o her yuva için Dizi, ben i artan olacak.
Yani bu 4 0'dan 5'e kadar, veya 0 yazdırır.
Ve bu orta yazdırır.
>> Ve ben sadece aracılığıyla yangını edeceğiz.
Siz erişimine sahip olacaktır Daha sonra bu kodu.
Yani siz bu kendinizi çalıştırabilirsiniz.
>> Yani bu temel while döngüsüdür.
Bu sadece j yazdırmayı olacak, biz 5 vurmak kadar 1'den başlayarak.
>> Süper hızlı Ruby kurs bir işlev yazmak nasıl.
Yerine, demek, int faktöryel sayı, sadece def var.
Ve esasen sen Burada bir işlev tanımlama.
Bu olacak Fonksiyonun adı,
ve bu herhangi bir değişkenler olduğunu sen fonksiyonuna geçmek istiyorum.
Sen içinde ise ifadeleri olabilir.
Sen dönebilirsiniz.
Bu durumda, konum Bir yinelemeli tanımlayan
uygulanan faktöryel fonksiyonu.
Yani biz sadece arama işlevleri Böyle Ruby.
>> Ben bu ben, tanımladığınız Yani 3 geçmek, faktöriyel arayabilirler
ve daha sonra 3 sayı değişken olacaktır Ben işlev içinde kullanabilirsiniz.
Ve bu to_s sadece dönüyor Bir dizeye faktoryel değerini döndürür.
Aksi takdirde bu atacağım Bir hata ben, oh diyerek
Bir string-- baskı olamaz hatırlayacağınız gibi, çünkü
bunun nedeni string-- konur koyar faktöryel bir numara döndü.
Yani biz o dönüştürebilirsiniz gibi gibi bir dizeye.
Ve tersine, sen de dönüştürebilirsiniz to_i bir tamsayı bir dize.
>> Yani her şey süper basit hale Ben sadece bu açıklama ise, tasarruf
ve faktör işlevi çalıştırmak.
Biz görmek gerekir 3 Bu faktöryel 6.
Ve bu gerçekten doğrudur.
>> Böylece Ruby senin kurs var.
Ve şimdi Ruby biliyorum, biz gidebiliriz Temel Nokogiri için kurulmuş kazıma.
Esasen sen tüm yapmanız gereken, Ruby, kütüphaneler gerektirir.
Ve bizim için kullandığımız olacak Kütüphane openURI olarak Nokogiri.
Ve o zaman ne sen sanıyor- ve olacak Sana bu-- sözdizimi vermek
Eğer yaptığınız kadar URL açmak olduğunu C URL için duran bir cURL isteği.
>> Yani URL'sini almak Söz konusu web sitesi.
Bir değişkende saklayın.
Ve sonra o arama yapabilirsiniz kullanarak benzersiz HTML etiketleri için değişken
.css komutu.
Ve sonra çıktısını alabilirsiniz istediğiniz yere içeriği.
Bir veritabanında başlayabilirsiniz.
You can bir dosya çıktı, ya da hatta sadece ekrana yazdırmak.
>> Bu yüzden size temel bir kazıyıcı göstereceğim.
Burada biz var görebilirsiniz Nokogiri gerektiren açık-uri gerektirir.
Sizin temel set up, hadi , belge veya doktor diyorlar
Nokogiri :: HTML, hangi açık eşittir openURI tarafından bildirilen komut
kütüphane.
Ve biz bu için, arama olacak dörtlü yaşayan olabilir sen,
Boston'da listelenir bisiklet için Boston Craigslist bisiklet bölümünde
bir site.
>> Eğer alışık değilseniz Yani cURL ile, ben sadece edeceğiz
Gerçek hızlı cURL ne yapacak göstereyim.
Ben URL'ye tüm almak istedim Craigslist sitesi, ben kıvırmak yazarsanız,
Sadece URL tüm dökümlerini Craigslist bisiklet sitesinden
Benim terminalde üzerine.
Özellikle değil kullanışlı ben çünkü
El ile gitmek istiyorum ve Ben arıyorum şey bulmak.
Ama sadece bu yüzden yapabilirsiniz Aslında olduğumu bakın
Eğer bakarsanız, doğru kodu kullanarak bikes-- içinde Craigslist için URL adresinde
nedense bulunamadı değil.
Bu sayfaya bakarsanız ve URL bakmak
Bu aynı olmalıdır Ben sadece göndermek cURL isteği.
Ve gerçekten de, varlık ne var doc değişkeninde saklanır.
>> Yani bizim kod geri döndüğünüzde, biz Daha sonra bu doc ​​değişkeni çalışabilir
css kullanarak.
Yani tüm almak istedim demek span.txt olan etiketler,
ve bu etiketi içinde tüm etiketleri.
Ve neden isteyebilirsiniz Bunu yapmak, seni ağlarken duymak?
>> Biz Elemanı kontrol edin, bu size bir verir URL yapılandırılmıştır nasıl dökümü.
Ben aşağı kaydırma varsa Burada görebilirsiniz
Ne bu farklı her elementleri temsil eder.
Yani belki de erişmek istediğiniz Bu özel unsur.
Yani Chrome geliştirici kullanıyorum araçlar Elemanı kontrol edin için.
Ben buraya bakınız bu o olabilir Bir Bir yayılma alanı içindeki bir etikettir
txt bir sınıf ile etiketleyin.
>> Yani bu alır bizim İlk operasyon hangi
etiketi doc.css yayılma olduğunu Tüm bu URL içinde arıyorum.
Ve sonra .txt CSS gibi çok çalışır Sadece CSS yazarken yapar
tarafından HTML dosyaları Bir sınıf belirterek.
Yani bu özel operatör olacak txt sınıfına sahip bir span etiketi belirtin.
Ve sonra bir boşluk bırakırsanız, Bu o etiketi içinde gidecek
ve daha sonra bir o içindeki bir etiket bulmak.
>> Yani sadece bu koyarsanız Terminal, ben gerektiği
esasen her şeyi görmek mümkün bu sınıf txt bu zaman dilimi içinde olduğunu.
Yani biz bir gitmek olduğunu vereceğiz.
yakut craigslist-kazıyıcı.
Ve gerçekten bu bize tüm bu verir Çeşitli listeleri etiketleri olduğunu
Craigslist sayfasında bulunmaktadır.
>> Biz geri gitmek, yani biz bu açabilirsiniz içine bir şey biraz daha kullanışlı.
Belki biz sadece linkleri istiyoruz.
Bu etiketi içinde, ben de olacak çünkü yolun köprü var
bu sayfayı gider.
Yani burada bu kodu bakarsanız, ne yapacağım, yerine .css biridir
Ben at_css gidebilirsiniz.
Ve bu sadece ilk alacak tüm bunları unsuru.
Ben olsaydım o kadar yapmak için çok Kod Ben sadece daha önce gösterdi,
yerine, tüm dönen Bu nedenle, sadece olur
Bunlardan ilkini döndürür.
At_css operatörü nasıl çalıştığını Yani bu.
>> Yani biz saklamak istediğiniz yol, ilk Etiketin tüm.
Ve bizi bir- verecektir çünkü biz hala css kullanmak için gidiyoruz.
Ama bu, çünkü verecek bize geri etiketleri bütün bir dizi,
Biz erişmek için gidiyoruz İlk unsur.
Yani bu başka bir yolu olduğunu yapabilirsiniz olduğunu eğer herhangi bir öğesine erişmek
elemanlarının bir dizi bilgisi döndürülür,
Bir şey davranabilirsiniz çünkü esasen bir dizi olarak .css döner.
Ve sonra erişmek için gidiyoruz Bu köprü referans niteliği.
>> Yani bir göz atın, eğer, eğer Eğer burada gerçekten yakın görünüyordu
sadece temelde eğer URL çubuğuna bakmak,
Bu yol olduğunu Eğer kazıma için gidiyoruz.
Biz sadece tekrar çalıştırın Yani, ve biz bunu kaydettiğiniz emin olun.
Evde kontrol edebilirsiniz.
Bu aslında bu bağlantı ile eşleşen.
>> Peki neden bu kullanmak isteyebilirsiniz?
Eğer kazımak istiyorsan o ve sahip sayfa
gibi bağlantıları bir sayfa Craigslist, yok sen
Daha sonra gitmek isteyebilirsiniz Bu bağlantıların her birine
ve kazıma Bu içeriği olan
Biz yapacağız tam olarak ne olduğunu.
>> Eğer olarak yola sahip bu yüzden bir kez Değişken, ben artık gerçekten
Bunu yazdırarak umurumda.
Ben sadece bir değişken olarak saklamak gerekir.
Ve sonra ben başka erişebilirsiniz Ben erişmek aynı şekilde sayfası
ilk etapta doktor.
URL ile hariç, biz gidiyoruz dize enterpolasyon kullanmak için
gibi ben açıklayan Yakut daha önce üzerinde eklemek için
kökün ucuna yolu.
>> Peki bunu yapmak için gidiyor olmasıdır Bu yolda koymak için gidiyor
Daha önce alıntı, ve o çevirmek
yeni bir öğe haline, sen istersen bu-- örneğin first_listing gönderilsin.
Ama terk edeceğim Şimdilik öğe üzerinde o
ben burada kullanıyorum çünkü ne.
>> Yani açıklamasını almak istedim demek Craigslist ilk gönderme.
Yani buraya gitmek istiyorum.
Ben Elemanı inceleyin üzerine tıklıyorsunuz Yine, bu açıklama nedeniyle.
Buraya gidip görmek istiyorum Ben bulup bulamayacağını nasıl olabilir
Bu eşsiz etiketi için arama yapabilmek.
Bu durumda, var bizi bir kimlik,
için arama sonraki şekilde etiketler, hangi bir hashtag ile.
>> Sınıflar için şunları yapabilirsiniz yüzden nokta operatörünü kullanın.
Yani .txt, txt bir sınıf belirttiğini karma oysa bir kimlik belirtir.
Yani bu durumda, etiketi bölüm ve kimlik postingbody olduğunu.
>> Yani bu gider ve bulur birinci-- biz çünkü
Bu gider at_css-- kullanarak ilk elemanını bulur
bölümün etiketi ile çıkageldi ve postingbody kimliği.
Ve sonra metin öğesi erişebilirsiniz o öğenin .text ile döndü.
Ve sonra biz saklayabilirsiniz açıklama bu.
>> Yani şimdi bir var Değişken açıklama
biz diyelim ki, yapmak mümkün olabilir I / O dosya. Yani Ruby I / O dosya
I / O dosya çok benzer C bir dosyayı açmak nerede.
Biz buna yazabilir.
Ve sonra biz bu dosyayı kapatın edeceğiz.
>> Yani burada, biz sadece adlandırma ediyoruz Bazı keyfi değişken dosya.
Biz de sadece burada bu atabilirdi.
Biz depolamak değişken var File.Open gibi açık dosya.
Ve biz, bu dosyaya yazıyoruz bu yüzden w operatörü ile açın.
Sonra içine dize koymak .puts operatörü ile dosya.
Ve sonra biz değişkeni koymak biz Bu dosyaya, yazmak istiyorum.
Ve sonra biz sadece dosyayı kapatın.
>> Bu yüzden go ahead ve bu çalıştırırsanız, Bu belgeyi üretmek gerekir
description.txt hangi olacak Bunun içinde bu açıklama var.
Yani eğer hayır Durdur-- çalıştırın.
Bu, bir metin dosyası üretti var umarım aynı şey.
Yani yeni bir gönderme var olmuş olabilir Ben durduk iken kadar geldi.
Olmuştur gibi Ve gerçekten de görünüyor.
Yani biz bu klasik bisiklet giderseniz, 1962 1966 için, o maç gibi görünüyor.
Ve oraya gitmek.
>> Yani en temel var kazıma işlevselliği.
Biz yerine olabilirdi Sadece bu dosyaya yazma,
Biz bir dizi şeyler ekleyebilirsiniz.
Üç diziler bildirmek Yani, başlık, fiyat ve açıklama.
Ve biz şimdi doktor öğe üzerinde çalışan ediyoruz.
Biz geçmesi ve olabilir span.txt tüm bulabilirsiniz.
Ve bu bir dizi döndürür unutmayın, bulduğu tüm öğeleri.
Ve sonra Ruby, sadece kullanabilirsiniz her madde arasında yineleme için .each
Dizinin.
Ve sonra her madde için, Ben sadece bunu diyeceğim
o çünkü bir bağlantı o aslında ne.
>> Yani her link.css nokta a.hdrlnk koyarsanız, Bu aslında linke gidiyor
ve bu bağlantının içinde başka bulgu HTML öğesi ve ilgili sınıf.
Yani biz ne hatırlıyorum Bu, span.txt oldu
Beni sadece geri gidelim See- edebilirsiniz span.txt içinde gerçek quick--
diğer sınıfların bir sürü var.
Yani span.txt içinde biz arıyoruz Bir sınıf hdrlnk ile bir etiket için.
Bu yüzden bana sadece bulalım Siz gerçek hızlı için.
>> Burada gördüğünüz Yani, bu bir bir etikettir bu sınıf txt span içinde bulunuyor
Bu sınıf hdrlnk vardır.
Ve gerçekten de ne var Biz almak için çalışıyoruz.
>> Bu yüzden artık tüm saklamak için çalışıyoruz başlık içinde bu bağlantıların.
Ve sonra yazdırmak için gidiyoruz Bu bağlantıların her biri dışında.
Üzgün ​​değil.
Biz yazdırmak için gidiyoruz Bunların her birinin fiyatı.
Yani gerçekten bu çalışmasına izin Hızlı ve ne yaptığını görüyorum.
>> Yani bu sadece temelde gitti bağlantıların her birinden
bu da, söz konusu etiket girip ve daha sonra fiyat çıkardı.
Ve yaptım çünkü sonra Başlığında her şey var,
Biz sadece orada başlık saklanır ettik.
Biz sadece bağlantıyı saklanır ettik Dizi başlık içinde.
Ve döngü işlemi için bu, nerede yerine a.hdrlnk gitmeyi,
Biz span.price arıyoruz.
Ben sadece gerçekten hızlı bir şekilde bulabilirsiniz Yani eğer fiyat, sen eleman incelerseniz,
Eğer bir karış olduğunu görürsünüz fiyat sınıfı.
Ve bu temelde nasıl Biz orada fiyatını alıyoruz.
>> Yani gerçekten kazıma temel olgu.
Yani hepsi olsun nasıl Bir sayfada elemanları
Bu, diyelim ki, zaten URL'sini biliyorum.
>> Biz almak istiyorsanız Yani derinlemesine daha küçük
Biz sayfalarında sayfaları kazımak olabilir.
Bu, örneğin, I olacak Bir CSV dosyası çıktısı olacak.
Yani burada csv kadar gerektiren ediyorum Yakut yok, çünkü kendi içinde,
özelliğe sahip Sadece çıkış CSV dosyalarını.
Yani süper basit.
Bana sadece bir sonraki gidelim.
Biz dosya g / Ç kaplı. Yani bu Bu C. kadar benzer
Ve biz Kimono geçmeden önce, Ben sadece nasıl gerçekten hızlı gösteririz
manzaraları içinde siteleri kazımak için.
>> Yani biz zaten öğrendim Ruby diziler de tanımlanabilir.
Yani sadece bir ilan ediyorum keyfi dizilerin demet
ben içinde veri depolamak olacaktır.
doc aynı şekilde çalışıyor önceki dosyasında olduğu gibi.
Biz bulma gidiyoruz span.txt yılların her.
Biz zaten biliyoruz.
Bu konteyner her hangi mesafede Bağlantı istediğimiz tüm verileri vardır.
>> Yani burada ne yapıyoruz, her içindir span class txt link, biz gidiyoruz
ve biz, bir etiket buluyoruz Bunun ilk elemanını bulma.
, .css Bir dizi döndürür Unutmayın, olarak yani sadece erişemez.
Biz ilk elemanı bulmak için gidiyoruz.
Bu birinin bir dizi olsa bile öğe, bu sözdizimini kullanmak zorunda,
ve daha sonra href niteliğini çekin.
>> Bu yüzden bu daha önce yaptım.
Yani bu tanıdık görünmelidir.
Ve şimdi biz bir dizi var Bizim tüm bağlantıları denir yolları
Kullandığımız istediğiniz gidiyoruz.
Bu yüzden tüm bu dizi varsa Biz Kullanmak istediğiniz yolları,
biz o zaman her biri için bir öğe oluşturabilirsiniz Bu sayfaların biz bu sayfayı açtığınızda.
Biz de gördüğümüz gibi Yani daha önce nerede sözdizimi
yolu ile dize enterpolasyon yapıyor Burada, bu yüzden sözdizimi sadece yolu olduğunu.
Ve ben bu isim olabilir Değişken herhangi bir keyfi bir isim.
>> Bu önemli biridir.
Bunun anlamı, olacak dizidir her öğe erişen olacak.
Ama yolları yolu derken, Bu yollarda her eleman için anlamı,
yol diyoruz ve bu kullanın.
Bu sizi gibi esasen for döngüsü yapmak ve i int kullanın.
Yani siz yolu davranabilirsiniz artan oluyor değişken.
>> Sonra, bu her biri için, Bu bağlantıların her birine gidin.
Biz madde sayfasında depolamak Çünkü, bu yüzden her zaman yeni bir sayfa oluştururken
Biz erişebilirsiniz.
Ve sonra yeni sayfa içinde bulmak span.postingtitletext, span.price,
ve daha sonra bölüm # postingbody.
Biz zaten bölüm # postingbody kaplı Biz açıklama bakıldığında.
>> Bu yüzden Craigslist sonrası görmek gidebilirsiniz, Sadece başlık bakıyoruz eğer,
Eğer buraya kadar görebilirsiniz açıklık postingtitletext.
Orada olduğunu Ve bu yüzden.
Ve sonra fiyat, yapabilirsiniz fiyat span class ile erişebilirsiniz.
>> Bu yüzden de belki olabilir URL'yi saklamak istiyorsanız.
Yani biz sadece bu edeceğiz Yine, bir dizi depolamak,
Eğer arıyorsanız çünkü Craigslist, sen
Muhtemelen eğer, bir yol istiyorum olacak Eğer sizi ilgilendiren bir şey görmek
geri o sitesine gidin.
Yani sadece saklamak istediğiniz referanslar uğruna URL.
>> Bu sadece temelde for döngüsü için başka sözdizimi.
Ben sadece onun yerine paths.each yapabileceği indeksine sahip yollarında yol için.
Ve bu sözdizimi Ruby for-- yol, biz burada ne yaptığını
Her öğe için bir değişken bildirmek.
Ve endeks gibi davranır döngüler için C i.
Yani takip edebilirsiniz endeksidir ne.
>> Yani burada sadece bir olduğunu Biraz uygun bir şey
Eğer kazıyıcı çalışan yaparken için.
Eğer yüzlerce sayfa kazıma ediyorsanız, o asılı değil emin olmak için,
o, sadece çıkış olacak Bu sayfaya erişen çalışıyorum,
ve emin hala devam ediyor.
Ama bizim amaçlı, çünkü yüz ürün var,
Ben bunlardan sadece üçünü erişmek için gidiyorum Burada zaman biterse yok ki.
>> Biz gelmeden önce Ama, ben sadece Eğer gerçekten hızlı göstermek için gidiyorum,
Ben başlığı çıkışı olacaktır, fiyat, açıklama ve URL
Ben kazınmış ettik bağlantıların her.
Ve sonra bu sadece CSV kitaplığı için sözdizimi.
Bir CSV açın.
Bu onu arayacağım budur.
Yazma do ile açın.
Ve sonra CSV dosyası olacak Eğer her şeyi giren ediyoruz.
Bu sadece bir aklı çek Bana o çalışıyor olduğunu bilmek.
Ve bu benim aklı çek tamamlanmadan olduğunu bilmek.
Yani bir satıra başlık atıyorum CSV, fiyat, url, açıklama,
Tüm CSV satırlara.
>> Biz gidip koşmak Yani eğer Bu şimdi-- ve ben sadece
Ben Durdur-- yerine biriktirdim emin olun sadece terminale çıktısı,
Biz CSV olmalı üretilen oluyor dosyası.
Yani burada biz CSV görebilirsiniz üretilen oldu dosyası.
Bu çıkışı olan Ben sadece koştu scape.
Burada gördüğünüz gibi, ERİŞİM 0, 1, 2, 3.
Bu başlıklar şunlardır, Fiyatlar, açıklamaları.
Ve biz bu CSV bakarsak biz oluşturulan ettik dosya,
Eğer onun burada çıktısı görebilirsiniz.
Bu Excel değil, bu yüzden değil satırlar ve sütunlar halinde biçimlendirilmiş.
Ama nasıl hayal edebilirsiniz biçimlendirilmiş olabilir.
>> CSV virgülle ayrılmış değerler için duruyor.
Yani bu bir satır olabilir hayal edebiliyorum.
Ve her virgül olur ayrı bir sütun göstermektedir.
Caution-- Sadece bir kelime Bazen sen
virgül bir sürü şeyler kazıma.
Eğer çıktısı eğer öyleyse Bir CSV dosyasına o
bu olabilir değil çıktı düşündüğünüzden yolu.
>> Yani temelde hepsi Temel HTML kazıma orada
Nokogiri ile sayfaları.
>> İnternet varlık Yani Yenilikçi o kadar gelmiştir olarak
Bir daha otomatik ve GUI ile daha az sağlam olsa versiyonu
Çeşitli web siteleri kazıma sürümü.
Ve bizim amaçlı Ben gösteren olacağım
Kimono adında bir Chrome uzantısı.
Ve yapmanız gereken tüm gezinmek olduğunu Eğer kazımak istediğiniz sayfaya.
Sen bir ilgi alanı tıklayın.
Sen alanları kalibre, otomatik olacak, çünkü
o ne düşünüyor algılamak Eğer kazıma olmak istiyorum,
ve o zaman sadece bir API oluşturmak.
>> Biz eğer öyleyse bunu göstermek için Craigslist, aslında işe yaramaz.
Ve bu geri gidiyordu ne o kadar sağlam değil varlık hakkında söyledi.
Bu sorun API oluşturarak vardır.
Ama bir göstergesi olarak o ne yapacağını,
Chrome uzantısı yüklerseniz, Yapmanız tüm bunu üzerine tıklayın.
Bu sayfayı Kimonofies ve sonra seni komut dosyası istediğiniz şey üzerine tıklayın.
>> Yani tıklayınız olsaydı Bu, o vurgulamak
ne düşünüyor ben istiyorum o sayfayı kazıyarak olacak.
Bu yüzden belki de bu listeleri diyoruz.
Bu benim seçmiş kaç öğe olduğunu.
Ve ben sadece onaylamak ya da bazı inkar edemez Diğer önerilen liste
o eklemek için Ne kazınmalıdır edilecektir.
>> Yani şimdi biz orada görebilirsiniz yüz ürün seçildi.
Ben başka bir alan olmasını istiyorsanız ben Ayrıca buna ilişkin olan kazımak,
Ben fiyat kazımak istediğini söylüyorsun yanı sıra, o zaman ben de aynı şeyi yapabilirsiniz.
>> Yani burada bu kadar nasıl bir gösteri var çok daha az sağlam, şimdi çünkü
Bunun yerine şehir toplayıp İstediğim sadece fiyat.
Ve şimdi 200 şey aldım oluyor.
Geri dönüp silebilirsiniz.
Tekrar deneyebilirsiniz.
Ama hiçbir garanti.
Bu, bazen nasıl işliyor.
Burada gördüğünüz gibi, şimdi burada 96 kadar diyor.
Bu bağlantıların çoğu aldı bulunuyor İstediğiniz kazımak, ama değil
mutlaka hepsi.
>> Kimono bir başka yararlı bir araç olsa Gelişmiş Özellikler gidebilirsiniz
Burada, Gelişmiş 'e gidin, ve size gösterecektir
Eşsiz dökümü HTML erişmek için bir yol
Eğer kazımak istiyorum etiketleri.
Yani listeleri için, buraya bakarsanız, Eğer div p açıklıklı bir yayılan erişmek eğer,
aslında sadece kullanabilirsiniz senin Nokogiri kodunda bu,
nerede span.txt vardı önce listeleri her erişebilirsiniz.
Ben sadece metin istiyorsanız liste içinde
I could giriş div uzay p uzay açıklıklı uzay açıklıklı alanı,
ve aynı etkiyi elde ediyorum.
Ve o sizin için ilgi kim Normal ifadeler kullanarak,
o da size düzenli olarak vermek olur girdi dize ifadesi tür
şeyler bulmak için Eğer bulmaya çalışıyorlar.
>> Yani bir başka güzel özellik var Eğer paginate nerede Kimono,
hangi Keşke kazıyabilirler değil Bu sayfanın sonuçları,
Ben bu küçük tıklayabilirsiniz Burada düğme, Sayfalandırmayı,
düğme o olur belirtmek Bir sonraki sayfaya götür,
ve o zaman sadece bilecek sonraki sayfaya yineleme yapabilirsiniz,
ve daha sonra Şeyin sürece tüm kazıma o elbette-- aynı biçim olduğu gibi
yanı sıra bu bağlantıların tüm scape.
>> Kimono istemiyor çünkü bunu için Biz ne yaptık, Craigslist ile çalışmak
Harvard Crimson Kimonofied ettik edilir.
Ben tür bazı çıkardı ettik Üst makaleleri, burada teyit özellikli.
Bunların hepsi söyleyin.
Bu API derledik vaktinden önce sizin için.
Ama yapacağını aksi neler Sadece Bitti düğmesini tıklatın olacağını edilir.
API ayrıntıları girin.
Olarak ayarlayın ya Otomatik veya manuel tarama.
Yani güncelleme olabilir sizin Veri her 15 dakikada,
haftalık, günlük, ne istersen.
Senin API adlandırın.
API oluşturun.
Sizin yararınız için, ben yarattım Zaten ön sayfa API kızıl.
>> Yani sadece bir oluşturmak Kimono üzerinde hesabı ve bu
sizin için tüm API'leri saklayacaktır.
Yani aslında hepsi senin Ayrı ayrı sıyrıklar.
>> Burada bakarsanız Yani, bu Ben topladım görüşlerini bağlantılar.
Bunlar özellikli vardır Ben topladım bağlantılar.
Ve bu en çok okunan Ben derledik bağlantılar
bu en son API scape dan.
>> Burada gördüğünüz Yani, Bu, özellikli olacağını
Bu görüşler olacaktır, bu örnekte bunlar,,
Ben hepsini kombine ettik tek koleksiyon.
Ama sadece onunla oynamak durumunda biraz, sen o kadar ayırabilirsiniz
ve ancak o kadar bölmek sürece istediğiniz
biçimlendirme biraz farklıdır.
>> Sadece bu ile oynamak için, tarama, downsides biri kurmak
Eğer sadece yukarı tarayabilir olduğunu Bir seferde 25 sayfaya kadar.
Bu sınırlayan faktörlerden biri.
Ama burada, bunu ayarlarsanız manuel tarama için, bu
bunu söyleyebilirim nasıl Verilerinizi güncellemek için.
Ve burada kendi tarama geçmişini görebilirsiniz her şeyi sen sürünerek ettik.
Ve siz geri gidebilirsiniz, kaydolmak, tüm farklı şekillerde ile oynamak
Bu değiştirmek ve verileri kullanabilirsiniz.
>> Kimono kadar ayarlanabilir bağlantıları içinde bağlantıları kazıyın.
Ve ilk bunu yapacağını bağlantıların bir listesini kazıma,
ve daha sonra da bu API kullanarak Başka bir API noktası atlamayın
Eğer senaryoyu oluşturmak.
Ama daha karmaşık ne bugün içine almak için gidiyoruz.
>> Yani Kimono var.
Biz profesyoneller bahsedeceğiz ve Nokogiri ve Kimono eksilerini.
>> Nokogiri, gerçekten hızlı.
Bu test etmek kolay.
Sadece bir şey koyar edebilirsiniz Konsol, kolay yapılandırmak için.
Tam olarak ne karar verebilirsiniz Eğer kazımak ve saklamak istiyorum.
Hiçbir sayfa sınırları vardır.
Aslında böyle kazımak için kullanılır 1800 Güney Afrika okul web siteleri
Ben yaptım staj için e-postalar için.
>> Böylece, mümkün en iyi uygulama olsa Senaryoyu bölmek olacaktır.
O zaman, başarısız Çünkü eğer Eğer bir şey alamadım.
Ama yüz yaparsanız, belki bir seferde 200 sayfa,
o zaman biraz şans, en azından Özellikle, parça parça getting it
Kötü internet varsa.
>> Ne yazık ki, sadece HTML kazımak olabilir.
Eğer var ise dinamik olarak yüklenen pages--
ve ben size bir örnek göstereceğim Bir saniye içinde kayık gibi
Nokogiri maalesef Bu kazımak olamaz.
>> Ancak Kimono kullanımı da kolaydır.
Gördüğün gibi, esasen var Bir nokta ve tıklama.
Bu JavaScript kazıyabilirler.
Ne yazık ki, maksimum var Eğer kazımak kaç sayfaları.
Bazen biraz var yapılandırmak için zor.
Bu karıştı alır.
Ama kesinlikle var bir şey düşünmeye
Eğer bir olması için çalışıyoruz değilsen Süper sağlam bakımı sıyrık.
Sadece almak istiyorsanız hızlı bir şekilde sayfanın kapalı her şeyi,
Daha sonra Kimono bir gerçekten İyi aracı kullanmak için.
Daha önce de bahsettiğim gibi, var Kimono gelişmiş özelliği
Bunu nasıl gösterir Eşsiz HTML erişmek
Hatta süper yararlı unsur, Eğer Nokogiri çalışıyorsanız.
>> Yani biz, Kayak sitesine gitmek örnek, orada görebilirsiniz o--
ya da belki göremiyorum.
Ama Kayak için size URL'yi gösterirseniz, Bu aslında sadece kaynak URL.
Bu varlık URL öncesinde olduğu ne olursa olsun JavaScript betikleri tarafından modifiye
onlar oluyor var.
Ve farklı bakmaya gidiyor eleman teftiş dan.
>> Yani geçmesi ve eğer kontrol edin Eleman kadar maç
kaynak kodu kod, bu kadar aslında farklı olacak.
Bu yüzden Nokogiri esasen dinamik olarak yüklenen siteler kazıyın olamaz.
Nokogiri Çünkü Kaynak URL kazıma,
Kimono Aslında ise aslında ne konum kazıma
Select Element görüyorum.
>> Yani içinden ve ben gidersem denemek ve Kimonofy Kayık,
Aslında gidebilirsiniz ve fiyatı seçin.
Bu, biraz daha zor ve bu durumda, bu kadar
aslında bu fiyatı görünce Bu farklı olarak.
Eğer configure-- oysa Böylece veya bu dinamik yüklenen olmasaydı,
Eğer Nokogiri yapılandırabilirsiniz Bunların hepsi olsun.
>> Biçimlendirme hafif olduğu için Bu firma için farklı
o geri kalanına oranla gibi Bunlardan, ve burada görebilirsiniz
aslında gitti ve Seçilen tüm uçuş fiyatları.
Belki seçmek istiyorum hem de uçuş süresi.
Ve ben geçmesi ve sıralama bu şekilde yapılandırın.
Ben bunu istemiyorum.
Ben sadece önümüzdeki uçuşun zaman istiyorum.
Ve daha sonra bu bir çift sonra geçiyor, o resim alır.
Yani Kimono bayağı akıllı.
Sadece oldukça sağlam değil.
>> Başka var kullanabileceğiniz alternatifleri.
Ve ben burada sana onlara göstermek gerekir.
Eğer daha rahat iseniz Yerine belki Ruby Python,
Bir kütüphane var Güzel Çorbası denir.
Bunu kullanabilirsiniz.
Bu Nokogiri çok benzer.
Birkaç daha fazla özelliklere sahiptir.
Bir HTML etiketi bulabilir ve Daha sonra yukarı veya yanlara doğru hareket ettirin.
>> PyQt var.
Bu aslında dinamik kazıyabilirler siteler, bu tür çünkü
olmak süsü bir WebKit olduğunu Orada aslında olmayan bir tarayıcı
Bir tarayıcı olma.
Yani hepsi için bekleyecekti JavaScript sonra ilk yük ve
gitmek ve denemek ve siteyi kazıyın.
>> Eğer Ruby ile sopa istiyorsanız, size Nokogiri itibaren bir seviye yukarı gidebilir.
Sizinle Capybara kullanabilirsiniz Bir Poltergeist sarıcı.
Ve bu aslında can aslında aynı şeyi yapmak
PyQt'de, gibi olan bir WebKit olmasıdır.
Bunun için bekler JavaScript ilk yüklemek için.
Eğer yeterince onunla aylaklık ise, hatta şeylerin üzerine tıklayın alabilirsiniz.
>> Bir bağlantı varsa Böylece Klasik bir href burada değildir
yolunu kolayca erişilebilir ve algıladığı bazı JavaScript şey
Bir tıklama, aslında bunu yapabilir.
Daha popüler kütüphane Bir kullanıcı simüle
PhantomJS olan JavaScript yer almaktadır.
Bu tabii ki dinamik kazıyabilirler siteleri bu temelde çünkü
Chrome gibi davranarak kullanıcı arabirimi olmadan.
>> Ve sonra, tabii ki en Sağlam, ancak yavaş seçenek,
Bir Selenyum tarayıcı otomasyon.
Ve ne yazık ki, olmak gitmiyorsun
senin CS50 IDE içinde bunu yapmak mümkün.
Esasen ne Çünkü yapıyor, o senin Chrome'u çizmeler ise
Firefox, ne olursa olsun tarayıcı Kullanmak istediğiniz,
ve fare belki izler Eğer yazdığınız her türlü hareketi,
ve sadece sıralama Bu işlemi otomatik hale getirir.
Yani bir tür olarak geliştirilmiştir web sitesi otomasyon test aracı.
Ama bir sürü insan kullanımı Web kazımak için Selenyum
aksi takdirde bir olduğunu Zorluk çok kazıma
bu, daha hızlı bazı araçlar ile.
>> Yani ben web kazıma için var hepsi bu.
İyi eğlenceler.
>> HEDEF KİTLE: Soru.
>> ROBERT KRABEK: Evet.
>> HEDEF KİTLE: karma bir mekanizma var mı Web sitesi böylece temelde olabilir
daha sonra onu geçmesi.
ROBERT KRABEK: Evet.
Bu yüzden de, bizim koymak Örnek, her ikisi için de,
Biz doc içine tüm web sitesi koymak.
Ve böylece aslında sadece sürebilir Değişken doc bir dosyaya yazmak ve.
Ben isteseydim Yani, I could HTML dosyası olarak yazmak,
izlenerek ve daha sonra yerine OpenURI ve cURL isteği,
sonra ben sadece doc açmak olabilir HTML ve o arayın.
>> HEDEF KİTLE: Ama koruyabilirsiniz online deneyim tür
çevrimdışı yaparken.
Örneğin. ne zaman sen birkaç saat uçan,
Ben temelde arşiv istiyorum Bütün web sitesi. [Duyulamaz]
>> ROBERT KRABEK: Evet, tam olarak-- var: yani tam anlamıyla ne yaptığını, bu
her şeyi alıyor edilir bu URL'de olurdu.
Biz cURL koştu Yani, bu kadar Bu HTML Tüm alarak
ve saklamadan var Değişken doc içinde.
O zaman sen ne olursa olsun Eğer doc ile yapmak istiyorum.
Sen bir dosyaya çıktı elinden geleni.
HEDEF KİTLE: Ama bu kadar bağlı değil.
Bu dinamik değil.
Bu doğru değil özyinelemeli değil mi?
Ne demek istediğimi görüyor musun?
Ben temelde bir çeşit karma çalışıyorum Benim sabit diskinizde tüm web
bu yüzden ben temelde bunu yapabilirdi internet olmadan birkaç saat karıştırıldı.
>> ROBERT KRABEK: Doğru.
Ben had-- Yani eğer öyleyse nerede dosya I / O değil mi?
Yani bu dosya g / Ç olduğunu. Peki yerine ne söylüyor Bu nedenle, ben bu craigslist.html diyoruz.
Ben açmak istiyorum.
Ben içine koyar doc olur.
Ben dosyayı kapatın.
Ve sonra sırf CS50 IDE Bu, bulut üzerinde ne olursa olsun var olduğunu.
Buraya gitmek olabilir.
Ben dosyayı indirebilirsiniz.
Ve sonra benim sabit diskinizde olurdu.
Yani o şekilde yapabiliriz.
Evde iseniz ya da kullanarak değil CS50 IDE, Sublime falan gibi,
Bu, çünkü daha kolaydır Bu, lokal olarak mevcut tüm
internete bağlı değil.
>> İZLEYİCİ: Anlıyorum.
Bu belirli bir sorun için olduğunu.
Böylece özyinelemeli yapabilir misin sen Birkaç katmanları derin tür şey gidilir?
>> ROBERT KRABEK: Ben klasörleri indirebilirsiniz Bu ise, hem de sen soruyorsun.
HEDEF KİTLE: Evet.
>> ROBERT KRABEK: Serin.