[Přehrávání hudby] ROBERT Krábek: Ahoj, kluci. Jmenuji se Robert Krábek, a Budu učit vám kluci jak škrábat web s Nokogiri, což je knihovna Ruby, a Kimono, což je rozšíření Chrome. Takže nejprve je tu pár věcí, které vás může dělat, pokud možná jste byli dělá všechny psets dosud a váš pracovní prostor je Začínám být trochu plná. Můžeme vlastně jen jít a vytvořit nový pracovní prostor pro vás jen udělat zcela nový projekt v. Takže pokud si chcete pokračovat pracuje v CS50 šablony ID že máte v současné době, neváhejte, a můžete jen nainstalovat Nokogiri s CFLAGS equals-- gem install nokogiri. Ale jinak Ukážu vám, jak nastavit nový jeden nahoru. A pak je to v podstatě svržení další kolečka. A vy kódování, jako byste byli jen kódování v Sublime nebo tak něco. Takže když jsme se přesunout ji. Tak říkají, že toto je vaše současná CS 50 ID. Stačí si jen jít do Cloud9 zde. Můžete jít na palubní desku. To by mělo přinést až kartě schůzek. A pak můžete stačí kliknout zde Vytvořit nový pracovní prostor. Pojmenujte nový pracovní prostor, Možná test, nebo škrábání. A pak klikněte zde tuto záložku vlastní, místo na kartě CS50 šablon. A pak stačí jít a vytvořte nový pracovní prostor. Už jsem vytvořil pracovní prostor zde. Takže budeme pracovat s tím. A pokud jste vytvořili nový Pracovní plocha tak s kartě Vlastní můžete zadat gem install nokogiri, který se nebude zde. OK, je to trochu zmrzlý. Ale můžete zadat gem install nokogiri. A, která by měla být tak je k instalaci. Jak jsem již řekl dříve, pokud jste stále práci ve vašem CS50 šablony ID, stačí zadat CFLAGS rovná gem install nokogiri. A já jsem již nainstalován to tady, takže nebudu dělat. Ale pro ty, kteří po spolu, neváhejte tak učinit. Takže jakmile jste se dostali svůj Nokogiri instalovaný pracovní prostor nebo knihovnu, Chystám se vám trochu z intenzivního kurzu syntaxe Ruby protože Nokogiri je knihovna Ruby. Takže budete potřebovat znát některé základní Ruby syntaxe pro práci s Nokogiri. Takže některé základní rozdíly z toho, co jste zvyklí Možná, že kdyby jste pracovali dosud jen v C a PHP, deklarujete proměnné bez typu. Nemusíte používat středníky, což je tak trochu úleva. Neexistuje žádné závorky teď kolem pro nebo při smyčky, např. Musíte jen blok kódu, a pak si dát konec na konci to. Není a navíc nebo minus minus, tak jen vědí, že, když děláte pro smyčky, jen plus minus a rovná se rovná. A místo hash patří, budete používat potřebovat a poté co se snaží knihovna načíst do vašeho programu. Ruby není sestaven jazyk. Takže to je další úleva. Je to víc podobá PHP kde to je interpretovaný jazyk. Můžete spustit libovolný skript, Ruby, že píšete s Ruby následoval podle jména vašeho skriptu nebo programu. Znamenat, že se jedná o program, Ruby, stačí skončit s .rb místo .c. A tam jsou variabilní velikosti pole v Ruby, což je super pohodlné, když jste škrábání a snad chcete připojit Údaje, které jste seškrabován do pole. Nemusíte se malloc nové pole a zkopírovat původní pole do nového pole. Stačí si jen připojit se obě označení šipkami. A nejsou tam žádné znaky, tam jen jednotlivé struny dopis. Tak, že by měla být o něco jednodušší. Takže my vám jen dát nějaké Příklady některých základních syntaxe Ruby. Takže zde můžete vidět, že místo toho, lomítko lomítko, aby se vyjádřil v Ruby, stačí použít libry. A deklarace proměnných, vy stačí napsat proměnnou rovná co chcete proměnnou být. Mohou být řetězce. Můžete mít pole, která vyplníte s hodnotami. puts a potisky jsou podobné. Pro naše účely je Jediný rozdíl je, ve skutečnosti který klade, což je zkratka pro puts, právě staví nový řádek znak na cokoliv, co tisknete. Takže pokud dáme malý Demonstrace tady, můžeme spustit tento with-- otevřít nový terminál. Můžete vidět všechny tyto soubory, které jsou v mém terminálu. A když jsem prostě utéct Ruby, Ruby intro.rb to, vyhlásí pět Hello Mather, Quincy, Carrier. Adams. Tak to je všechno, na konstatování pole. Publikum: Robert, můžete Vaše písmo trochu větší? Robert Krábek: Ano. A mohu přiblížit, protože nemůžete přiblížení k terminálu písma zdánlivě. Tak to je, jak tisknout proměnné do vašeho terminálu. Můžete také použít proměnné uvnitř řetězce. Takže v poslední době v PHP, můžete se naučili že je řetězec interpolace. Takže pokud jste se podívat sem, pokud I deklarovat tři proměnné, název, knihovnu, a jazykové, a klade I, I napsat řetězec Ahoj, jmenuji se. A pak namísto PHP verze řetězce interpolace který vypadá trochu jako je tento, Máte libry, a poté složená rovnátka, a poté jméno proměnné. A to je to, jak byste vytisknout, řekl, bez ohledu na název proměnné je. A pak se můžete také zřetězit řetězce. Ruby dělá to výborný snadno se znaménkem plus. Musíte jen jeden řetězec na levé straně a navíc proměnné nebo jiný řetězec a řetězec. Takže když jsem vytisknout na to, by měl jen říct Ahoj, jmenuji se Robert. Budu učit vás nokogiri v Ruby. A ať to jen potvrzují, že je opravdu case-- rubín intro. Dobrý den, jmenuji se Robert. Budu učit vás nokogiri v Ruby. Pohybující se na, pokud else, je to trochu jinak z toho, co by mohlo být použito k pokud jste pracoval v C. Nepotřebujete závorky. Nemusíte se složené závorky. A místo else if, je to zřetězeny elsif. Takže tady, jestli jsem deklaroval x up Zde, jak vidíme, x je stále 5. Takže pokud x je menší než 3, bude to dát malý. Pokud je to méně než 7, média, jinak velké. Takže 5 je střední číslo. A já ukončit tento blok kódu s koncem. Tady je moje pro smyčce. A to je také syntax mírně odlišné. 0 až pěti v podstatě jen je deklarovat pole 0 až 5. Takže tam je pět pozic v poli. A pak pro každý slot v tom, že pole, budu postupně i. A tudíž by měla vytisknout 0 až 5, nebo 0 až 4. A to by mělo tiskové médium. A já budu jen požár přes. Vy kluci budou mít přístup K tomuto kódu později. Takže vy můžete spustit tento sami. Takže tohle je vaše základní while. To bude jen tisk j, postupně o 1 až jsme narazili 5. Super rychlá Ruby rychlokurz o tom, jak napsat funkci. Místo toho, aby, řekněme, int faktoriál číslo, jenom musíme def. A v podstatě ty jsi definování funkce zde. To se děje, že je název funkce, a to je všechny proměnné, které chcete předat do funkce. Můžete mít, pokud příkazy v rámci. Můžete se vrátit. V tomto případě, my jsme definování rekurzivně realizován faktoriál funkce. Takže jsme jen zavolat funkce Ruby, jako je tento. Takže když jsem definována To, jak jsem mohou volat faktoriál, projít ve 3, a pak se 3 se rovná počtu proměnná že mohu použít ve funkci. A to je právě to_s otáčením vrací hodnotu faktoriálu na řetězec. V opačném případě to bude hodit chyba říkat oh, já Nelze vytisknout string-- protože, jak si vzpomenete, klade je kladen string--, protože to factorial vrátila číslo. Takže můžeme převést, že na řetězec, jako je například. A naopak, můžete také převést řetězec na celé číslo s to_i. Takže dělat všechno super jednoduché, kdybych komentář na to, uložit a spustit faktoriálu funkce. Měli bychom být schopni vidět že faktoriál ze dne 3. 6. A to je skutečně pravda. Tak to je váš rychlokurz v Ruby. A teď, když víte, Ruby, můžeme jít na do základního Nokogiri stíráním nastavit. V podstatě vše, co musíte udělat, je, v Ruby, vyžadují knihovny. A pro naše účely budeme pomocí knihovna OpenURI stejně jako Nokogiri. A pak to, co vy do-- a bude to vám syntaxe pro tohle-- je otevření adresy URL stejně jako byste v lokny žádost, což je zkratka pro C URL. Takže budete mít URL webové stránky se jedná. Můžete uložit jej do proměnné. A pak se můžete probírat, že variabilní pro jedinečné HTML tagy použitím CSS příkaz. A pak můžete výstup obsah kamkoli budete chtít. Můžete začít v databázi. Můžete výstup do souboru, nebo i jen vytisknout na obrazovku. Tak my vám ukážeme základní škrabkou. Takže tady vidíte, máme vyžadující nokogiri, vyžadují open-URI. Vaše základní nastavit, pojďme nazývají dokument nebo doc, rovná Nokogiri :: HTML otevřený, což je Příkaz připravili nám OpenURI knihovna. A budeme vyhledávání, pro ty, ty, kdo by mohl žít v čtyřkolce, pro jízdní kola, která jsou uvedena v Bostonu na úseku Boston Craigslist kole místo. Takže pokud jste obeznámeni s Curl, budu jen ukázat vám opravdu rychle, co cURL bude dělat. Kdybych chtěl získat všechny URL z Na stránkách Craigslist, když jsem zadejte lokny, to prostě skládky všechny adresy URL z jízdního kola webu Craigslist na můj terminálu. To není zvlášť užitečné, protože se mi nelíbí chcete ručně projít a najít tu věc, který hledám. Ale jen tak si můžete vidět, že jsem vlastně pomocí správný kód, když se podíváte na URL pro Craigslist v bikes-- z nějakého důvodu to není nalezen. Podíváte-li se na tuto stránku a podíváte na URL, to by měl být shodný s cURL požadavek, který jsem právě poslat. A opravdu, to je to, co je uložen v proměnné doc. Takže když se vrátíte do našeho kódu, my pak může pracovat na této proměnné doc pomocí CSS. Takže říci, chtěl jsem se dostat všechny tagy, které jsou span.txt, a všechny A tagy v rámci tohoto tagu. A proč my bychom mohli chtít to, slyším tě plakat? Pokud bychom Zkontrolujte element, to vám dává na členění, jak je strukturován URL. Kdybych procházejte Zde můžete vidět , co každý z nich jiný prvky zastupuje. Takže možná chci přistupovat tento konkrétní prvek. Takže jsem s použitím Chrome vývojky nástroje pro Zkontrolujte Element. Vidím tady dole, že tento je značka v rámci rozpětí tag s třídou txt. Takže se to dostane na náš první operace, která je doc.css rozpětí, což je značka, která Hledám rámci veškerého této adresy URL. A pak .txt funguje podobně jako CSS dělá, když jste jen psaní CSS v souborech HTML strany zadáním třídu. Takže tento konkrétní operátor bude zadat span značku s třídou txt. A pak, když jsem se nechat prostor, to bude pak jít v tomto tagu a pak najít tag jejím rámci. Takže když jsem jen dát to terminál, měl bych být schopni vidět v podstatě vše, že je v rámci tohoto rozpětí třídy txt. Takže dáme, že na cestách. ruby Craigslist-škrabka. A opravdu, že nám všechny tyto dává tagy různých seznamech, které jsou na stránce Craigslist. Takže když se vrátíme, můžeme obrátit to do něčeho trochu užitečný. Možná, že chceme jen ty odkazy. Vzhledem k tomu, v rámci této značky, já taky mají na hypertextový odkaz dráhy že tato stránka jde. Takže když se podíváte na tento kód zde, co budu dělat, je místo CSS, Můžu jít at_css. A to bude jen dostat první prvek všechny ty věci. Takže pokud bych měl k tomu, že se v kód, který jsem právě dříve prokázal, namísto vrací všech Z toho by to prostě vrátí první z nich. Tak to je to, jak se operátor at_css funguje. Takže chceme ukládat cesta celou první tagu. A protože nám dá je-- tak jsme stále bude používat .css. Ale protože to bude dát nás zpět celá řada značek, budeme přístup první prvek. Takže tohle je další způsob, který můžete přístup k jakékoliv konkrétní prvek, pokud si mají celou řadu prvků která je vrácena, protože si můžete léčit cokoliv, .css se vrací jako pole, v podstatě. A pak budeme pro přístup k hypertext reference atributem tohoto. Takže pokud jste se podívat, pokud jste se dívali opravdu blízko tady, Pokud jste právě v podstatě se podívat na adresního řádku, To je cesta, kterou budete se škrábání. Takže když jsme prostě spustit to znovu, a ujistěte se, že jsme chytá. Můžete zkontrolovat doma. Toto vlastně shoduje s tímto odkazem. Tak proč můžeme chtít použít? Pokud chcete škrábat stránky a má stránka odkazů, jako je Craigslist dojde, chtít jít pak do každé z těchto odkazů a pak skřípání Obsah, který, což je přesně to, co budeme dělat. Takže až budete mít cestu jako variabilní, já už opravdu péče o tisku to. Já jen potřebujete uložit jej jako proměnnou. A pak jsem si přístup k další strana stejným způsobem přistupovat k doc na prvním místě. S výjimkou URL, jdeme použít řetězec interpolaci jako bych byl popisující Ruby dříve připojit cesta ke konci kořene. Tak co to bude dělat, je to bude dát na cestu že jsem poškrábaný dříve a pak zase, že do nové položky, co chcete volejte to-- first_listing, například. Ale budu opustit je na bodu pro tuto chvíli, protože to je to, co jsem pomocí zde. Tak že jsem chtěl získat popis první vysílání v Craigslist. Takže bych jít sem dolů. Chtěl bych klikněte na Zkontrolovat prvek opět, protože toto je popis. Já bych jít sem a vidět jestli najdu, jak bych mohl moci vyhledávat pro tuto jedinečnou značku. A v tomto případě, že má ID, což nás vede na další způsob vyhledávání tagy, což je s hashtag. Takže pro třídy, můžete používáte operátor tečky. Takže .txt udává třídu txt, vzhledem k tomu, hash specifikuje identifikátor. Takže v tomto případě, značka je sekci, a ID je postingbody. Tak to jde a zjistí, first-- protože jsme použitím at_css-- to jde a nalezne první prvek, který přijde s tag úseku a ID postingbody. A pak můžete přistupovat k textový prvek této položky se vrátil s .text. A pak můžeme uložit že v popisu. Takže teď, že máme variabilní popis, bychom mohli být schopni udělat, řekněme, I / O souboru. Takže I / O souboru v Ruby je velmi podobný souboru I / O v jazyce C, kde jsme se otevřít soubor. Mohli bychom do ní zapisovat. A pak budeme zavřete tento soubor. Tak tady, jsme jen pojmenování souboru, nějaké libovolné proměnné. Mohli bychom také jen dát to tady. Máme proměnnou, že jsme ukládání soubor otevřít jako s File.open. A my píšete do tohoto souboru, takže jsme ho otevřít w operátorem. A pak dáme řetězec do soubor s operátorem .puts. A pak dáme proměnné, které jsme chtějí zapsat do souboru v to. A pak jsme jen zavřete soubor. Takže pokud budeme pokračovat a spustit to, to by mělo vytvořit dokument s description.txt který bude mají tento popis v něm. Takže když jsem běžet to-- no. Je to produkoval textový soubor s, Doufejme, že to samé. Takže tam by mohl být nový vyslání že to přijde, když jsem mluvil. A skutečně to vypadá, jako by tam byl. Takže když jdeme do této klasické kolo, 1962 až 1966, který se zdá na zápas. A je to. Tak to je nejzákladnější funkčnost škrábání. Mohli bychom mít místo jen psaní do tohoto souboru, můžeme přidat věci do pole. Takže pokud Prohlašuji tři pole, názvu, ceny, a popis. A my jsme působící na položku doc ​​teď. Můžeme projít a najít všechny span.txt. A pamatujte si, to vrátí pole všech položek, které nalezne. A pak se v Ruby, stačí použít .each iterovat každou položku matice. A pak pro každou položku, Já jsem prostě jít na to nazvat odkaz, protože to je podstatě to, co to je. Takže když jsem dal každý link.css dot a.hdrlnk, je to vlastně bude odkaz a zjištění v rámci tohoto odkazu jiného HTML prvek a odpovídající třídy. Takže pokud si vzpomeneme, co to bylo se span.txt, můžete See- dovolte mi vrátit se real quick-- rámci span.txt Máme spoustu dalších tříd. Takže uvnitř span.txt hledáme pro tag s třídou hdrlnk. Dovolte mi tedy jen zjistit, že pro vás opravdu rychle. Takže si můžete prohlédnout zde, to je značka že je v rámci rozpětí třídy txt která má třídy hdrlnk. A to je skutečně to, co snažíme se dostat. Takže jsme teď se snaží ukládat všechny těchto vazeb uvnitř titulu. A pak budeme tisknout z každé z těchto odkazů. Ne Promiň. Chystáme se vytisknout cena každého z nich. Takže pojďme běžet to opravdu rychlé a uvidíte, co to dělá. Tak to prostě v podstatě šlo přes každého z odkazů naopak, přístup značku se jedná, a pak vytáhl cenu. A to udělal proto, že po máte vše v názvu, jsme právě uloženy titul tam. Právě jsme uložili odkaz v názvu pole. A v tomto pro provoz smyčky, kde místo aby šel do a.hdrlnk, hledáme na span.price. Takže když jsem si jen opravdu rychle najít cena, pokud si prohlédnout prvek, uvidíte, že se jedná o rozpětí s třídou ceny. A to je v podstatě, jak dostáváme cenu tam. Tak to je opravdu základní případ škrábání. To je to, jak se dostat všechny prvky na straně že, řekněme, již víte, URL. Takže pokud chceme získat trochu více do hloubky, můžeme škrábat stránek v rámci stránek. A pro tento příklad, budu bude výstup do souboru CSV. Takže jsem vyžadující csv tady protože Ruby není, uvnitř sebe sama, mají funkce jen výstupní CSV souborů. Tak to je super jednoduché. Dovolte mi jít na další. Kryté jsme soubor I / O. Tak tohle je podobné, jak je to v C. A předtím, než přejdeme k Kimono, Budu jen ukázat vám opravdu rychle, jak skřípání míst v památek. Tak jsme se už naučili, jak prohlásit pole v Ruby. Takže jsem jen prohlašující banda libovolných polí že budu ukládání dat uvnitř. doc pracuje stejným způsobem jako tomu bylo v předchozím souboru. Jdeme, hledání každý z span.txt let. Již víme, že. To je nádoba, ve které každý odkaz má všechny údaje, které chceme. Tak tady to, co děláme, je pro každého odkaz na span class txt, jdeme dovnitř a my jsme najít značku, nalezení první prvek, který. Pamatujte si, že CSS vrátí pole, takže můžete nejen přistupovat, jak je. Jdeme najít první prvek. I v případě, že je to pole jednoho položka, budete muset použít tuto syntaxi, a pak vytáhněte atribut href. Tak jsme to udělali dřív. Tak by to mělo vypadat povědomě. A tak teď máme řadu zvané cesty všech našich odkazů že budeme chtít použít. Takže pokud máme tuto řadu all z cest, které chceme použít, pak můžeme vytvořit položku pro každého z těchto stran, když jsme se otevřít tuto stránku. Tak, jak jsme také viděli na syntaxe před, kde dělá řetězec interpolaci s cestou tady, tak syntaxe je jen pro cestu. A mohl bych jmenovat to variabilní jakýkoli libovolný název. To je důležitý. Toto je pole, že budete být přístup každý prvek. Ale když říkáte, že pro cestu v cestách, to znamená, že pro každý prvek v cestách, nazývat to cesta, a použít. To je v podstatě jako když vás udělat pro smyčku a použít int i. Takže můžete zacházet cestě jako proměnná, která je postupně. A pak na každém z nich, jít do každé z těchto odkazů. Vzhledem k tomu, že jsme jejich ukládání v položce stránky, takže jsme vytvořit novou stránku pokaždé k němu dostaneme. A pak se v této nové stránky, najít span.postingtitletext, span.price, a pak část # postingbody. Už jsme se vztahuje oddíl # postingbody když jsme se podívali na popisu. Takže můžeme jít podívat na Craigslist poštou, pokud jste právě při pohledu na titul, můžete vidět tady, span postingtitletext. A to je důvod, proč je to tam. A pak za cenu, můžete přistupovat s span class ceny. Tak jsme také možná by mohl Chcete uložit URL. Tak jsme si jen spustit tento znovu, uložte jej v poli, protože pokud hledáte na Craigslist, že jste pravděpodobně bude chtít cestu k, pokud Vidíte něco, co vás zajímá, vrátit se na tomto místě. Takže si jen chcete uložit URL pro odkazy zájmu. To je jen v podstatě další syntaxe pro pro smyčce. Mohl bych si paths.each místo , pro cesty v cestách s indexem. A to je syntaxe Ruby for-- Cesta je to, co jsme udělali tady, deklarování proměnné pro každou položku. A index se chová jako I v C pro smyčky. Takže můžete sledovat z toho, co je index. Takže tady je jen málo vhodné věc , když vedete škrabku. Pokud jste škrábání stovky stránek, aby se ujistil, že to není visí, to bude jen výstup, Já jsem přístup na tuto stránku, a ujistit se, že je to stále pokračuje. Ale pro naše účely, protože tam je sto položek, Chystám se přístup pouze tři z nich tak, že nemáme čas vypršel tady. Ale dříve, než se dostaneme k tomu, já jsem jen chystá ukázat vám opravdu rychle, Budu výstupu titul, cena, popis a URL každého z odkazů, které jsem zaškrabávané. A pak je to jen Syntaxe pro knihovnu CSV. Otevření CSV. To je to, co budu říkat. Otevřete jej s pro zápis do. A pak CSV bude soubor, který jste zadáním všechno do. To je jen šek pro zdravý rozum abych věděl, že to běží. A tohle je můj zdravý rozum kontrola vědět, že je to dokončeno. Takže jsem uvedení titulu na řádku v CSV, cena, url, popis, vše do řádků v CSV. Takže když jdeme a běh tento now-- a já jsem ujistěte se, že jsem místo toho zachránil to-- toho jen výstup je ke koncovce, bychom měli mít CSV Soubor, který je produkován. Takže tady můžeme vidět CSV Soubor, který se vyrábí. Toto je výstup z scape, že jsem běžel. Jak si můžete prohlédnout zde, Přístup k stránky 0, 1, 2, 3. Jedná se o tituly, ceny, popisy. A pokud se podíváme na tomto formátu CSV soubor, který jsme generované, si můžete prohlédnout zde jeho výstup. To není Excel, takže to není formátovaný v řádcích a sloupcích. Ale můžete si představit, jak to by mohlo být ve formátu. CSV znamená hodnoty oddělené čárkami. Takže si dovedete představit to může být řada. A každá čárka by ukazují samostatný sloupec. Jen slovo caution-- někdy, že jste škrábání věci se spoustou čárkami. Takže pokud jste výstup že do souboru CSV, To nemusí výstup způsob, jak si možná myslíte. Tak to je v podstatě vše tam je škrábání základní HTML stránky s Nokogiri. Takže Internetem inovativní, jak to má přijít s více automatizované a GUI verze, i když méně robustní verze škrábání různých internetových stránkách. A pro naše účely Budu demonstrovat rozšíření Chrome s názvem kimono. A vše, co musíte udělat, je při navigaci na stránku, kterou chcete škrábat. Kliknete-li na pole zájmu. Můžete kalibrovat pole, proto, že se automaticky zjistit, co si myslí, chcete být škrábání, a pak stačí jen vytvořit API. Takže pokud bychom měli demonstrovat to na Craigslist, že ve skutečnosti by to fungovat. A to je to, co jsem šel zpátky do říká o to není tak robustní. Má potíže s vytvořením API. Ale jako demonstrace o tom, co to udělá, Pokud nainstalujete rozšíření Chrome, vše, co udělat, je na něj kliknete. To Kimonofies stránku, a pak vás klikněte na věc, kterou chcete skript. Takže pokud bych měl klikněte na že by bylo zdůraznit to, co si myslí, že to chci být oškrabáním tuto stránku. Takže jsem možná volat toto výpisy. To je, kolik položek se Vybrala jsem. A já si jen potvrdit nebo vyvrátit některé z dalších navrhovaných výpisy aby si ho přidat do co se bude poškrábaný. Takže teď můžeme vidět, že je vybráno sto položek. Pokud chci mít další pole, které jsem Také skřípání což souvisí s tím že chci, aby skřípání cenu stejně, pak mohu udělat totéž. Takže tady je ukázka toho, jak je to mnohem méně robustní, protože teď je to Místo vyzvednutí město toho jen cena, kterou chci. A teď je to zvedl 200 věcí. Můžete se vrátit a odstranit. Můžete zkusit znovu. Ale žádné záruky. To je, jak to funguje občas. Jak vidíte tady, teď se říká, že 96 až sem. Je to zvedl většinu odkazů že chcete, aby skřípání, ale ne nutně všechny z nich. Dalším užitečným nástrojem Kimono ačkoli je můžete jít na pokročilými funkcemi zde, jděte na položku Upřesnit a to vám ukáže, rozpis jedinečný způsob, jak získat přístup k HTML tagy, které chcete škrábat. Takže pro výpisy, když se podíváte na tu, pokud máte přístup div p span span, můžete skutečně stačí použít to do Nokogiri kódu, kde předtím, než jsme se span.txt pro přístup k každý z výpisů. Jestli Chci jen text v výpisy, Mohl bych vstup div prostor p space space span span prostor a, a to by dosažení stejného účinku. A pro ty z vás, kteří mají zájem v pomocí regulárních výrazů, to se stane i vám pravidelný Exprese druh řetězce na vstupu najít věci se snažíte najít. Takže je tu další zajímavé funkce kimono, kde si můžete na stránky, která je nejen mohu škrabat výsledky této stránce, Mohu kliknout na tento malý Tlačítko tady, stránkování, zadat tlačítko, které by vzít mě na další stránku, a pak to bude jen vím, že to může opakovat na další stránku, a pak skřípání všechny the-- tak dlouho jak je to stejný formát course-- scape všechny ty odkazy stejně. Takže protože Kimono nechce práce s Craigslist, co jsme udělali Je jsem Kimonofied Harvard Crimson. Já jsem vytáhl některé z druhu top Nejlepší články, potvrďte zde. Řekněme, že všechny z nich. Já jsem sestavil toto rozhraní API pro vás dopředu. Ale jinak to, co byste dělali Je byste právě klepněte na tlačítko Hotovo. Zadejte vaše údaje API. Nastavte ji buď automatické nebo ruční, kraul. Takže jste mohli aktualizovat svůj Údaje každých 15 minut, týdenní, denní, co chcete. Pojmenujte API. Vytvořte API. K vašemu prospěchu, jsem vytvořen Crimson již titulní straně API. Takže si prostě vytvořit Účet na kimono, a to bude ukládat všechny své API pro vás. Takže v podstatě, že to všechno tvoje samostatné různé odřeniny. Takže pokud se podíváme tady, to je Názory odkazy, které jsem shromážděných. Jedná se o představoval odkazy, které jsem shromážděných. A tito jsou nejčtenější odkazy, které jsem shromážděných Z tohoto posledního API stvol. Takže pokud si můžete prohlédnout zde, tito byli by představoval, Ty by měly být názory, který je v tomto příkladu, Já jsem je kombinovat všechny do jedné kolekce. Ale pokud si jen hrát si s ním trochu, můžete rozdělit to a rozdělit jej však Chcete-li tak dlouho, jako formátování se mírně liší. Jen hrát si s toto, kraul nastavení, jeden z stinné stránky se můžete jen procházet nahoru 25 stran najednou. To je jeden z limitujících faktorů. Ale tady, pokud nastavíte na ruční kraul, toto je, jak můžete říct, že k aktualizaci svých informací. A tady můžete vidět historii procházení všeho, co jste lezl. A vy můžete jít zpátky, přihlaste se, hrát si se všemi různými způsoby které můžete upravovat a používat vaše data. Kimono může být nastaven tak, aby skřípání odkazů v rámci odkazy. A vy byste tak učinit tím, že nejprve škrábání seznam odkazů, a pak se pomocí této API ve formě skočit bod pro další API že jste vytvořit skript. Ale to je složitější, než co budeme se dostat do dnes. Tak to je Kimono. Promluvíme si o výhodách a zápory Nokogiri a kimono. Nokogiri, je to opravdu rychle. Je to snadné otestovat. Stačí si jen staví nic konzole, snadno konfigurovat. Můžete se rozhodnout, co přesně Chcete-li šrot a obchod. Neexistují žádná omezení stránek. Vlastně jsem používal to, aby skřípání, jako 1800 jihoafrických webové stránky školy e-mailů na stáž že jsem to udělal. Tak to je možné, i když osvědčených postupů by bylo rozdělit skript. Protože pokud to selže, pak nechcete dostat nic. Ale pokud si stovku, Možná 200 stran v době, pak máte nějaké šanci alespoň jak se to po částech, a to zejména pokud máte špatné připojení k internetu. Bohužel to může škrabat pouze HTML. Takže pokud máte dynamicky namáhané pages-- a já vám ukážu příklad jako kajaku v A second-- Nokogiri bohužel Nelze škrábat to. Ale Kimono je také snadné použití. Jak jste viděli, že je to v podstatě bod a klepněte na tlačítko. To může škrábat JavaScript. Bohužel, tam je maximum na kolik stránek můžete škrábat. Někdy je to trochu těžko konfigurovat. To dostane zmatený. Ale je to určitě něco, aby zvážila pokud nejste se snaží mít Super robustní udržovatelný škrábanec. Pokud si jen chcete dostat vše se rychle pryč stránky, pak Kimono je opravdu dobrý nástroj k použití. A jak jsem se zmínil dříve, je tu pokročilý rys Kimono že, jak ukazuje Přístup k jedinečné HTML prvek, což je super užitečné i Pokud pracujete v Nokogiri. Takže když jdeme na stránky Kayak, pro Například můžete vidět, že je-- nebo možná není vidět. Ale když ti ukážu URL pro Kayak, to vlastně je jen zdrojem adresa URL. Toto je URL předchozí k bytí modifikovaná jakýmikoli skriptech JavaScript že mají děje. A bude to vypadat jinak od kontroly prvek. Takže pokud si projít a vy Zápas se Zkontrolujte Element Kód do zdrojového kódu, je to ve skutečnosti bude jinak. A to je v podstatě důvod, proč Nokogiri Nelze škrábat dynamicky načtené stránky. Vzhledem k tomu, Nokogiri je škrábání zdroj URL, vzhledem k tomu, Kimono je vlastně škrábání, co jste v podstatě vidění ve vybraných Element. Takže když jsem se projít a já pokusit Kimonofy Kajak, Já si skutečně projít a vyberte cenu. Je to trochu těžší, a v tomto případě, je to ve skutečnosti vidět tuto cenu za odlišné od nich. Takže vzhledem k tomu, můžete configure-- nebo pokud to nebylo dynamicky načten, můžete konfigurovat Nokogiri získat všechny tyto. Vzhledem k tomu, formátování je mírně odlišné pro tento záznam jak to je ve srovnání se zbytkem z nich, a můžete vidět zde je to vlastně pryč a vybrány všechny ceny letu. Možná, že chci vybrat Doba letu stejně. A můžu projít a nějak nastavit, které. Nechci to. Chci jen čas na další let je. A pak se po několika z nich prochází, dostane obraz. Takže Kimono je docela chytrý. Je to prostě není tak robustní. Tam jsou některé další alternativy, které můžete použít. A já ti ukážu je zde. Pokud jste pohodlnější Python místo Ruby možná, K dispozici je knihovna volal Krásné polévka. Můžete ji využít. Je to velmi podobné Nokogiri. To má několik dalších funkcí. Můžete si najít tag HTML a pak se přesunout do pohybu do stran. Tam je PyQt. To může ve skutečnosti škrábat dynamický místa, protože je to něco je WebKit, který předstírá, že je prohlížeč aniž by vlastně že je prohlížeč. Tak to by se čekat na všechny JavaScript načíst první, a pak jít a pokusit se skřípání místo. Chcete-li držet s Ruby, budete může jít o úroveň výše od Nokogiri. Můžete použít Kapybara s poltergeist obal. A to může vlastně v podstatě to samé, as PyQt, což je, že je WebKit. To čeká na JavaScript načíst jako první. Pokud složitě manipulovat s ním dost, můžete dokonce si to klikněte na věci. Takže pokud tam je odkaz, který není klasickým href, kde cesta je snadno přístupné, a je to nějaký JavaScript věc, která detekuje kliknutí, můžete skutečně udělat. Čím více populární knihovna simulovat uživatele je v JavaScriptu, který je PhantomJS. To může samozřejmě škrábat dynamický weby, protože toto je nezbytně předstírat, že Chrome bez uživatelského rozhraní. A pak, samozřejmě nejvíce robustní, ale nejpomalejší varianta, je automatizace Selen prohlížeč. A bohužel, vy nebude schopni to udělat přímo ve Vašem CS50 IDE. Vzhledem k tomu, v podstatě co to udělá, je, že boty svůj Chrome, Firefox, bez ohledu na prohlížeč který chcete použít, a sleduje možná myš pohyb, co napíšete, a to tak nějak tento proces automatizuje. Takže to byl vyvinut jako druh Webové stránky testování nástroj pro automatizaci. Ale mnoho lidí používá Selen škrábat webové stránky které jinak mají Hodně obtížnosti škrábání s některými z těchto jiných, rychlejší nástroje. Tak to je všechno, co mám pro web škrábání. BAV se. Diváků: Otázka. Robert Krábek: Ano. Diváků: Existuje mechanismus pro hash webové stránky, takže si mohl v podstatě projít později. ROBERT Krábek: Jo. Takže jsme dát v naší Například pro oba, dáme celé webové stránky do doc. A tak byste mohli skutečně jen vzít proměnná doc a zapsat jej do souboru. Takže když jsem chtěl, mohl bych zapsat ji jako soubor HTML, a pak se namísto použití OpenURI a žádost cURL, Pak jsem mohl jen otevřít doc HTML a pak hledat to. Diváků: Ale můžete zachovat druh online zážitku zatímco vy offline. Například. když jste létání po dobu několika hodin, Chci se v podstatě archiv celé webové stránky. [NESLYŠITELNÝ] ROBERT Krábek: Jo, to je exactly-- tak doslova, co to dělá Je to bere vše že by to bylo na této adrese URL. Takže když jsme běželi lokny, to je Vzhledem ke všem těmto HTML, a to uložením uvnitř proměnné doc. Takže si můžete dělat, co chcete udělat s doc. Můžete výstup do souboru. Diváků: Ale není to propojeny. To není dynamický. To není rekurzivní, že jo? Víš, co tím myslím? Snažím se v podstatě jakýsi hash celé webové stránky na mém pevném disku tak, že bych mohl v podstatě to po dobu několika hodin bez připojení k internetu. ROBERT Krábek: Správně. Takže když jsem had-- tak kde je můj soubor I / O? Tak tohle je soubor I / O. A tak místo toho říkají z toho, říkám toto craigslist.html. Já bych otevřít, že až. Já bych Klade doc do něj. I zavřete soubor. A pak už jen proto, že CS50 IDE je na oblaku, to je cokoliv. Můžu jít sem. Já si můžete stáhnout soubor. A pak by to bylo na mém pevném disku. Takže si můžete udělat to tak. Nebo pokud jste doma, nikoli pomocí CS50 IDE, jako je Sublime nebo tak něco, To je ještě jednodušší, protože to vše je k dispozici na místě, není vázána na internetu. Diváků: Vidím. To je pro jeden konkrétní problém. Můžete to udělat tak, že rekurzivně jít několik vrstev hluboké takové věci? ROBERT Krábek: Já si můžete stáhnout složky také, jestli je to to, co se ptáte. Diváků: Jo. ROBERT Krábek: cool.