>> [Zenelejátszási]
ROBERT KRABEK: Hello, srácok.
A nevem Robert Krabek, és Én lesz tanítás, fiúk
hogyan kaparja a weben Nokogiri, ami egy Ruby könyvtár,
és kimonó, amely a Chrome-bővítmény.
>> Tehát először van egy Néhány dolog, amit
tehet, ha esetleg te voltál mindent megtesz a psets eddig
és a munkaterület Kicsit tele.
Mi is valójában csak megy és Új munkaterület az Ön számára
hogy csak nem egy teljesen új projektet.
Tehát, ha nem akarjuk, hogy továbbra is dolgozik a CS50-azonosító
hogy jelenleg, bátran, és ha csak a
telepíteni Nokogiri a CFLAGS equals-- gem install nokogiri.
De egyébként én megmutatom hogyan kell beállítani egy újat fel.
És akkor ez lényegében csepegtető több képzési kerekek.
És te kódolás, mintha Csak kódolás Sublime, vagy valami.
Tehát, ha műszak vége.
>> Tehát mondjuk ez a jelenlegi CS 50 ID.
Akkor csak megy a Cloud9 itt.
Mehetsz a műszerfalon.
Meg kell felnevelni munkaterületek lap.
És akkor csak kattints Itt, Új munkaterület létrehozása.
Nevezze el az új munkaterület, Talán vizsgálat, vagy kaparás.
Majd kattintson erre a saját fül van, ahelyett, hogy a CS50 sablonok lapot.
És akkor csak megy és hozzon létre egy új munkaterületet.
>> Én már létrehozott egy munkaterületet itt.
Így fogunk dolgozni ezzel.
És ha létrehozott egy új munkaterületet, a Custom fülre,
egyszerűen beírhatja gem install nokogiri, ami nem megy itt.
OK, ez egy kicsit fagyott.
De akkor írja gem install nokogiri.
És hogy legyen minden, van, hogy a telepítést.
>> Mint már mondtam, ha még mindig a munkát a CS50-azonosító,
akkor csak meg kell írja CFLAGS egyenlő gem install nokogiri.
És én már telepítve itt tehát nem tudom megtenni.
De azok számára, következő mentén, nyugodtan erre.
>> Tehát ha egyszer megvan a Nokogiri munkaterülethez vagy könyvtár telepítve,
Megyek, hogy adjak egy kicsit Egy gyorstalpaló Ruby szintaxis
mert Nokogiri egy Ruby könyvtár.
Szóval akkor tudnod kell néhány alapvető Ruby szintaxis dolgozó Nokogiri.
Tehát néhány alapvető különbségek attól, amit használni
talán ha már dolgozik eddig csak a C és a PHP,
Ön kijelenti változók nincs típus.
Nem használja pontosvessző, ami egyfajta megkönnyebbülés.
Nincs zárójelben mára mintegy A vagy while, például.
Csak van egy blokk-kód, és akkor tedd végén végén, hogy.
Nincs plus plus vagy mínusz mínusz, így csak
tudom, hogy mikor teszel hurkok,
Csak plusz egyenlők és mínusz egyenlő.
És ahelyett, hogy hash közé, akkor használja igényel majd
amit könyvtár próbál betölteni a programba.
>> Ruby nem összeállított nyelven.
Szóval ez egy másik megkönnyebbülés.
Ez jobban hasonlít a PHP, ahol ez egy értelmezett nyelv.
Futtatható bármilyen Ruby programon írsz Ruby követ
a neve a szkriptet, programot.
Annak jeléül, hogy ez egy Ruby program csak a végén azt .rb helyett .c.
És vannak változó méretű tömbök Ruby,
ami szuper kényelmes, ha éppen kaparás és talán kíván hozzáfűzni
adatok, hogy már kaparni egy tömbben.
Nem kell malloc egy új tömböt és másolja át a régi tömböt az új tömb.
Tudod csak hozzáfűzni a A két nyíl jelzéseket.
És nincsenek karakter van Csak egyetlen betű szálakat.
Szóval, hogy kell egy kicsit könnyebb.
>> Ezért most is csak ad egy kis példák néhány alapvető Ruby szintaxis.
Tehát itt láthatjuk, hogy ahelyett, A perjel perjel, hogy észrevételeiket Ruby,
csak használja a font jele.
És változó nyilatkozatot, akkor Csak írja be a változó egyenlők
amit akarsz változó lenni.
Lehetnek szálakat.
Akkor lehet tömb, amely Ön népességnövekedés értékekkel.
helyezi és nyomatok hasonlóak.
A mi szempontunkból, a egyetlen különbség valóban
hogy hozza, amelynek jelentése helyezi, csak hozza egy új vonal
karaktert, bármit nyomtat.
>> Tehát ha adunk egy kis demonstrációs itt,
tudjuk futtatni ezt with-- nyit egy új terminál.
Láthatjuk az összes ilyen fájlok az én terminál.
És ha csak futni Ruby, Ruby intro.rb, hogy
kioltja öt napot Mather, Quincy, Carrier.
Adams.
Szóval ez minden van hogy nyilvánító tömbök.
Közönség: Robert, lehet, hogy a font egy kicsit nagyobb?
ROBERT KRABEK: Igen.
És én nagyíthatjuk, mert nem lehet Nagyításhoz terminál betűtípusok látszólag.
>> Szóval így kinyomtatni változók a terminálra.
Ön is használja változók string belsejében.
Így az utóbbi időben PHP- talán tanultak
hogy van húr interpoláció.
Tehát, ha veszel egy pillantást ide, ha Kijelentem, három változó, név, könyvtár,
és a nyelv, és én minden kimenet, I levelet húr, hello my name is.
És akkor ahelyett, hogy a PHP változata húr interpoláció
ami úgy néz ki egy kicsit több, mint ez, Van egy font jel, majd
Egy kapcsos zárójel, majd A változó neve.
És így azt nyomtatni, azt mondják, függetlenül a változó neve.
>> És akkor is, összefűzni szálakat.
Ruby teszi szuper egyszerű a plusz jel.
Csak meg egy húr a bal oldalon, valamint egy változó
vagy egy másik szöveg, plusz egy string.
Szóval, ha nyomtatni ezt ki, ahogy kellene Csak köszönni, a nevem Robert.
Én lesz tanítás, nokogiri Ruby.
>> És nézzük csak megerősíti, hogy ez valóban a case-- rubin intro.
Helló, a nevem Robert.
Én lesz tanítás, nokogiri Ruby.
>> Továbblépve, ha mást nyilatkozatok, ez egy kicsit más
abból, amit fel lehetne használni a ha már dolgozik C.
Nem kell a zárójelben.
Nem kell a kapcsos zárójelek.
És ahelyett, hogy else if, ez egy összefűzött elsif.
Tehát itt, ha már kijelentette, x-ig Itt, mint látjuk, x még mindig 5.
Tehát, ha x kisebb, mint 3, akkor majd fel kicsi.
Ha ez kevesebb, mint 7, közepes, nagy mást.
Tehát 5 egy közepes számát.
És én ér véget ez a blokk a kódot végén.
>> Itt van a hurok.
És ez a szintaxis is Kicsit más.
A 0-öt csak alapvetően A nyilvánító tömbök 0-5.
Tehát van öt olyan résidő, a tömbben.
És akkor minden nyílásába, hogy tömb, én leszek megnő i.
Tehát ez nyomtassa 0-5, illetve 0-4.
És ez nyomtatott médium.
>> És én csak lángol át.
Srácok lesz hozzáférése hogy ezt a kódot a későbbiekben.
Szóval ti is futtatni ezt magatokat.
>> Tehát ez az alapvető while ciklus.
Ez csak úgy lesz a nyomtatás j, megnő 1-ig elérjük 5.
>> Szuper gyors Ruby gyorstalpaló hogyan kell írni egy függvény.
Ahelyett, hogy, mondjuk, int faktoros számú, már csak def.
És lényegében te meghatározó funkciója van.
Ez lesz a A függvény neve,
és ez olyan változók, amelyeket szeretnénk átadni a funkciót.
Akkor lehet, ha megállapításoknak minősülnek.
Akkor vissza.
Ebben az esetben mi vagyunk meghatározó rekurzív
végre faktoriális függvény.
Szóval csak hívási funkciók Ruby, mint ez.
>> Tehát, ha én már definiált ezt, hívhatják faktoros, át 3,
majd 3 lesz a száma változó hogy tudom használni a funkciót.
És ez to_s csak fordult a visszatérési értéke faktoros egy húr.
Máskülönben ez fog dobni egy hiba mondás ó,
nem lehet kinyomtatni a string-- mert ahogy emlékszem,
helyezi üzembe string-- mert ez faktoros visszatért egy számot.
Így tudjuk alakítani, hogy hogy egy string, mint olyat.
És fordítva, akkor is konvertálni egy string egy integer to_i.
>> Tehát, hogy mindent szuper egyszerű, ha én csak kommentálom el, kivéve
és futtassa a faktoriális függvény.
Meg kell látni hogy faktoriálisát 3 6.
És ez valóban igaz.
>> Szóval ez a gyorstalpaló Ruby.
És most, hogy tudod Ruby, mehetünk Az alapvető Nokogiri kaparás létre.
Lényegében csak annyit kell tennie, hogy Ruby, szükség könyvtárak.
És mi célból fogjuk használni a könyvtár OpenURI valamint Nokogiri.
És akkor mit do-- és ez lesz megadja a szintaxis this--
ez megnyitja az URL sokat, ahogy azt a göndör kérelmet, amely áll a C URL.
>> Szóval, hogy az URL-t A kérdéses weboldal.
Tárolja egy változóban.
És akkor kereshet keresztül, hogy változó egyedi HTML címkéket használ
A .css parancsot.
És akkor tud kiadni a tartalmat, bárhova is kíván.
Meg lehet kezdeni egy adatbázisban.
Kivezetheti egy fájlt, vagy akár csak nyomtassa ki a képernyőn.
>> Szóval mi megmutatjuk, alapvető lehúzó.
Tehát itt láthatjuk van igénylő nokogiri igényelnek nyílt uri.
Az Ön alap létrehozását, hadd hívják dokumentum vagy doc,
egyenlő Nokogiri :: HTML nyitott, amely a parancsot, nekünk a OpenURI
könyvtár.
És mi lesz keresnek, azoknak te, aki lehet, hogy él a quad,
kerékpárok, amelyek a bostoni felsorolt A Boston Craigslist kerékpáros szakaszt
telek.
>> Tehát, ha nem ismerik hurokkal, én csak
mutassa meg, tényleg gyorsan, milyen USE fog tenni.
Ha azt akartam, hogy az összes URL-t A Craigslist oldalon, ha az I. típusú göndör,
ez csak guba összes URL a Craigslist kerékpár helyszínen
rá a terminált.
Ez nem különösebben hasznos, mert én nem
kézzel szeretné megy keresztül, és megtalálják a dolog, amit keresek.
De csak így lehet látom, hogy én valójában
A találó kódot, ha megnézi az URL-t a Craigslist bikes--
valamilyen oknál fogva ez nem találtak.
Ha megnézed ezt az oldalt és nézd meg az URL-t,
ez azonosnak kell lennie, hogy a USE kérését, hogy én csak küldeni.
És valóban, ez az, ami lenni tárolt doc változó.
>> Szóval, ha visszamegyünk a kódot, akkor Ezután működni ezen a doc változó
segítségével .css.
Tehát mondjuk azt akartam, hogy minden A címkék, amelyek span.txt,
és az összes olyan címkéket, hogy a tag.
És miért lehet akarunk Ehhez Hallom sírni?
>> Ha Elem vizsgálata, ez ad egy bontása hogyan URL épül.
Ha én nézd végig Itt látható
mi minden egyes ilyen eltérő elemek képvisel.
Úgyhogy talán szeretne hozzáférni az adott elem.
Tehát én vagyok a Chrome fejlesztői eszközöket Elem vizsgálata.
Látom itt lent, hogy ez a egy olyan tag leforgása alatt
tag egy osztály a txt.
>> Szóval ez lesz a mi első művelet, amely
jelentése doc.css span, amely a tag, hogy Keresem belül mindez URL.
És akkor .txt működik ugyanúgy, mint a CSS nem, ha te csak írásban CSS
a HTML-fájlokat meghatározza egy osztályt.
Tehát ebben az üzemben tartó adjon meg egy span címke osztálya txt.
És akkor, ha elmegyek egy helyet, ezt követően megy belül, hogy a tag
majd talál egy címkét belül.
>> Szóval ha csak hogy ezt a a terminál, azt kell
lehet látni lényegében mindent vagyis ezen belül span osztály txt.
Tehát azt fogjuk adni, hogy egy megy.
ruby Craigslist-lehúzó.
És valóban, hogy megadja nekünk az összes ilyen címkék a különböző listák hogy
vannak a Craigslist oldalon.
>> Tehát ha visszamegyünk, tudjuk be ezt a valami egy kicsit hasznosabb.
Talán azt akarjuk, csak a linkek.
Mivel ebben a címkét, én is Van a hivatkozást az út
hogy ez az oldal megy.
Tehát, ha megnézi ezt a kódot itt, mit fogok csinálni a helyett .css,
Mehetek at_css.
És ez csak kap az első eleme minden olyan dolog.
Tehát, ha én is csinálni, hogy akár a kód, amit csak a korábban bizonyították,
A találatok Ennek akkor csak
vissza az első egy ilyet.
Tehát így a at_css üzemeltető működik.
>> Ezért szeretnénk tárolni a útját végig az első címkét.
És mivel egy ad nekünk egy-- így még mindig lesz használni .css.
De mivel ez fog adni vissza minket egy egész sor címkék,
fogunk hozzáférést Az első elem.
Szóval ez egy másik módja, hogy tudsz hozzáférni bizonyos elemet, ha
Van tömbjére A visszaadott,
mert tudod kezelni semmit, .css visszatér, mint egy tömb, alapvetően.
És akkor mi lesz hozzáférni a hypertext referencia jellemzője ennek.
>> Tehát, ha egy pillantást, ha Megnézted igazán közel van,
ha csak lényegében nézd meg a címsorba,
ez az az út, hogy fogsz kaparás.
Tehát, ha csak futni még egyszer, és győződjön meg arról, mi mentette meg.
Meg tudja nézni otthon.
Ez valóban összeillik erre a linkre.
>> Akkor miért lehet használni akarjuk ezt?
Ha azt szeretnénk, hogy kaparja Az oldal és van
egy oldalt a linkek, mint Craigslist válik, akkor
érdemes menni, akkor minden egyes ilyen kapcsolatok
majd kaparja a tartalmát, hogy melyik
Pontosan mit fogunk csinálni.
>> Tehát ha az utat, mint egy változó, már nem igazán
törődnek nyomtatás ki.
Csak kell tárolni, mint egy változó.
És akkor tudok hozzáférni egy másik Oldal ugyanúgy tudok hozzáférni
doc az első helyen.
Kivéve az URL, megyünk használni karakterlánc interpoláció
mint én leírja Ruby korábban hozzáfűzni
az utat, hogy a végén a gyökér.
>> Szóval, mi ez az eredménye, hogy ez megy, hogy azon az úton,
hogy én kapart korábban majd kapcsolja, hogy
egy új elem, amit csak akarsz hívja it-- first_listing, például.
De én elmegyek ez a tétel most,
mert ez az, amit én használok itt.
>> Tehát mondjuk azt akartam, hogy a leírás Az első kiküldetés Craigslist.
Szóval menne le itt.
Szeretném kattintson Elem vizsgálata ismét, mert ez a leírás.
Mennék le ide, és lásd ha találok hogyan lehet, hogy
képes legyen megtalálni ezt az egyedi címkét.
És ebben az esetben, azt Az azonosító, ami elvezet minket
hogy mi a következő módon keres Címkék, ami egy hashtag.
>> Tehát osztályok, akkor Használja a dot-üzemeltető.
Tehát .txt meghatározza egy osztály a txt, mivel a hash meghatározza egy azonosítót.
Tehát ebben az esetben, a címke rész, és az azonosító postingbody.
>> Tehát ez megy, és megállapítja, A first-- mert mi vagyunk
segítségével at_css-- ez megy, és megkeresi az első elem,
jön fel a tag a szekció és az ID postingbody.
És akkor elérheti a szöveg elem ezen elem visszatért .text.
És akkor tudjuk tárolni hogy a leírás.
>> Tehát most, hogy van egy változó leírás,
akkor talán csinálni, mondjuk, file I / O. Szóval fájl I / O Ruby
nagyon hasonlít a fájl I / O C ahol megnyit egy fájlt.
Lehet írni.
És akkor majd zárja a fájlt.
>> Tehát itt, mi csak nevezte meg a fájlt, akkor néhány önkényes változó.
Mi is most tette ezt ide.
Van egy változó, hogy mi tárolására A fájl megnyitása as File.open.
És mi írásban ezt a fájlt, így nyissa meg a w üzemeltető.
És akkor tesszük karaktersorozatot a fájlt a .puts üzemeltető.
És akkor tesszük a változó, hogy mi szeretné írni a fájlt belül.
És aztán csak zárja be a fájlt.
>> Tehát, ha megy előre, és futtatni ezt, ez egy olyan dokumentum
A description.txt amely Van ez a leírás benne.
Tehát, ha futok it-- nincs.
Ez készített egy szöveges fájlt, Remélhetőleg ugyanezt.
Tehát ott lehetett volna az új küldemény hogy közbejött, miközben beszéltem.
És valóban úgy néz ki, nem volt.
Tehát, ha megy ez a klasszikus kerékpár, 1962-1966, amely úgy tűnik, hogy megfeleljen.
És már megy is.
>> Szóval ez a legalapvetőbb funkcionalitása kaparás.
Mi volna ahelyett, Csak írásban ezt a fájlt,
tudunk hozzá dolgokat egy tömbben.
Tehát, ha kijelentem, három tömböt, cím, ár, és a leírás.
És mi működik a doki tartalmat most.
Mi lehet átmenni és megtalálja a span.txt.
És ne feledd, ez egy tömböt ad vissza Az összes elem, hogy úgy találja.
És akkor a Ruby, akkor csak használ .Minden végiglépkedhetünk minden elemet
A tömb.
És akkor minden egyes tételre, Én csak fogom hívni
egy linket, mert ez az, Lényegében mi az.
>> Tehát ha tettem minden link.css dot a.hdrlnk, ez valójában megy a kapcsolatot
és megállapította, ezen belül a linket egy másik HTML elem és a megfelelő osztályba.
Tehát, ha arra gondolunk, milyen ez volt az span.txt,
akkor a látó hadd menjen vissza valós quick-- belül span.txt
van egy csomó más osztályokba.
Tehát belülről span.txt keresünk egy olyan tag egy osztály hdrlnk.
Szóval hadd találja, hogy A srácok gyorsan.
>> Tehát itt is látszik, hogy ez egy olyan tag ez leforgása osztály txt
amely az osztály hdrlnk.
És ez valóban így értette próbálunk megszerezni.
>> Szóval most próbál tárolni az összes ezeknek a kapcsolatoknak belül a cím.
És akkor fogunk nyomtatni ki minden egyes ilyen linkeket.
Nem sajnálom.
Fogunk kinyomtatni az ár minden ilyen.
Szóval ez tényleg futtatni gyors és mit csinál.
>> Tehát ez alapvetően csak ment révén mind a kapcsolatok
viszont elérhető a tag a szóban forgó, majd kihúzta az ár.
És ez azért tettem, mert miután akkor mindent a címben,
most már csak tárolt cím van.
Már csak tárolni a kapcsolatot a tömb neve.
És ebben a for ciklus működését, ahol ahelyett, hogy a.hdrlnk,
keresünk egy span.price.
Szóval, ha tudok csak nagyon gyorsan megtalálja az ár, ha vizsgáljuk meg a elemet,
látni fogod, hogy ez egy arasznyi az osztályban az ár.
És ez alapvetően hogyan mi megvagyunk az ár ott.
>> Szóval ez az igazán alapesete kaparás.
Így kap minden Az elemek egy oldalon
hogy, mondjuk, már tudja az URL-t.
>> Tehát ha azt akarjuk, hogy egy kicsit mélyebben,
tudjuk kaparni oldalakat oldalakon.
És ezt a példát, én lehet kimenetre egy CSV fájlba.
Úgyhogy igénylő csv itt mert Ruby nem, belül is,
van alkalmassága hogy csak a kimeneten CSV fájlokat.
Szóval ez szuper egyszerű.
Hadd menjen a következő.
Mi fedett file I / O. Tehát ez hasonló ahhoz, ahogy ez a C.
És mielőtt rátérnénk a kimonó, Én csak azt mutatják, hogy tényleg gyors, hogyan
kaparja oldalakon belül látnivalóit.
>> Így már megtanultuk, hogyan tömböt deklarálni a Ruby.
Szóval én csak nyilvánító csomó tetszőleges tömbök
hogy én leszek az adattárolásra belül.
doc működik ugyanúgy mint ahogy az előző fájlt.
Bemegyünk, megtalálása minden egyes span.txt években.
Azt már tudjuk, hogy.
Ez az a konténer, amelyen belül az egyes láncszemnek az összes adatot, amit szeretnénk.
>> Tehát itt mit csinálunk az, hogy minden Link a span class txt, megyünk
és mi megtaláljuk a címkét, megállapította, az első eleme, hogy.
Ne feledje, .css vissza egy tömbben, így nem lehet csak elérni úgy, ahogy van.
Fogunk találni az első elemet.
Még ha ez egy sor egy elemet, akkor használja ezt a szintaxist,
majd húzza ki a href attribútum.
>> Így volt ez korábban.
Szóval ez ismerős.
És így most van egy tömbben nevű ösvényein minden kedves linkek
hogy fogunk használni kíván.
Tehát, ha itt van ez a tömb összes Az utak, hogy szeretnénk használni,
tudunk majd létrehozni egy elemet minden azoknak az oldalaknak amikor kinyitjuk az oldalon.
Így például azt is láttuk, a A szintaxis előtt, ahol
Ennek húr az interpoláció az utat itt, így a szintaxis csak a pálya.
És tudnék nevezni ezt változó tetszőleges nevet.
>> Ez a fontos.
Ez a tömb, hogy akkor hozzáférhet az egyes elemek.
De amikor azt mondják, az utat utak, ez azt jelenti, minden egyes eleme utak,
hívják utat, és azt használd.
Ez lényegében olyan, mint amikor nem egy hurok, és használja int i.
Szóval lehet kezelni az utat, mint a változó, ami megnöveli.
>> És akkor minden egyes ilyen, bemegy minden egyes ilyen linkeket.
Mert mi tárolja azt elem lapon így hozunk létre egy új oldalt minden alkalommal
mi hozzáférni.
És akkor azon belül az új oldalon keresse span.postingtitletext, span.price,
majd rész # postingbody.
Mi már lefedett rész # postingbody Mikor megnéztük a leírás.
>> Szóval mehetünk látni a Craigslist hozzászólás, ha csak ránézünk a cím,
látod itt, span postingtitletext.
És ez miért van ott.
És akkor az ár, akkor elérheti a span class ára.
>> Így is lehet, hogy talán szeretné tárolni az URL.
Ezért most is csak futtatni ezt ismét tárolja egy tömbben,
mert ha keres Craigslist, te
Valószínűleg szeretne majd egy módja annak, hogy, ha látsz valamit, ami érdekli,
menj vissza az oldalon.
Szóval csak szeretné tárolni az URL hivatkozásokat kedvéért.
>> Ez csak alapvetően Egy másik szintaxis a for ciklus.
Én is csak ezt paths.each helyett Az az útvonal utak index.
És ez a szintaxis Ruby for-- út, amit tettünk fel ide,
nyilvánító változó minden egyes tételt.
És index viselkedik Az i-C hurok.
Szóval lehet nyomon követni hogy mi az index.
>> Tehát itt csak egy kicsit kényelmes dolog
ha éppen fut a lehúzó.
Ha kaparás több száz oldalas, meggyőződni arról, hogy ez nem lóg,
akkor csak kimenet, Én belép az oldalra,
és gondoskodjanak arról, hogy ez ma is tart.
De a mi szempontunkból, hiszen van egy száz példány,
Megyek eléréséhez mindössze hárman hogy mi ne fogyjon el az idő itt.
>> De mielőtt erre, én csak Megmutatom, nagyon gyors,
Én is kimenetre a cím, ár, leírás, és URL-
Az egyes linkek, hogy én már kapart.
És akkor ez még csak a szintaxis a CSV könyvtár.
Megnyit egy CSV.
Ez mit fogok nevezni.
Nyisd ki a write do.
És akkor CSV lesz a fájl te bevitelére mindent.
Ez csak egy józan csekket hogy tudjam, hogy ez fut.
És ez az én józan ellenőrzés Fontos tudni, hogy ez elkészült.
Szóval én üzembe cím egy sort A CSV, ár, url, leírás,
Az összes sorokra a CSV.
>> Tehát, ha megyünk, és fuss ez now-- és én csak
győződjön meg arról, hogy hagytam it-- helyett csak kimenetre, hogy a terminál,
mi kell egy CSV fájl előállítása után.
Tehát itt láthatjuk a CSV fájlt, hogy a már előállított.
Ez a kimenet a menekülsz, hogy én csak futott.
Mint látható itt, elérése oldal 0, 1, 2, 3.
Ezek azok a címek, árak, leírások.
És ha megnézzük ezt a CSV fájlt, amit létrehoztunk,
látod, hogy outputted itt.
Ez nem az Excel, így nem formázott sorokba és oszlopokba.
De el lehet képzelni, milyen ez lehet formázni.
>> CSV jelentése vesszővel elválasztva.
Így el lehet képzelni, ez lehet egy sorban.
És minden egyes vessző lenne jelzik külön oszlopban.
Csak egy szót caution-- Néha te
kaparás a dolgokat egy csomó vesszővel.
Tehát ha a kimenetre ez egy CSV fájlba,
lehet, hogy nem a kimeneti ahogy azt gondolnánk.
>> Szóval ez lényegében az összes van, hogy kaparás alap HTML
oldalak Nokogiri.
>> Tehát az internet lény innovatív, mert közbejött
egy jobban automatizált és GUI változata, bár kevésbé robusztus
változata kaparás különböző honlapokon.
És mi célból Majd bemutatójával
Chrome nevű kiterjesztést kimonó.
És csak annyit kell tennie, hogy navigálni A kívánt oldal kaparja.
Rákattint egy érdeklődési köre.
Kalibrálja a területeken, mert akkor automatikusan
érzékeli, amit gondol azt szeretné, hogy kaparás,
és akkor csak létrehozni egy API.
>> Tehát ha mi voltunk annak bizonyítására, hogy a Craigslist, hogy valójában nem működik.
És ez az, amit én akartam vissza mondván róla, hogy nem olyan erős.
Ez baj létre az API-t.
De mint a demonstrációs hogy mit fog csinálni,
ha telepíti a Chrome-bővítmény, minden, amit csinál akkor kattints rá.
Ez Kimonofies az oldalt, akkor kattintson a dolog, amit szeretnénk forgatókönyvet.
>> Tehát ha én kattintva hogy szeretné kiemelni
mit gondol akarok lehet kaparás le az oldalt.
Úgyhogy talán hívni ezt listáját.
Így sok példány választottam.
És én is csak megerősíteni, sem cáfolni néhány a többi javasolt listák
hogy azt felvenni mi fog kaparni.
>> Tehát most már látjuk van Száz kiválasztott elem.
Ha azt szeretnénk, hogy egy másik területen, hogy én is kaparjuk, amely ehhez kapcsolódik,
mondani akarok kaparja az ár is, akkor meg tudom csinálni ugyanazt.
>> Tehát itt egy bemutató, hogyan ez sokkal kevésbé robusztus, mert most ez a
felvette, hanem a város Az csak az ára, hogy akarok.
És most felvette 200 dolgokat.
Akkor menj vissza, és törli.
Meg lehet próbálni újra.
De nincs garancia.
Ez hogyan működik ez néha.
Amint látod itt, most azt mondja, 96 itt.
Ez felvette a legtöbb linkek kívánt kaparja, de nem
feltétlenül mindegyik.
>> Egy másik hasznos eszköz a kimonó bár az mehetsz Speciális funkciók
Itt, menj Részletes, és akkor megmutatja
A bontást a sajátos módon hozzáférhessenek a HTML
címkék kívánt kaparja.
Tehát listák, ha megnézi itt, ha nyilvános div p span span,
akkor valójában csak használ ez a Nokogiri kódot,
ahol előtte voltunk span.txt eléréséhez mindegyik felsorolás.
Ha én csak azt a szöveget a listák,
Tudtam bemeneti div helyet p helyet span tér span tér egy,
és ez elérni ugyanazt a hatást.
És azoknak, akik érdeklődnek A reguláris kifejezések,
ez történik, hogy Önnek is a rendszeres véleménynyilvánítás egyfajta string input
megtalálni azokat a dolgokat akarsz találni.
>> Szóval van egy másik jó tulajdonsága A kimonó ahol tördeléséhez,
amely nem csak tudok kaparja Az eredmények ezen az oldalon,
Én kattintson erre a kis gombra itt, tördelés,
adja meg a gombot, amely vigyen el a következő oldalra,
és akkor csak tudom, hogy akkor hajtogat a következő oldalra,
majd kaparjuk összes the-- mindaddig mivel ez ugyanaz a formátum course--
menekülsz az összes ilyen linkeket is.
>> Szóval azért, mert kimonó nem akar dolgozni Craigslist, mit tettünk
Már van Kimonofied a Harvard Crimson.
Már kihúzta néhány fajta Top Kiemelt cikkek, erősítse meg itt.
Mondja el, mindezeket.
Már össze ezt az API- Önnek előre az időben.
De különben mit tenne, A akkor csak a Kész gombra.
Írja be a API részleteket.
Meg azt, hogy bármelyik automatikus vagy manuális csúszás.
Szóval lehet frissíteni a adatok 15 percenként,
heti, napi, amit akarsz.
Nevezze el API.
Hozza létre az API-t.
Az Ön javára, amit teremtett a Bíbor címlapon API már.
>> Szóval csak létrehozni fiók a kimonó, és ez
tárolja az összes API-k az Ön számára.
Tehát lényegében ez minden Külön különböző karcolásoktól.
>> Tehát, ha megnézzük itt, ez a vélemények linkeket, hogy én már begyűjtött.
Ezek a kiemelt linkek, hogy én már begyűjtött.
És ezek a legolvasottabb linkek, hogy már összegyűjtött
ettől a legutóbbi API ga.
>> Tehát, ha itt is látszik, ezek lennének a kiemelt,
ezek lennének a véleményeket, amely ebben a példában,
Már kombinált mindet egyetlen gyűjteménye.
De ha csak játszadozik vele egy kicsit, akkor feldarabolja
és azt szét kell osztani azonban azt szeretnénk, hogy mindaddig,
mivel a formázás kicsit más.
>> Csak játszani körül ezt a csúszás létre, az egyik árnyoldala
A akkor csak kúszik 25 oldalt egy időben.
Ez az egyik korlátozó tényező.
De itt, ha meg azt A kézi csúszás, ez
hogyan lehet mondani, hogy Információi frissítéséhez.
És itt láthatjuk a csúszás története mindent, hogy már mászott.
És ti is megy vissza, iratkozzon fel, játszadozni a különböző módon
hogy lehet módosítani, és az Ön adatait.
>> Kimonó be lehet állítani, hogy kaparja linkek a linkek.
És akkor erre először kaparás a hivatkozások listáját,
majd használja ezt az API, mint egy leugrik pont egy másik API
hogy megteremtse a forgatókönyvet.
De ez sokkal bonyolultabb, mint mit fogunk bejutni ma.
>> Szóval ez kimonó.
Megbeszéljük az érvek és hátrányairól Nokogiri és kimonó.
>> Nokogiri, ez tényleg gyors.
Ez könnyen ellenőrizhető.
Tudod csak hoz valami konzol, könnyen konfigurálható.
Tudod hogy pontosan melyik azt szeretné, hogy kaparja és tárolja.
Nincsenek határok oldalon.
Igazából arra használta, hogy kaparja, mint 1800 dél-afrikai iskolai honlapok
E-mailek egy gyakorlat, hogy én tettem.
>> Szóval ez lehetséges, de a legjobb gyakorlatok az lenne, hogy osszuk el a forgatókönyvet.
Mert ha ez nem sikerül, akkor nem kap semmit.
De ha száz, talán 200 oldalt egy időben,
akkor van némi esélye legalább szerzés ez darabonként, különösen
ha rossz interneten.
>> Sajnos ez csak kaparja HTML.
Tehát, ha van dinamikusan betöltött pages--
és megmutatom neked egy példát mint Kajak egy second--
Nokogiri sajnos nem kaparja, hogy.
>> De kimonó is könnyen használható.
Ahogy láttam, ez lényegében egy pontot és kattintson.
Meg lehet kaparni a JavaScript.
Sajnos, van egy maximális hogy hány oldalt lehet kaparni.
Néha ez egy kicsit nehezen konfigurálható.
Ez összezavarodik.
De határozottan valami, hogy fontolja
ha nem próbál egy szuper erős fenntartható kaparja.
Ha csak azt, hogy mindent le egy oldalt gyorsan,
majd kimonó egy igazán jó eszköz használatát.
És mint már említettem, van A speciális jellemzője kimonó
amely megmutatja, hogyan kell hozzáférhet az egyedülálló HTML
elem, ami szuper hasznos is, ha dolgozik Nokogiri.
>> Tehát, ha megyünk a Kajak helyszínen, Például ott látsz, is--
vagy talán nem látod.
De ha én megmutatom az URL Kajak, ez valójában csak a forrás URL-jét.
Ez az URL előtt, hogy módosította bármilyen JavaScript scriptek
hogy az általuk folyik.
És ez meg fog máshogy néznek re ellenőrzésre az elem.
>> Tehát, ha megy keresztül, és akkor egyeznek meg a Elem vizsgálata
kódot a forráskódot, hogy valóban más lesz.
És ez lényegében miért Nokogiri nem kaparja dinamikusan betöltött oldalakat.
Mivel Nokogiri van kaparás a forrás URL-t,
mivel kimonó valójában kaparás, amit te alapvetően
látva select elem.
>> Tehát, ha megyek át, és én megpróbálja Kimonofy Kajak,
Én valóban megy keresztül, és válassza ki az árat.
Ez egy kicsit nehezebb, és ebben az esetben, ez
valóban látta ezt az árat mivel a különböző ezekből.
Tehát mivel akkor configure-- vagy Ha ez nem lenne dinamikusan betöltött,
meg tudná beállítani Nokogiri hogy az összes ilyen.
>> Mivel a formázás valamivel eltérő ezt a hirdetést
mivel többi részéhez képest közülük, és láthatjuk itt
ez valóban elment, és kiválasztotta az összes járat áron.
Talán én szeretném kiválasztani repülési idő is.
És tudom megy keresztül, és fajta beállítani ezt.
Nem akarom, hogy.
Csak azt akarom, a következő járat idejét.
És ismét egy pár ilyen megy keresztül, ez lesz a kép.
Tehát kimonó csinos okos.
Ez csak nem annyira erős.
>> Vannak más alternatívák, amelyek segítségével.
És én megmutatom őket ide.
Ha kényelmesebb Python helyett Ruby talán,
van egy könyvtár nevű Gyönyörű leves.
Ezekkel is.
Ez nagyon hasonlít a Nokogiri.
Van egy pár funkciókat.
Megtalálható egy HTML tag- majd feljebb vagy oldalirányban mozogni.
>> Van PyQt.
Ez valóban kaparja dinamikus oldalakat, mert ez a fajta
egy WebKit, hogy úgy tesz, mintha a böngésző anélkül, ténylegesen
hogy egy böngésző.
Így lenne megvárni az összes JavaScript betölteni először, majd
menjen be, és megpróbálja kaparja az oldalon.
>> Ha azt szeretnénk, hogy kibír Ruby, lehet menni egy szinttel fel Nokogiri.
Használhatja Vízidisznó a A Poltergeist wrapper.
És ez valóban Lényegében ugyanezt csinálja
mint PyQt, ami ez egy WebKit.
Arra vár, hogy a JavaScript betölteni először.
Ha hegedű körül vele elég, akkor is kap, hogy kattintson a dolgokat.
>> Szóval, ha van egy link, hogy nem egy klasszikus href ahol
az út könnyen megközelíthető, és ez valami JavaScript dolog, ami érzékeli
Egy kattintás, akkor valójában csinálni.
Az egyre népszerűbb könyvtár szimulálni egy felhasználó
van JavaScript, ami PhantomJS.
Ez nyilvánvalóan kaparja dinamikus oldalak, mert ez lényegében
úgy tesz, mintha Chrome anélkül, hogy a felhasználói felület.
>> És aztán, persze a legtöbb robusztus, de leglassabb lehetőség,
egy szelén böngésző automatizálás.
És sajnos, te nem lesz
tudni, hogy ezt az Ön CS50 IDE.
Mert alapvetően mi nem az, hogy elindul a Chrome,
Firefox, bármilyen böngésző hogy a használni kívánt,
és hogy nyomában talán az egér mozgás, amit beír,
és ez csak egyfajta automatizálja ezt a folyamatot.
Tehát alakult, mint egyfajta honlap automatizálási tesztelő eszköz.
De egy csomó ember használja A szelén kaparja honlapok
amit egyébként van egy sok nehézség kaparás
néhány ilyen más, gyorsabb eszközöket.
>> Szóval ez minden, amim van a web kaparás.
Érezd jól magad.
>> Közönség: Kérdés.
>> ROBERT KRABEK: Igen.
>> Közönség: Van-e olyan mechanizmus a hash A honlapon így lehet alapvetően
megy keresztül, hogy a későbbiekben.
ROBERT KRABEK: Igen.
Így tesszük a, a mi Például mind a ketten,
tesszük a teljes honlapját doc.
És így már valóban csak hogy a változó doc és kiírja egy fájlba.
Tehát, ha akartam, nem tudtam írd ki, mint egy HTML fájlt,
majd ahelyett, hogy a OpenURI és a curl kérelmet,
akkor tudtam csak megnyitni doc HTML és keressen rá arra.
>> Közönség: De tudod megőrizni az a fajta online élmény
míg te nem elérhető.
Például. ha éppen repülő több órán keresztül,
Azt akarom, hogy alapvetően archívum Az egész honlap. [NEM HALLHATÓ]
>> ROBERT KRABEK: Igen, ez exactly-- így szó, hogy ez mit is csinál
A túl sok időt vesz mindent ez lenne a következő URL.
Ha tehát futott USE, ez figyelembe mindezt HTML,
és ez tárolás belül a változó doki.
Így aztán azt csinálsz, amit akarsz csinálni doc.
Kivezetheti egy fájlba.
Közönség: De ez nem kapcsolódik fel.
Ez nem dinamikus.
Ez nem rekurzív, ugye?
Látod, mire gondolok?
Próbálom alapvetően egyfajta hash Az egész honlap a merevlemezünkön
így tudtam alapvetően csinálni néhány órán internet nélkül.
>> ROBERT KRABEK: Így van.
Tehát ha én had-- így hol a fájl I / O?
Szóval ez a fájl I / O. Tehát mondjuk helyett E hívom ezt a craigslist.html.
Én nyitni, hogy akár.
Lennék helyezi doc bele.
Becsukom a fájlt.
És akkor csak azért, mert a CS50 IDE ez a felhő, ami bármi.
Én is megy itt.
Tudom letölteni a fájlt.
És akkor ez lenne az én merevlemezére.
Szóval meg tudod csinálni így.
Vagy ha éppen otthon, nem használja a CS50 IDE, mint a Sublime, vagy valami,
ez még könnyebb, mert ez mind helyben rendelkezésre álló,
nem kötődik az interneten.
>> Közönség: Értem.
Ez egy adott problémát.
Meg tudod tenni rekurzív úgy, hogy menj több réteg mély fajta dolog?
>> ROBERT KRABEK: tudom letölteni mappák valamint, ha ez az, amit kérsz.
Közönség: Igen.
>> ROBERT KRABEK: Cool.