[MUZYKI] ROBERT KRABEK: Cześć, chłopaki. Nazywam się Robert Krabek i Będę uczyć was jak złom w internecie z Nokogiri, która jest biblioteką Ruby i Kimono, która jest rozszerzeniem Chrome. Więc po pierwsze istnieje Kilka rzeczy, które was może to zrobić, czy może byłeś robi wszystkie psets tak daleko a roboczy jest się trochę pełne. Faktycznie możemy tylko iść i utworzyć nowe miejsce pracy dla Ciebie po prostu zrobić nowy projekt w. Więc jeśli nie chcesz, aby kontynuować pracy w ID szablonu CS50 że obecnie, czuć się swobodnie, a można po prostu zainstaluj Nokogiri z flagami equals-- gem install Nokogiri. Ale poza tym to ci pokażę jak ustawić nową jedną. A następnie jest zasadniczo upuszczając więcej kół treningowych. A ty kodowania, jak gdybyś tylko kodowania w Sublime lub coś. Jeśli więc przesunąć go. Tak powiedzieć, to jest twój obecny CS 50 ID. Możesz po prostu pójść do Cloud9 tutaj. Możesz przejść do panelu. Należy przywołać kartę Obszary robocze. A potem wystarczy kliknąć tutaj, Utwórz nowy obszar roboczy. Nazwij nowy obszar roboczy, Może testy, lub skrobanie. A następnie kliknij tutaj tę kartę niestandardową, zamiast karty szablonów CS50. A potem można tylko iść i utworzyć nowy obszar roboczy. Ja już stworzył przestrzeń roboczą tutaj. Więc będziemy pracować z tym. A jeśli tworzony jest nowy Obszar roboczy, więc z karcie Niestandardowe możesz po prostu wpisać gem install nokogiri, który nie jest tutaj. OK, to trochę zamrożone. Ale można wpisać gem install Nokogiri. I to powinno być wszystko, jest do instalacji. Jak powiedziałem wcześniej, jeśli nadal pracuje w swoim CS50 szablonu ID, wystarczy wpisać CFLAGS równa gem install Nokogiri. A ja już zainstalowany to tutaj, więc nie będę tego robić. Ale dla tych, którzy po razem, zachęcamy do tego. Więc kiedy już twój Nokogiri Obszar roboczy lub biblioteki zainstalowane, Mam zamiar dać trochę kursu katastrofy w składni Ruby bo Nokogiri jest biblioteką Ruby. Więc musisz wiedzieć kilka podstawowych Ruby składni do pracy z Nokogiri. Więc niektóre podstawowe różnice od tego, co masz w zwyczaju Być może, jeśli już działa do tej pory tylko w C i PHP, zadeklarować zmienne bez typu. Nie używać średników, co jest swego rodzaju ulgę. Nie ma nawiasów obecnie około na lub w czasie pętli, na przykład. Trzeba tylko blok kodu, oraz następnie umieścić końcówkę na końcu tego. Nie ma także Plus minus minus, więc po prostu wiedzą, że do kiedy robisz dla pętli, tylko plus i minus równa równi. I zamiast hash to, będziesz używać wymagają, a następnie co biblioteka stara załadować do swojego programu. Ruby nie jest skompilowany języka. Tak to już inna ulga. To jest bardziej podobna do PHP, gdzie jest językiem interpretowanym. Można uruchomić dowolny skrypt Ruby piszesz z Ruby, a następnie przez nazwę skryptu lub programu. Oznaczać, że jest to program, Ruby, po prostu zakończyć go .rb zamiast .c. I tam są zmienne wielkości tablice w języku Ruby, co jest bardzo wygodne, gdy jesteś skrobanie, a może chcesz dołączyć Dane że już ociera do tablicy. Nie musisz się malloc nowej tablicy i kopia starej tablicy do nowej tablicy. Możesz po prostu dołączyć do dwa znaki strzałek. I nie ma żadnych znaków, nie tylko pojedyncze struny nas. Tak, że powinno być trochę łatwiej. Więc po prostu podać kilka przykłady kilku podstawowych składni Ruby. Więc widać, że zamiast ukośnik ukośnik, aby skomentować w Ruby, po prostu użyć znaku. I deklaracja zmiennej, można wpisz zmiennych równych co chcesz zmienna być. Mogą być łańcuchami. Możesz mieć tablicę, która można wypełnić wartościami. puts i druki są podobne. Dla naszych celów Jedyną różnicą jest to naprawdę które stawia, co oznacza stawia, po prostu kładzie nową linię charakter na co drukujesz. Więc jeśli dajemy mały Demonstracja tutaj, możemy uruchomić ten with-- otwarcie nowego terminalu. Możesz zobaczyć wszystkie te Pliki, które są w moim terminalu. A jeśli po prostu uruchomić Ruby, Ruby intro.rb, to stawia się pięć Witaj Mather, Quincy, Carrier. Adams. Więc to wszystko nie ma do deklarujących tablic. PUBLICZNOŚCI: Robert, można dokonać czcionka trochę większy? ROBERT KRABEK: Tak. I mogę powiększyć, ponieważ nie można przybliżyć czcionek terminali pozornie. Tak to jest jak drukowanie Zmienne do terminalu. Możesz także użyć zmienne wewnątrz łańcucha. Tak niedawno w PHP, może się nauczyłeś że jest interpolacja ciąg. Więc jeśli spojrzeć tutaj, jeśli I Oświadczam, trzech zmiennych, nazwę, bibliotekę, i język, i stawia, ja Napisać ciąg, witam mam na imię. I wtedy zamiast PHP wersja interpolacji smyczkowy która wygląda trochę więcej jak to, masz znak funta, a następnie kręcone nawiasów, a następnie nazwę zmiennej. A to, jak chcesz wydrukować, powiedzmy, co nazwa zmiennej jest. A potem można również łączenia ciągów. Ruby sprawia, że ​​bardzo proste ze znakiem plus. Trzeba tylko jeden ciąg z lewej strony plus zmiennej lub inny ciąg plus ciąg. Więc jeśli mogę wydrukować na to uwagę, to powinien powiedzieć tylko cześć, mam na imię Robert. Będę uczyć można Nokogiri w Ruby. I niech tylko potwierdzić, że jest rzeczywiście case-- Ruby Intro. Witam, mam na imię Robert. Będę uczyć można Nokogiri w Ruby. Idąc dalej, jeśli else, to trochę inaczej od tego, co może być wykorzystane do jeśli już pracuje w C Nie musisz nawiasów. Nie musisz nawiasy klamrowe. I zamiast innego, jeśli, to jest łączone elsif. Więc tutaj, jeśli mam oświadczył x górę tu, jak widać, jest jeszcze 5 x. Więc jeśli x jest mniejsza niż 3, to będzie umieścić małe. Jeśli jest to mniej niż 7, średnich, inny duży. Tak więc 5 to numer średniej. I zakończyć ten blok kodu z końcem. Oto mój pętli. I ta składnia jest również trochę inny. W 0 do pięciu prostu zasadniczo jest uznającej tablice 0 do 5. Więc nie ma pięć gniazd w tablicy. A następnie dla każdej szczeliny w które tablica, będę zwiększając i. Należy więc w drukowania 0 do 5, lub od 0 do 4. I to powinno wydrukować średnio. A ja po prostu płonąć przez. Chłopaki będą mieli dostęp do tego kodu później. Więc chłopaki mogą uruchomić to sami. Więc to jest twój podstawowy pętli while. To po prostu drukowania j, zwiększany o 1, aż trafiliśmy 5. Super szybkie Ruby Crash Course w jaki sposób napisać funkcję. Zamiast, powiedzmy, int silnia Numer, musimy po prostu def. I w istocie jesteś definiowania tutaj funkcję. To ma być nazwa funkcji, i to jest jakieś zmienne, które Aby przejść do funkcji. Możesz mieć, jeśli deklaracje wewnątrz. Możesz powrócić. W tym przypadku mamy definiowania Rekursywnie Funkcja silnia realizowane. Więc po prostu wywoływać funkcje w Ruby tak. Więc jeśli mam zdefiniowane to, jak mogą dzwonić silni, przechodzą w 3, i 3 będzie zmienna liczba że można używać wewnątrz funkcji. I to właśnie jest to_s obracając wartość silni powrócić do łańcucha. W przeciwnym razie będzie to rzucić błąd mówiąc, oh, nie można wydrukować string-- bo jak pamiętamy, stawia kładzie string-- bo to silnia powrócił numer. Więc możemy przekonwertować do łańcucha jak np. I odwrotnie, można także konwertować łańcuch na liczbę całkowitą z używamy metody to_i. Więc co wszystko super proste, jeśli tylko skomentować to się zapisz i uruchomić funkcję silni. Powinniśmy być w stanie zobaczyć że silnia 3 wynosi 6. I to jest rzeczywiście prawda. Więc to jest twój kurs awarii w Ruby. I teraz, że wiesz, Ruby, możemy udać się na do podstawowego Nokogiri zeskrobywania skonfigurować. Zasadniczo wszystko co musisz zrobić, to, w Ruby, wymagają bibliotek. A dla naszych celów będziemy za pomocą Biblioteka OpenURI jak Nokogiri. A to co ty do-- i będziesz daje składnię this-- jest otwarciu adresu URL dużo, jak w curl wniosek, co oznacza C URL. Więc bierzesz adres URL strona w pytaniu. Przechowywać ją w zmiennej. A potem możesz przeglądać, że Zmienna unikalnych znaczników HTML z wykorzystaniem .css poleceń. A potem możesz wyjście treści tam, gdzie chcesz. Możesz zacząć w bazie danych. Można wypisać w pliku, lub nawet po prostu wydrukować go na ekran. Więc pokażemy podstawowe skrobaczki. Więc tu widać mamy wymagające Nokogiri, wymagają otwartych uri. Podstawowy zestaw do, powiedzmy, Nazywamy to dokument lub doc, równa Nokogiri :: HTML otwarty, który jest Polecenie przekazane nam przez OpenURI biblioteka. I będziemy poszukiwania, dla tych Ci, którzy mogą żyć w quad, na rowery, które są w Bostonie wymienione na części rower Boston Craigslist teren. Więc jeśli nie znasz z dyni, będę po prostu pokazać, bardzo szybko, co cURL zrobi. Gdybym chciał, aby wszystkie URL z strona Craigslist, jeśli typ curl, to po prostu zrzuca wszystko URL z serwisu rowerowego Craigslist na moim terminalu. To nie jest szczególnie przydatne, ponieważ nie mam Aby ręcznie przejść i znaleźć coś szukam. Ale tylko tak można zobaczyć, że jestem naprawdę przy użyciu odpowiedniego kodu, jeśli spojrzeć na URL Craigslist w bikes-- z jakiegoś powodu nie znalazł. Jeśli spojrzeć na tej stronie i spojrzeć na URL, powinno to być identyczna cURL wniosku, że po prostu wysłać. I rzeczywiście, to, co jest przechowywane w zmiennej doc. Więc kiedy wrócisz do naszego kodu, możemy może to działać na tej zmiennej doc za pomocą .css. Tak mówią Chciałem, aby wszystkie znaczniki, które są span.txt, i wszystkie tagi A wewnątrz tego znacznika. I dlaczego może chcemy to zrobić, słyszę płacz? Jeśli Sprawdź element, to daje podział, jak adres URL jest skonstruowany. Jeśli mogę przewinąć w dół tutaj można zobaczyć co każdy z nich inaczej Elementy reprezentuje. Może więc chcę, aby uzyskać dostęp to dany element. Więc używam Chrome dewelopera Narzędzia do kontroli elementu. Widzę tutaj, że ta jest tag w rozpiętości tag z klasą txt. Więc to dostaje się do naszego Pierwsza operacja, która jest rozpiętość doc.css, który jest tag, który Szukam w ciągu całego tego adresu URL. I wtedy .txt działa podobnie jak CSS czy po prostu pisząc CSS w plikach HTML przez określająca klasę. Więc ten konkretny operator podaj tag zakresu z klasy txt. A potem, jeśli mogę zostawić przestrzeń, ten będzie następnie przejść w tym tagu a następnie znaleźć tag w ramach tego. Więc jeśli po prostu umieścić to, aby terminal, powinienem być w stanie zobaczyć zasadniczo wszystko który jest w tym przedziale klasy txt. Więc damy, że w podróży. ruby Craigslist-skrobak. I rzeczywiście, że daje nam wszystko to etykietki z różnych ofert, które znajdują się na stronie Craigslist. Więc jeśli wrócimy, możemy wyłączyć tę w coś trochę bardziej użyteczne. Może chcemy tylko linki. Ponieważ w tym tagu, będę również mają hiperłącze ścieżki że ta strona idzie. Więc jeśli spojrzeć na ten kod tutaj co zrobię, to zamiast .css, Mogę iść at_css. A to po prostu pierwszy elementem wszystkich tych rzeczy. Więc gdybym miał to zrobić nawet w Kod po prostu wcześniej wykazano, zamiast zwrócić wszystkie o tym, że będzie po prostu powrót pierwszego z nich. Tak to jest, jak działa operator at_css. Dlatego chcemy, aby przechowywać ścieżka całego pierwszego znacznika. A ponieważ da nam A-- więc my wciąż będziemy używać .css. Ale ponieważ to ma dać nas z powrotem cały szereg znaczników, będziemy dostępu pierwszym elementem. Tak więc jest to kolejny sposób, że można uzyskać dostęp do konkretnego elementu, jeśli tablicę elementów która jest zwracana, ponieważ można traktować niczego, .css powraca jak tablicy, zasadniczo. A potem mamy zamiar uzyskać dostęp do hipertekst atrybut odniesienia tego. Więc jeśli spojrzeć, jeśli wyglądasz tu naprawdę blisko, Jeśli tylko zasadniczo spojrzeć na pasku adresu, jest to ścieżka, że idziesz do skrobania. Więc jeśli po prostu uruchomić to znowu, i upewnij się, że mamy zapisany. Możesz sprawdzić w domu. To rzeczywiście pasuje na ten link. Dlaczego więc możemy chcieć to wykorzystać? Jeśli chcesz, aby zeskrobać Strona i ma strona linków, takich jak Craigslist nie, to Może chcesz iść to Do każdego z tych ogniw a następnie zeskrobać Zawartość tego, co jest dokładnie to, co mamy zamiar zrobić. Więc skoro masz ścieżkę jako Zmienna, już nie bardzo dbają o drukowaniu go. Po prostu trzeba przechowywać go jako zmienną. A potem mam dostępu innym Strona w ten sam sposób mogę uzyskać dostęp do doc w pierwszym miejscu. Z wyjątkiem adresu URL, jedziemy użyć interpolacji ciąg jakbym opisywał w Ruby wcześniej, aby dołączyć ścieżka do zakończenia korzenia. Więc co to będzie zrobić, to to będzie umieścić na ścieżce że ociera wcześniej a następnie skręcić, że do nowej pozycji, co chcesz nazwać it-- first_listing, na przykład. Ale mam zamiar zostawić jest w pozycji na teraz, ponieważ to, co używam tutaj. Tak mówią chciałem uzyskać opis pierwszego oddelegowania w Craigslist. Więc pójdę na dół. Chciałbym kliknij Sprawdź Element ponownie, gdyż jest do opisu. Pójdę na dół i zobaczyć czy mogę znaleźć jak mógłbym być w stanie szukać tego unikalnego znacznika. I w tym przypadku ma identyfikator, który prowadzi nas na nasz kolejny sposób poszukiwania tagi, które jest z hashtag. Więc dla klas, można użycia kropki. Więc .txt określające klasę txt, podczas mieszania określa identyfikator. Tak więc w tym przypadku znacznik jest Sekcja, a identyfikator jest postingbody. Więc to idzie i znajdzie first-- bo jesteśmy za pomocą at_css-- tym idzie i znajduje się pierwszy element, który wyjdzie z tagiem sekcji i ID postingbody. A następnie można uzyskać dostęp do elementu tekstowego tej pozycji powrócił z .text. A potem możemy przechowywać że w opisie. Więc teraz, że mamy Zmienna opis, być może będziemy w stanie zrobić, powiedzmy, plik I / O. Więc plik I / O w Ruby jest bardzo podobny do pliku I / O w C, gdzie otworzyć plik. Moglibyśmy napisać do niego. A potem będziemy zamknąć ten plik. Więc, po prostu nazywanie plik, trochę arbitralne zmienną. Możemy również umieścić to właśnie tutaj. Mamy zmienną że jesteśmy przechowywania otwarty plik jako z File.Open. I piszemy do tego pliku, więc otworzyć go z operatorem w. A następnie kładziemy string w plik z operatorem .puts. A potem umieścić zmienną że Aby zapisać do pliku w tym. A potem po prostu zamknij plik. Więc jeśli mamy iść dalej i uruchomić to, to powinna przedstawić dokument z description.txt który będzie mają ten opis w nim. Więc jeśli mogę uruchomić it-- nie. Jest produkowany plik tekstowy, miejmy nadzieję, że to samo. Więc być może istnieje nowy wpis że się wydarzyło, gdy rozmawiałem. I rzeczywiście, wygląda na to, że nie było. Więc jeśli idziemy do tego klasycznego roweru, 1962 1966, który wydaje się pasować. I proszę. Więc to najbardziej podstawowa Funkcjonalność skrobania. Mogliśmy zamiast tylko pisanie do tego pliku, możemy dodać rzeczy do tablicy. Więc jeśli Oświadczam, trzy tablice, Tytuł, cena i opis. A my działa na pozycji doc teraz. Możemy przejść i znaleźć wszystkie span.txt. I pamiętaj, to zwraca tablicę wszystkich elementów, które znajdzie. A następnie w Ruby, można po prostu użyć .each do iteracji każdej pozycji tablicy. A następnie dla każdej pozycji, Idę tylko to nazwać związek, bo to zasadniczo, co to jest. Więc jeśli mogę umieścić każdy a.hdrlnk link.css kropka, jest to rzeczywiście będzie link i znalezienie w tym linku innym Element HTML i odpowiednią klasę. Więc jeśli pamiętamy, co to był The span.txt, można See- pozwól mi tylko wrócić prawdziwe quick-- ciągu span.txt mamy dużo innych zajęć. Więc wewnątrz span.txt, szukamy dla tagu z hdrlnk klasy. Więc pozwól mi tylko stwierdzić, że dla Was bardzo szybko. Więc można zobaczyć tutaj, to jest tag to w przestrzeni klasy txt że ma hdrlnk klasy. I to jest rzeczywiście to, co staramy się uzyskać. Więc jesteśmy teraz stara się przechowywać wszystkie z tych linków wewnątrz tytule. A potem będziemy drukować z każdego z tych linków. Nie, przepraszam. Jedziemy do wydrukowania cena każdej z nich. Więc uruchom to naprawdę szybkie i zobaczyć, co robi. Tak to tylko w zasadzie poszedł przez każde z ogniw z kolei dostępne tag w pytaniu, a następnie wyciągnął cenę. I tak się stało, ponieważ po masz wszystko w tytule my właśnie przechowywane tytuł nie. Właśnie przechowywane link w tytule tablicy. I w tym do pracy w pętli, gdzie zamiast do a.hdrlnk, my szukamy span.price. Więc, czy mogę po prostu bardzo szybko znaleźć cena, jeśli sprawdzić element, zobaczysz, że jest to okres z klasy cenie. I to w zasadzie jak jesteśmy coraz cenę tam. Więc to jest naprawdę Podstawowa sprawa skrobania. W ten sposób można uzyskać wszystkie elementy na stronie że, powiedzmy, że już znasz adres URL. Więc jeśli chcemy uzyskać trochę bardziej w głębi, możemy zeskrobać stron w stronach. I na tym przykładzie, będę być wyprowadzania do pliku CSV. Więc jestem wymagająca csv tutaj ponieważ Ruby nie, wewnątrz siebie, posiada funkcjonalność po prostu wyjść plików CSV. Więc to jest bardzo proste. Pozwól mi tylko przejść do następnego. Zrobiliśmy plików I / O. Więc to jest podobny do tego, jak to jest w C I zanim przejdziemy do Kimono, Ja po prostu pokazać, że naprawdę szybkie, jak zeskrobać witryn w zabytków. Więc już nauczyli się, jak zadeklarować tablic w języku Ruby. Więc ja tylko uznającej kilka dowolnych tablic że będę przechowywania danych wewnątrz. doc działa w ten sam sposób jak to miało miejsce w poprzednim pliku. Jedziemy na znalezienie każdy z span.txt tych. Wiemy już, że. To jest pojemnik, w którym każde Link ma wszystkie dane, które chcemy. Więc to, co robimy jest dla każdego ogniwo span class txt, jedziemy w a my znalezienie tag, znaleźć pierwszy element, który. Pamiętaj, .css zwraca tablicę, więc nie można po prostu do niego dostęp, jak jest. Mamy zamiar znaleźć pierwszy element. Nawet jeśli jest to tablica jednym pozycja, musisz użyć tej składni, a następnie wyciągnij atrybut href. Więc zrobiliśmy tego wcześniej. Tak to powinno wyglądać znajomo. A więc teraz mamy tablicę zwane ścieżki wszystkich naszych linków które mamy zamiar użyć. Więc jeśli mamy taką tablicę wszystkich ścieżek, które chcemy wykorzystać, możemy następnie utworzyć element dla każdego z tych stron, kiedy otwieramy tę stronę. Tak jak widzieliśmy również na składnia przed, w których robi interpolacji ciąg ze ścieżką tutaj, więc składnia jest tylko na drodze. I mógłbym nazwać to Zmienna dowolną nazwę. To jest ważne. To jest tablica, że ​​będziesz mieć dostęp do każdego elementu. Ale kiedy mówisz do ścieżki w ścieżkach, Oznacza to, dla każdego elementu w ścieżkach Nazywamy to ścieżka, i używać. Jest to w zasadzie jak w przypadku zrobić dla pętli i użyć int i. Więc można traktować ścieżkę jako Zmienna, która jest zwiększany. A następnie dla każdego z nich, iść do każdej z tych linków. Ponieważ jesteśmy przechowywania go w stronę przedmiotu, więc tworzymy nową stronę za każdym razem, mamy do niego dostęp. A następnie w ramach tej nowej strony, znaleźć span.postingtitletext, span.price, a następnie sekcja # postingbody. Mamy już uwzględnione w sekcji # postingbody kiedy spojrzał na opis. Tak więc możemy go zobaczyć w poście Craigslist, jeśli jesteś po prostu patrząc na tytuł, można zobaczyć go tutaj, postingtitletext zakresu. A to dlatego, że tam jest. A następnie za cenę, można do niego dostęp z span class ceny. Więc my także być może Aby zapisać adres URL. Więc po prostu uruchomić to ponownie, należy go przechowywać w tablicy, bo jeśli szukasz na Craigslist, jesteś prawdopodobnie będzie chciał drogę do, jeśli widzisz coś, co Cię interesuje, wrócić do tego miejsca. Więc po prostu chcesz się zapisać adres URL referencje dobra. To jest po prostu w zasadzie inna składnia pętli for. I może po prostu nie paths.each zamiast od ścieżki do ścieżki z indeksu w. I ta składnia jest Ruby for-- Ścieżka jest to, co zrobiliśmy tutaj, deklarowanie zmiennej dla każdej pozycji. I wskaźnik zachowuje się jak I w C dla pętli. Więc można śledzić z tego, co indeks jest. Więc tutaj jest tylko mało wygodna rzecz, do kiedy używasz skrobak. Jeśli skrobanie setki stron, aby upewnić się, że nie wisi, To po prostu wyjście, Mam dostępu do tej strony, i upewnić się, że to nadal. Ale dla naszych celów, ponieważ jest sto przedmiotów, Zamierzam przejść tylko trzy z nich tak, że nie zabraknie czasu tutaj. Ale zanim przejdziemy do tego, że jestem po prostu zamiar pokazać naprawdę szybkie, Będę wyprowadzania tytuł, cena, opis i adres URL każdego z linków, które mam pościerane. I to jest właśnie Składnia biblioteki CSV. Po otwarciu pliku CSV. To jest to, co mam zamiar to nazwać. Otwórz go z zapisu do. A potem CSV będzie plik jesteś wprowadzania wszystko do. To jest po prostu sprawdzenia dokonywane przez żeby wiedzieć, że to działa. A to jest moja kontrola poprawności wiedzieć, że to jest zakończone. Więc Kładę tytuł do wiersza w CSV, cena, url, opis, wszystko do wierszy w pliku CSV. Więc jeśli mamy iść i prowadzony to now-- i po prostu upewnij się, że już zapisane it-- zamiast prostu wyprowadzania go do zacisku powinniśmy mieć CSV Plik, który jest produkowany. Więc tutaj widzimy CSV Plik, który został wyprodukowany. To wyjście z scape, że po prostu uciekł. Jak widać tutaj, Dostęp do strony 0, 1, 2, 3. Są to tytuły, ceny, opisy. A jeśli spojrzymy na to CSV Plik, który mamy generowane, widać jej wyprowadzać tutaj. To nie jest program Excel, więc nie jest to sformatowane w wierszach i kolumnach. Ale można sobie wyobrazić, jak to może być sformatowany. CSV oznacza oddzielonych przecinkami wartości. Więc można sobie wyobrazić, że to może być jeden rząd. I każdy przecinek będzie oznaczać oddzielną kolumnę. Tylko słowo caution-- Czasami jesteś skrobanie rzeczy z wieloma przecinkami. Więc jeśli wyprowadzania go do pliku CSV, może to nie wyjście sposób myślisz. Więc to w zasadzie wszystko nie jest skrobanie podstawowy tryb HTML stron z Nokogiri. Więc istoty Internetu innowacyjny, ponieważ ma pochodzić z bardziej zautomatyzowane i GUI wersja, choć mniej wytrzymałe wersja skrobanie różnych stron internetowych. A dla naszych celów Będę demonstrując rozszerzenie Chrome nazywa Kimono. I wszystko co musisz zrobić, to poruszanie się do strony, którą chcesz do skrobania. Kliknięcie na polu zainteresowania. Skalibrować pola, ponieważ automatycznie wykrywania, co myśli chcesz być skrobanie, a potem po prostu stworzyć API. Więc jeśli byliśmy do wykazania go na Craigslist, to faktycznie nie działa. I to jest to, co się dzieje z powrotem do mówią o że nie było ono tak silne. Ma problemy z utworzeniem API. Ale jako demonstracja z tego, co by zrobił, jeśli zainstalować rozszerzenie Chrome, wszystko co robisz jest po kliknięciu na nim. To Kimonofies stronę, a następnie kliknij na rzeczy, które chcesz skrypt. Więc gdybym kliknij że to podkreślenie co to myśli, że chcą być zgarniania tej strony. Więc może ja nazywam to aukcji. Jest to, jak wiele elementów wybrałem. I mogę tylko potwierdzić lub zaprzeczyć, niektóre innych proponowanych ofert aby ją dodać do co zgarniania. Więc teraz możemy zobaczyć tam wybrano sto przedmiotów. Jeśli chcę mieć kolejne pole, że również złom, który jest związany z tym, że chcę zeskrobać cenę jak dobrze, to mogę zrobić to samo. Więc oto pokaz, jak to znacznie mniej wytrzymałe, bo teraz jest podniesienie miasto zamiast z tylko cena, że ​​chcę. A teraz to podniósł 200 rzeczy. Możesz wrócić i usunąć. Możesz spróbować ponownie. Ale nie ma gwarancji. To jest, jak to działa czasami. Jak widać tutaj, teraz mówi 96 tutaj. To podniósł większość linków że chcesz skrobać, ale nie niekoniecznie wszystkie z nich. Innym przydatnym narzędziem Kimono choć to można przejść do zaawansowanych funkcji tutaj, przejdź do Advanced i będzie to pokazać podział wyjątkowy sposób, aby uzyskać dostęp do kodu HTML tagi, które chcesz zeskrobać. Więc dla ofert, jeśli spojrzeć na tutaj, jeśli masz dostęp do div rozpiętość p span, rzeczywiście można po prostu użyć to w kodzie Nokogiri, gdzie wcześniej mieliśmy span.txt dostęp do każdej z list. Jeśli chcę tylko tekst w ramach aukcji, Mógłbym wejście przestrzeń div p Przestrzeń rozpiętość przestrzeni rozpiętość przestrzeni A, i to osiągnąć ten sam efekt. A dla tych z was, którzy są zainteresowani w za pomocą wyrażeń regularnych, zdarza się również daje regularne Wyrażenie rodzaj sznurka do wejścia znaleźć rzeczy starasz się znaleźć. Więc jest jeszcze jedna fajna funkcja Kimono, gdzie można paginate, który jest nie tylko można drapać wyniki tej stronie Mogę kliknąć na ten mały Przycisk tutaj, Paginacja, określić przycisk, który zabierz mnie do następnej strony, i wtedy będzie to po prostu wiem, że może iteracji do następnej strony, a następnie zeskrobać wszystkie the-- tak długo, jak to jest ten sam format course-- scape wszystkie te linki, jak również. Więc dlatego, Kimono nie chce pracy z Craigslist, co zrobiliśmy jest mam Kimonofied Harvard Crimson. Ja wyciągnąłem niektóre rodzaju top ciekawe artykuły, potwierdzają tutaj. Powiedz, wszystkie z nich. Mam skompilowany tego interfejsu API Ci z wyprzedzeniem. Ale poza tym, co można zrobić, jest to po prostu kliknij przycisk Gotowe. Wprowadź swoje dane API. Ustaw go albo automatyczny lub ręczny indeksowania. Więc może zaktualizować danych co 15 minut, co tydzień, codziennie, co chcesz. Nazwij API. Tworzenie interfejsu API. Dla własnej korzyści, jakie stworzył Crimson API już na pierwszej stronie. Więc po prostu utworzyć Konto na kimono, i to będzie przechowywać wszystkie swoje API dla Ciebie. Więc w zasadzie to wszystko swoje oddzielne różne zadrapania. Więc jeśli spojrzymy tutaj, to jest linki opinii, które zebrałem. Są to ciekawe linki, że już zebrane. I te są najbardziej przeczytać linki, które zebrałem z tego najnowszego API scape. Więc jeśli można zobaczyć tutaj, to byłoby ciekawe, będą to opinie, która w tym przykładzie Mam połączyć je wszystkie w jednej kolekcji. Ale jeśli po prostu bawić się z nim trochę, można podzielić go i podzielić go jednak chcesz tak długo, jak formatowanie jest nieco inny. Wystarczy, aby bawić się z tym, crawl skonfigurować, jednym z minusów to można tylko czołgać się do 25 stron na raz. To jeden z czynników ograniczających. Ale tutaj, jeśli go ustawić do ręcznego przeszukiwania, w tym to w jaki sposób można ją opowiedzieć aktualizować swoje dane. I tutaj można zobaczyć historię indeksowania wszystkiego, co już przeszukany. A wy może wrócić, zarejestruj się, bawić się z wszystkich różnych sposobów które można modyfikować i wykorzystywać dane. Kimono można skonfigurować do zeskrobać linki w linki. I byłoby to zrobić pierwszy skrobanie listę linków, a następnie za pomocą tego interfejsu w postaci wyskoczyć punkt dla innego API utworzenie skryptu. Ale to jest bardziej skomplikowane niż tego, co mamy zamiar dostać się do dzisiaj. Więc to kimono. Porozmawiamy o plusy i minusy Nokogiri i kimono. Nokogiri, to naprawdę szybko. Jest to łatwe do sprawdzenia. Możesz po prostu wkłada coś do Konsola, łatwy w konfiguracji. Możesz zdecydować, co dokładnie chcesz złom i sklep. Nie ma żadnych ograniczeń strona. I rzeczywiście używali go zeskrobać jak 1800 RPA strony internetowe szkół do wiadomości e-mail na staż, który zrobiłem. Więc to jest możliwe, choć dobrych praktyk byłoby podzielić skrypt. Bo jeśli nie, to nie dostaniesz nic. Ale jeśli nie sto, może 200 stron na raz, to masz jakieś szanse na co najmniej coraz to fragmentaryczne, zwłaszcza jeśli masz złe internet. Niestety może to tylko złom HTML. Więc jeśli masz załadowane dynamicznie pages-- a ja pokażę wam przykład jak kajak w miłym second-- Nokogiri niestety że nie można zeskrobać. Ale Kimono jest również łatwy w użyciu. Jak widzieliśmy, jest to w zasadzie wskaż i kliknij. Można ją zeskrobać JavaScript. Niestety, jest to maksymalna na ile stron można zeskrobać. Czasami to trochę trudne do skonfigurowania. To wprowadza w błąd. Ale to na pewno coś do rozważenia jeśli nie próbujesz mieć bardzo wytrzymałe utrzymaniu złom. Jeśli chcesz po prostu dostać wszystko od strony szybko, następnie Kimono jest naprawdę dobre narzędzie do wykorzystania. I jak już wspomniałem wcześniej, nie zaawansowana funkcja Kimono , które pokazuje, jak dostęp do unikalnego kodu HTML Element, który jest bardzo przydatny nawet jeśli pracujesz w Nokogiri. Jeśli więc przejść do serwisu Kayak, na Przykład można zobaczyć tam jest-- a może nie widać. Ale jeśli pokażę ci URL kajak, to faktycznie jest tylko adres URL źródła. Jest to adres URL przed ich zmodyfikowane za pomocą dowolnych skryptów JavaScript że nie dzieje. I to będzie wyglądać inaczej z kontroli elementu. Więc jeśli przejdziesz przez i Mecz się Sprawdzić Element Kod do kodu źródłowego, to faktycznie będzie inaczej. I to jest w zasadzie, dlaczego Nokogiri Nie można zeskrobać dynamicznie obciążonych witryn. Ponieważ Nokogiri jest skrobanie adres URL źródła, podczas gdy w rzeczywistości jest Kimono skrobanie, co masz w zasadzie widząc w Wybierz element. Więc jeśli mam przejść i ja spróbować Kimonofy Kajak, Rzeczywiście mogę przejść i wybierz cenę. To jest trochę trudniej, i w tym przypadku, to faktycznie widząc tę ​​cenę jako różne od nich. Tak więc podczas gdy można configure-- lub jeżeli nie zostały załadowane dynamicznie, można skonfigurować Nokogiri aby wszystkie z nich. Ponieważ formatowanie jest nieznacznie różne dla tej listy jak to jest w stosunku do reszty z nich, a można zobaczyć tutaj to faktycznie ma, a wybrane wszystkie ceny lotu. Może chcę wybrać Czas lotu, jak również. I mogę przejść i rodzaj skonfigurować to. Nie chcę tego. Chcę po prostu czasu następnego lotu jest. A następnie po kilku z nich przechodzi, robi zdjęcie. Więc Kimono jest dość inteligentny. To po prostu nie jest tak mocna. Istnieje kilka innych alternatyw, które można wykorzystać. I pokażę ci je tutaj. Jeśli są bardziej wygodne w Python zamiast Ruby może, jest biblioteka zwane Piękny Zupa. Możesz użyć tego. Jest bardzo podobna do Nokogiri. Ma kilka innych funkcji. Możesz znaleźć znacznik HTML i a następnie przejść w górę lub poruszać się na boki. Jest PyQt. Może to rzeczywiście złom dynamiczna strony, bo to rodzaj jest WebKit, który udaje, że jest przeglądarka nie jest w rzeczywistości jest przeglądarka. Więc byłoby poczekać na wszystkie JavaScript załadowania, a potem iść i spróbować zeskrobać witryny. Jeśli chcesz, aby trzymać się z Ruby, można może przejść o jeden poziom wyżej od Nokogiri. Możesz użyć Capybara z Poltergeist wrapper. A może to rzeczywiście w zasadzie to samo jak PyQt, który jest WebKit. To czeka na JavaScript, aby załadować pierwszy. Jeśli bawić się z nim na tyle, można nawet dostać się do kliknięcia na rzeczy. Tak więc jeśli jest link, który Nie jest to klasyczny href gdzie ścieżka jest łatwo dostępne i to jest coś, JavaScript, który wykrywa kliknięcie, można rzeczywiście zrobić. Bardziej popularne biblioteki do symulacji użytkownika jest w JavaScript, który jest PhantomJS. Może to oczywiście zeskrobać dynamiczna strony, ponieważ jest to w zasadzie udając, że Chrome bez interfejsu użytkownika. A potem, oczywiście, najbardziej solidna, ale najwolniejsza opcja, Automatyka przeglądarka jest selen. I niestety, jesteś nie będzie w stanie to zrobić w swoim CS50 IDE. Ponieważ zasadniczo co to robi to uruchamia swój Chrome, Firefox, niezależnie od przeglądarki które chcesz użyć, i śledzi może mysz ruch, co wpisać, i to właśnie rodzaj zautomatyzować ten proces. Tak więc powstał jako rodzaj Narzędzie automatyzacji testowania stronie internetowej. Ale wiele osób korzysta Selen zeskrobać stron internetowych że inaczej mają Wiele trudności skrobanie niektóre z tych innych, szybszych narzędzia. Więc to wszystko co mam do internetowej skrobania. Baw się dobrze. PUBLICZNOŚCI: Pytanie. ROBERT KRABEK: Tak. PUBLICZNOŚCI: Czy istnieje mechanizm do mieszania na stronie internetowej, dzięki czemu mógł w zasadzie przejść przez to później. ROBERT KRABEK: Tak. Więc możemy umieścić w naszym Przykładowo, dla obu z nich, stawiamy całą stronę do doc. A więc można właściwie tylko wziąć Zmienna doc i zapisać go do pliku. Więc gdybym chciał, mógłbym zapisz go jako plik HTML, a następnie zamiast używania OpenURI oraz wniosku Curl, to może po prostu otworzyć doc Kopiuj, a następnie szukać tego. PUBLICZNOŚCI: Ale można zachować rodzaj aktywności on-line a zrobić w trybie offline. Na przykład. kiedy jesteś powietrzu przez kilka godzin, Chcę po prostu archiwum Cała strona. [NIESŁYSZALNY] ROBERT KRABEK: Tak, to exactly-- tak dosłownie co to robi jest to biorąc wszystko że będzie pod tym adresem. Jeśli więc pobiegł cURL, to biorąc wszystko to HTML, i jest przechowywanie go wewnątrz zmiennej doc. Tak więc możesz robić, co chcesz zrobić z doc. Można wyeksportować go do pliku. PUBLICZNOŚCI: Ale to nie jest powiązana w górę. To nie jest dynamiczny. To nie jest rekurencyjny, prawda? Widzisz, co mam na myśli? Staram się po prostu rodzaj hash Cała strona na dysku twardym tak, że mogę po prostu zrobić przez kilka godzin bez Internetu. ROBERT KRABEK: Racja. Więc jeśli had-- więc gdzie jest mój plik I / O? Więc to jest plik I / O. Tak mówią, zamiast tego, ja nazywam to craigslist.html. Chciałbym otworzyć, że się. Ja bym puts doc do niego. I zamknij plik. A potem po prostu dlatego, że CS50 IDE jest w chmurze, który jest cokolwiek. Mogę przejść tutaj. Mogę pobrać ten plik. I wtedy to byłby na moim dysku twardym. Więc możesz zrobić to w ten sposób. Lub jeśli jesteś w domu, nie używając CS50 IDE, jak Sublime czy coś, jest to jeszcze łatwiejsze, ponieważ to wszystko jest dostępne lokalnie, nie związane z internetem. PUBLICZNOŚCI: Rozumiem. To jest jeden szczególny problem. Możesz to zrobić rekurencyjnie tak, że przejść kilka warstw głębokie typu rzeczy? ROBERT KRABEK: mogę pobrać foldery jak również, jeśli o to pytasz. PUBLICZNOŚCI: Tak. ROBERT KRABEK: Spoko.