>> [Muusika mängib]
ROBERT KRABEK: Tere, kutid.
Minu nimi on Robert Krabek ja Ma õpetamise te poisid
kuidas kraapida veebis Nokogiri, mis on Ruby raamatukogu
ja Kimono, mis on Chrome'i laiendus.
>> Nii et kõigepealt seal on paar asja, mida sa
mida teha, kui äkki olete olnud teeme kõik psets seni
ja oma tööruumi on saada natuke täis.
Me võime tegelikult lihtsalt minna ja luua uus tööruumi teile
lihtsalt teha täiesti uus projekt.
Nii et kui sa tahad jätkata töötab CS50 malli ID
kui sul hetkel on, julgelt ja saad lihtsalt
paigaldada Nokogiri koos CFLAGS equals-- gem paigaldada nokogiri.
Aga muidu ma näitan sulle kuidas seada uue üles.
Ja siis see on sisuliselt kukutades rohkem abirattad.
Ja sa kodeerimine nagu oleksite lihtsalt kodeerimist Sublime või midagi.
Nii et kui me minema selle üle.
>> Nii öelda on teie praegune CS 50 ID.
Sa võid minna Cloud9 siin.
Võite minna oma armatuurlauale.
Tuleb tuua tööruumid tab.
Ja siis võite klõpsata Siin Loo uus tööruum.
Pane uus tööruumi, võibolla test, või pühkimist.
Ja seejärel klõpsake selle custom tab siin asemel CS50 malle tab.
Ja siis saate lihtsalt minna ja luua uusi tööruumi.
>> Olen juba loodud tööruumi siin.
Nii me töötame selle.
Ja kui oled loonud uue tööala, et Custom tab,
võid trükkida gem paigaldada nokogiri, mis ei kavatse siin.
OK, see on natuke külmunud.
Aga sa võid kirjutada gem paigaldada nokogiri.
Ja see peaks olema kõik, mis seal on paigaldus.
>> Nagu ma enne ütlesin, kui sa oled ikka töötab oma CS50 malli ID,
sa lihtsalt pead sisestama CFLAGS võrdub gem paigaldada nokogiri.
Ja ma olen juba paigaldatud see siin nii et ma ei tee seda.
Aga neile järgmised mööda, võid vabalt teha.
>> Nii et kui sul on oma Nokogiri tööruumi või paigaldatud teegi,
Ma annan sulle natuke crash kursuse Ruby süntaks
sest Nokogiri on Ruby raamatukogu.
Nii et sa pead teadma mõned põhilised Ruby süntaks töötavad Nokogiri.
Nii mõned põhilised erinevused mida sa oled harjunud
Ehk siis, kui olete töötanud Seni vaid C ja PHP,
Te deklareerite muutujaid ei tüübist.
Sa ei kasuta semikoolonid mis on selline kergendus.
Pole Sulgudes on nüüd ümber poolt või samas silmuseid, näiteks.
Sa pead lihtsalt ploki koodi ja siis paned lõppu lõpus, et.
Pole pluss pluss miinus miinus, nii lihtsalt
tean, et kui sa oled teinud juba silmad,
lihtsalt pluss võrdsete ja miinus võrdub.
Ja selle asemel, hash hulka, Teil on vaja kasutatava ja seejärel
mida iganes raamatukogu üritab laadida oma programmi.
>> Ruby ei ole koostatud keeles.
Nii et on veel leevendust.
See on rohkem sarnane PHP kus see on tõlgendatud keeles.
Võite kasutada mistahes Ruby skripti sa kirjutada Ruby järgneb
poolt skripti nimi või programm.
Et tähenda, et see on Ruby programmi sa lihtsalt lõpuks seda .rb asemel .c.
Ja seal on muutuv suurusega massiive Ruby,
mis on super mugav, kui sa oled kraapides ja võib-olla tahad lisada
andmed, et olete kraabiti massiivi.
Sa ei pea malloc uue massiivi ja kopeerida vana massiivi uude massiivi.
Sa võid lisada koos Kahe noolega märke.
Ja ei ole tähemärki olemas lihtsalt ühe kirja stringid.
Nii et peaks olema veidi lihtsam.
>> Nii me lihtsalt anda teile mõned näited mõned põhilised Ruby süntaks.
Nii et siin on näha, et selle asemel, et kaldkriipsuga kaldkriipsuga kommenteerida Ruby,
sa lihtsalt kasutada naelamärk.
Ja muutuja deklaratsiooni, siis kirjuta muutuja võrdsete
mida iganes soovid muutuja olema.
Nad võivad olla stringid.
Sul võib olla massiiv, mis sa asustada väärtusi.
paneb ja pildid on sarnased.
Meie eesmärgil Ainus erinevus on see tõesti
mis paneb, mis tähistab paneb lihtsalt paneb uue liini
märgi iganes sa oled printimise.
>> Nii et kui me anname väikese tutvustamise siin
saame teha selle with-- avada uus terminal.
Näete kõik need failid, mis on minu terminal.
Ja kui ma lihtsalt joosta Ruby, Ruby intro.rb, siis
paneb välja viis Tere Ema, Quincy, Carrier.
Adams.
Nii et kõik on deklareerimisele massiivid.
Sihtrühm: Robert, sa saad teha Teie kirjas vähe suurem?
ROBERT KRABEK: Jah.
Ja ma ei saa suurendada, sest sa ei saa suumida terminal fonte ilmselt.
>> Nii see on, kuidas sa printida muutujad oma terminal.
Võite kasutada ka muutujad sees string.
Nii hiljuti PHP, võite õppinud
et on string interpolatsiooni.
Nii et kui te võtate pilk siin, kui ma Kinnitan kolme muutuja nimi, raamatukogu,
ja keel, ja ma paneb, ma kirjutada string, hello my name is.
Ja siis selle asemel, et PHP versiooni string interpolatsiooni
mis näeb välja veidi nagu see, teil on naelamärk ja seejärel
lokkis traksidega, ja seejärel nimi muutuv.
Ja see, kuidas soovite printida, ütleme, sõltumata muutuja nimi on.
>> Ja siis saate ka concatenate stringid.
Ruby teeb super lihtne plussmärgiga.
Sa pead lihtsalt üks string vasakul pluss muutuva
või teise string pluss string.
Nii et kui ma printida välja, see peaks lihtsalt öelda, Tere, minu nimi on Robert.
Ma õpetamise te nokogiri Ruby.
>> Ja olgem lihtsalt kinnitavad, et see on tõepoolest case-- ruby ​​intro.
Tere, minu nimi on Robert.
Ma õpetamise te nokogiri Ruby.
>> Liikumine, kui muud avaldused, see on natuke erinev
mida sa võiksid kasutada Kui olete töötanud C.
Sa ei pea sulgudes.
Sa ei pea lokkis traksid.
Ja selle asemel, et mujal kui see on liitsõnumite elsif.
Nii siin, kui ma olen kuulutanud x up Siin, nagu näeme, x on veel 5.
Nii et kui x on väiksem kui 3, siis panen väike.
Kui see on väiksem kui 7, keskmise, teine ​​suur.
Nii 5 on keskmise arvu.
Ja ma lõpetan selle ploki kood lõpus.
>> Siin on minu jaoks silmus.
Ja see süntaks on ka veidi erinev.
0 kuni viie vaid sisuliselt on tunnistamise massiive 0-5.
Nii et viis teenindusaega massiivi.
Ja siis iga pesa, et massiiv, mul on incrementing i.
Nii peaks see printida 0-5 või 0-4.
Ja see peaks ajalehtedest.
>> Ja ma lihtsalt Blaze.
Te ei ole juurdepääsu Selle koodi hiljem.
Nii saate ikka käivitada ise.
>> Nii et see on teie põhilised samas loop.
See oleks lihtsalt printimisel j, incrementing 1 kuni me tabas 5.
>> Super kiire Ruby kiirkursuse kuidas kirjutada funktsiooni.
Selle asemel, et öelda, int faktoriaali number on olemas vaid def.
Ja sisuliselt sa oled määratleva funktsiooni siin.
See saab olla funktsiooni nimi,
ja see on igal muutujaid tahan lähevad funktsiooni.
Sul võib olla kui avaldused jooksul.
Võite tagastada.
Sel juhul me määratledes rekursiivselt
rakendatakse faktoriaali funktsiooni.
Nii et me lihtsalt helistada funktsioonid Ruby niimoodi.
>> Nii et kui ma olen määratletud, ma võib helistada faktoriaali, sündis 3,
ja siis 3 on mitmeid muutuva et ma saan kasutada piires funktsiooni.
Ja see to_s on lihtsalt keerates tagasi väärtust faktoriaali string.
Muidu viska error ütleb oh, ma
ei saa printida string-- sest kui see teile meenub,
paneb pannakse string-- sest see faktoriaali on tagastanud number.
Nii saame me muuta, et string nagu selline.
Ja vastupidi, võid ka teisendada stringi täisarv to_i.
>> Nii tehes kõike super lihtne, kui ma just välja kommenteerida, salvestada
ja joosta faktoriaali funktsiooni.
Me peaksime suutma näha et faktoriaali 3 on 6.
Ja see on tõsi.
>> Nii et teie kiirkursuse Ruby.
Ja nüüd sa tead, Ruby, saame minna põhi Nokogiri kraapides luua.
Sisuliselt kõik mida sa pead tegema, on, Ruby nõuda raamatukogud.
Ja meie eesmärkidel saadame abil raamatukogu OpenURI samuti Nokogiri.
Ja siis, mida sa do-- ja tulen teile süntaks see--
on avate URL palju kui te oleks lokkima taotluse, mis tähistab C URL.
>> Nii te võtate URL Veebilehe küsimus.
Sa hoia teda muutuja.
Ja siis saab otsida selle kaudu muutuja unikaalne HTML kasutades
CSS käsk.
Ja siis võid väljundi sisu kuhu tahad.
Te võite alustada andmebaasis.
Võite väljundi faili, või isegi lihtsalt printida ekraanil.
>> Nii et me näitame teile põhilised skreeperit.
Nii siin näed meil nõuab nokogiri, nõuavad avatud uri.
Teie põhi loodud, olgem nimetame seda dokumenti või doc,
võrdub Nokogiri :: HTML avatud, mis on käsk anda meile OpenURI
raamatukogu.
Ja me otsima, neile Teile, kes võiks olla elavad quad,
jalgratastega, mis on Boston loetletud Boston Craigslistissa bike osa
site.
>> Nii et kui te ei tunne Curl, ma lihtsalt
näitan sulle reaalne kiire mida cURL teevad.
Kui ma tahtsin saada kõik URL Craigslistissa kohas, kui ma tüüpi Curl
see lihtsalt puistab kõik URL alates Craigslistissa jalgratta site
peale minu terminal.
See ei ole eriti kasulik, sest ma ei ole
tahad käsitsi läbida ja leida asi, mida ma otsin.
Aga just nii saab näha, et ma olen tegelikult
kasutades õige koodi, kui te vaatate kell URL Craigslistissa bikes--
mingil põhjusel see ei ole leitud.
Kui te vaatate seda lehte ja te vaatate URL,
see peaks olema identne cURL taotluse, et ma lihtsalt saata.
Ja tõepoolest, see on, mida kuramuse salvestatud doc muutuja.
>> Nii et kui sa lähed tagasi meie koodiga hoiame Seejärel saab tegutseda selle doc muutuja
abil CSS.
Nii öelda tahtsin saada kõik sildid, mis on span.txt,
ja kõik a siltide mis tag.
Ja miks võiks me tahame Selleks, kuulen sind nutma?
>> Kui me Kontrollige Element, see annab sulle jaotus kuidas URL on üles ehitatud.
Kui ma kerige läbi Siin näed
mida kõik need erinevad elemendid esindab.
Ehk ma tahan juurde see konkreetne element.
Nii ma kasutan Chrome arendaja tööriistad kontrollida Element.
Ma näen siin, et seda on silt sees span
Tag klassi txt.
>> Nii et see jõuab meie Esimene operatsioon, mis
on doc.css span, mis on tag et Otsin jooksul kõik selle URL.
Ja siis txt tegutseb palju nagu CSS teeb, kui sa oled lihtsalt kirjalikult CSS
HTML faile täpsustades klassi.
Nii et see eriti operaator määrata span silt klassi txt.
Ja siis, kui ma jätan ruumi, see on siis minna sees, et tag
ja siis leida sildi selles.
>> Nii et kui ma lihtsalt panna see terminali, ma peaks
võimalik näha sisuliselt kõike mis on selle ajavahemiku klassi txt.
Nii anname et minna.
ruby craigslist-skreeperit.
Ja tõepoolest, mis annab meile kõik need sildid erinevate nimekirjad, mis
on Craigslistissa lehel.
>> Nii et kui me läheme tagasi, saame muuta see midagi natuke rohkem kasu.
Võib-olla me tahame lihtsalt linke.
Kuna selle sildi, ma ka on hyper tee
et see leht läheb.
Nii et kui te vaatate seda koodi siin, mida ma teen on selle asemel CSS,
Ma ei saa minna at_css.
Ja see lihtsalt saada esimene osa kõik need asjad.
Nii kui ma seda üles koodi ma lihtsalt varem näidanud,
asemel tagasi kõik Selle, see oleks lihtsalt
tagasi esimese üks nendest.
Nii et kuidas at_css operaator töötab.
>> Nii et me tahame säilitada path kõik esimesed silt.
Ja kuna annab meile a-- nii et me oleme ikka veel kasutada CSS.
Aga kuna see on annan meid tagasi kogu massiivi silte
me juurdepääsu esimene element.
Nii et see on üks viis, et saate juurdepääsu mingit erilist elementi, kui teil
on massiivi elemendid tagastatud,
sest saab ravida midagi, mis CSS naaseb massiivi sisuliselt.
Ja siis me läheme pääseda hüperteksti viide atribuuti.
>> Nii et kui te võtate pilk, kui sa vaatasid tõesti lähedal siin,
kui sa just sisuliselt vaadata URL bar,
see on tee, mis sa lähed tuleb kraapides.
Nii et kui me lihtsalt käivitada uuesti, ja veenduge, et oleme salvestanud.
Te saate vaadata kodus.
See tegelikult sobib kuni seda linki.
>> Miks võiks me tahame seda kasutada?
Kui soovite kraapima lehekülje ja see on
linkide lehekülje nagu Craigslistissa teeb, siis
Võiksid minna siis igasse neid sidemeid
ja siis kraapima sisu, et mis
on täpselt see, mida me teeme.
>> Nii et kui teil on rada, varieeruv, ma ei ole enam tõesti
hoolivad lasta välja trükkida.
Ma lihtsalt pean seda säilitada muutujana.
Ja siis ma pääseb teise lk samamoodi ma pääsen
doc esimese koha.
Välja arvatud URL, me ei kavatse kasutada string interpolatsiooni
nagu ma olin kirjeldades Ruby varem lisama
tee lõpus root.
>> Mis siis, et see saab teha, on see saab panna teele
et ma kaabitakse varem ja seejärel lülitage see
uude punkti, mida soovite helistada see-- first_listing, näiteks.
Aga ma jätan see kirje nüüd,
sest see on see, mida ma kasutan siin.
>> Nii öelda tahtsin saada kirjeldus esimese postitad Craigslistissa.
Nii et ma läheks siin.
Ma kliki Kontrollige Element jälle sest see on kirjelduses.
Ma tahaks minna siia ja vaata kui ma ei leia kuidas ma võiks
võimalik otsida ainulaadne tag.
Ja sel juhul on tal ID-, mis viib meid
meie kõrval viis otsima sildid, mis on koos hashtag.
>> Nii klassidele, saate kasuta dot operaator.
Nii txt on täpsustades klassi txt, samas kui hash täpsustab ID.
Nii et sel juhul silt on osa ja ID on postingbody.
>> Nii see läheb ja leiab first-- sest me oleme
kasutades at_css-- see läheb ja leiab, esimene element, mis
kerkib märksõnaga punkti ja ID postingbody.
Ja siis pääsete teksti element Selle eseme tagastada .text.
Ja siis me saame salvestada et kirjelduses.
>> Nüüd, et meil on muutuja kirjeldus,
võiksime teha, ütleme, faili I / O. Nii faili I / O Ruby
on väga sarnane faili I / O C, kus me avada faili.
Me võime kirjutada seda.
Ja siis me sulgeda, et fail.
>> Nii et siin, me lihtsalt nimetades faili, mõned suvalise muutuja.
Me oleks võinud ka lihtsalt panna see siin.
Meil on muutuja, mis me salvestamiseks Avatud faili nagu File.open.
Ja me kirjutame seda pilti, nii me seda avada koos w operaator.
Ja siis me paneme string sisse esitada koos .puts operaator.
Ja siis me paneme muutuja, mida me tahan kirjutada faili selles.
Ja siis me lihtsalt sulgeda fail.
>> Nii et kui me minna ja käivitada, see peaks koostama dokumendi,
koos description.txt mis on see kirjeldus sees.
Nii et kui ma saan see-- ole.
See on toodetud tekstifail, loodetavasti sama asi.
Nii oleks võinud olla uue postitamist mis on tulla, kui ma olen rääkinud.
Ja tõepoolest tundub, et on olnud.
Nii et kui me läheme see klassikaline bike, 1962-1966, mis tundub, et sobitada.
Ja seal, kuhu lähed.
>> Nii et kõige elementaarsem funktsionaalsust pühkimist.
Me oleks võinud selle asemel lihtsalt kirjutan seda pilti,
lisame asju massiivi.
Nii et kui ma kuulutada kolm massiivid, pealkiri, hind ja kirjeldus.
Ja me tegutsevad doc kirje nüüd.
Me ei lähe läbi ja leida kõik span.txt.
Ja pidage meeles, see tagastab massiivi kõik esemed, mis ta teeb.
Ja siis Ruby, võid lihtsalt kasutada .Iga itereerima läbi iga kirje
massiivi.
Ja siis iga objekti Ma lihtsalt seda kutsuda
link, sest see on sisuliselt, mis see on.
>> Nii et kui ma panen iga link.css dot a.hdrlnk, see on tegelikult läheb link
ja leides jooksul, mis viitavad teise HTML element ja vastava klassi.
Nii et kui me mäletame, mis see oli, siis span.txt,
võite KATKENDLIK lubage mul tagasi minna tõeline quick-- jooksul span.txt
meil on palju teisi klasse.
Nii sees span.txt, ootame jaoks silt, millel on klassi hdrlnk.
Lubage mul leiavad, et kutid reaalne kiire.
>> Nii et näete, siin on see silt see on sees span class txt
mis on klassi hdrlnk.
Ja see on tõesti see, mida me üritame saada.
>> Nii et me nüüd püüame hoida kõik neid sidemeid sees tiitli.
Ja siis me läheme printida välja kõik need lingid.
Ei vabandust.
Me läheme välja printida hind kõigi nimetatud.
Nii saab käivitada tõesti Kiire ja vaata mida ta teeb.
>> Nii see lihtsalt põhimõtteliselt läks läbi iga lingid
omakorda ligi sildi küsimus, ja siis välja tõmmata hind.
Ja ta tegi, et kuna pärast teil on kõik pealkirjas,
oleme lihtsalt salvestatud pealkiri seal.
Me oleme lihtsalt salvestatud link jooksul massiivi pealkiri.
Ja seda ahel, kus selle asemel, et minna a.hdrlnk,
me otsime span.price.
Nii et kui ma ei saa lihtsalt tõesti kiiresti leida hind, kui te kontrollida element,
näete, et see on span klassiga hinna.
Ja see on sisuliselt kuidas Saame hind seal.
>> Nii see on tõesti põhilised puhul pühkimist.
See, kuidas sa saad kõik elementide lehel
et, ütleme, sa juba tead URL.
>> Nii et kui me tahame saada veidi rohkem sügavuti,
saame kraapida lehekülgi lehekülge.
Ja see näide, ma olla väljastamiseks, CSV faili.
Nii et ma vajavad csv siin sest Ruby ei, endasse
on funktsionaalsus lihtsalt väljund CSV faile.
Nii et super lihtne.
Lubage mul minna järgmisele.
Me kaetud faili I / O. Nii et see on sarnane sellele, kuidas see on C.
Ja enne kui me liikuda Kimono, Ma lihtsalt näitan sulle tõesti kiire, kui
kraapida asulakohtadest vaatamisväärsusi.
>> Nii et me juba õppinud kuulutada massiivid Ruby.
Nii et ma lihtsalt kuulutab tervest hulgast massiivid
et ma siis andmete salvestamiseks jooksul.
doc töötab samamoodi nagu ta tegi eelmise faili.
Me läheme, leides Iga span.txt s.
Me juba teame seda.
See on mahuti, mille jooksul iga link on kõik andmed, mida me tahame.
>> Nii et siin see, mida me teeme on iga link span class txt, me läheme
ja me leida sildi, leidmisel esimene element seda.
Pea meeles, CSS tagastab massiivi, nii et sa ei saa lihtsalt kasutada seda nagu on.
Me leiame esimene element.
Isegi kui see on massiivi üks objekti, sa pead seda süntaksit,
ja tõmmake href atribuut.
>> Nii et me tegime seda varem.
Nii et see peaks vaatama tuttav.
Ja nii nüüd on meil hulgaliselt nimetatakse teed kõik meie linke
et me tahame seda kasutada.
Nii et kui meil on see massiiv kõik radade et tahame kasutada,
siis saame luua kirje iga nendel lehekülgedel, kui me avame sellel lehel.
Nii nagu me nägime ka edasi süntaks enne, kui see
teeme string interpolatsiooni koos teele siin, nii süntaks on ainult tee.
Ja ma võiksin nimetada seda muutuja suvalise nime.
>> See on oluline.
See on massiiv, et teil olla juurdepääs iga element.
Aga kui sa ütled et tee teed, See tähendab iga element rajad,
nimetame seda teed, ja kasutada seda.
See on sisuliselt nagu siis, kui teha jaoks silmus ja te kasutate int i.
Nii saab ravida tee kui muutuja, mis on mis suureneb.
>> Ja siis kõik need, lähevad kõik need lingid.
Kuna me hoiustamisel punktis lehel nii me luua uue lehekülje iga kord
me seda kasutada.
Ja siis selles uue lehekülje, leida span.postingtitletext, span.price,
ja siis jaotises # postingbody.
Meil on juba kaetud osa # postingbody kui me vaatasime kirjeldus.
>> Nii saame minna näed Craigslistissa posti kui sa oled lihtsalt vaadates pealkirja,
näete siin, span postingtitletext.
Ja see on põhjus, miks see seal.
Ja siis hind, saate kasutada seda koos span class hinna.
>> Nii me ka võib-olla võiks soovite salvestada URL.
Nii me lihtsalt käivitada uuesti, siis hoia seda massiivi,
sest kui te otsite Craigslistissa, sa oled
ilmselt läheb taha viis, kui sa näed midagi, mis sind huvitab,
minna tagasi sellele saidile.
Nii et sa lihtsalt tahad salvestada URL viited huvides.
>> See on lihtsalt sisuliselt teine ​​süntaks silmus.
Ma võiks lihtsalt ei paths.each asemel on ette tee teed koos indeksiga.
Ja see süntaks on Ruby for-- tee on see, mida me tegime siin üleval,
kuulutab muutuja iga kirje.
Ja indeks käitub i in C silmuseid.
Nii saate jälgida mida indeks on.
>> Nii et siin on lihtsalt väike mugav asi
sest kui sa kasutad skreeperit.
Kui oled kraapides sadu lehekülgi, veenduda, et see ei ole rippuvad,
See lihtsalt väljund, Ma pääseda sellele lehele
ning tagada, et see on ikka jätkub.
Aga meie eesmärkidel, sest seal on sada esemed,
Ma lähen pääseda vaid kolm neist nii et me ei otsa aega siin.
>> Aga enne kui me, et ma olen lihtsalt näitan sulle tõesti kiire,
Räägin väljaantav tiitel, hind, kirjeldus ja URL
Iga linke, mis ma olen kraapida.
Ja siis see on lihtsalt süntaks CSV raamatukogu.
Sa avada CSV.
See on see, mida ma nimetan seda.
Avage see kirjutada do.
Ja siis CSV on faili sa oled sisestanud kõike arvesse.
See on lihtsalt terve mõistuse kontroll ma tean, et see töötab.
Ja see on minu mõistuse kontrolli tean, et see on lõpetatud.
Nii et ma panen pealkirja arvesse järjest CSV, hind, url, kirjeldus,
kõik ridadesse CSV.
>> Nii et kui me läheme ja joosta Selle now-- ja ma lihtsalt
veenduge, et olen päästetud see-- asemel lihtsalt väljastab selle terminal,
meil peaks olema CSV faili, mis on toodetud.
Nii et siin me näeme CSV faili, mis on toodetud.
See on väljund Maastik, et ma lihtsalt jooksin.
Nagu näete siin, tutvumise lehele 0, 1, 2, 3.
Need on pealkirjad, hinnad, kirjelduse.
Ja kui me vaatame seda CSV file et me oleme loodud,
näed oma väljastada siin.
See ei ole Excel, nii see ei ole vormindatud ridu ja veerge.
Aga te võite ette kujutada, kuidas see võib olla vormindatud.
>> CSV tähistab komaga eraldatud väärtused.
Nii võite ette kujutada seda võib järjest.
Ja iga komaga oleks näidata eraldi veerus.
Just sõna caution-- Mõnikord sa oled
kraapides asju palju komasid.
Seega, kui olete väljastamiseks, see CSV faili,
see ei pruugi väljund kuidas sa võiksid mõelda.
>> Nii et sisuliselt kõik seal on kraapides HTML
lehekülgi Nokogiri.
>> Nii internetis olemise uuenduslik, kuna on tulnud välja
koos rohkem automatiseeritud ja GUI versiooni, ehkki vähem jõuline
versioon kraapides erinevatel veebilehtedel.
Ja meie eesmärkidel Ma tulen näidates
Chrome laiendus nimega Kimono.
Ja kõik mida sa pead tegema, on teil liikuda lehele, mida soovite kraapida.
Sa klõpsad huvialasid.
Sa kalibreerida väljad sest see automaatselt
tuvastada, mida ta mõtleb sa tahad olla kraapides,
ja siis sa lihtsalt luua API.
>> Nii et kui me olime näidata seda Craigslistissa, siis tegelikult ei tööta.
Ja see on see, mida ma läksin tagasi öelnud see ei ole nii tugev.
See on hädas luua API.
Aga kui meeleavaldus mida see teeks,
Kui installite Chrome'i laiendus, kõik sul on klõpsate seda.
See Kimonofies lehel, ja siis kliki asi, mida sa tahad skripti.
>> Nii et kui ma oleksin klikkima et oleks esile
mida see arvab, et ma tahan olla kraapides sellel lehel.
Ehk ma nimetan seda nimekirjad.
See, kui palju punkte ma valinud.
Ja ma lihtsalt kinnitada ega ümber lükata mõned teiste pakutud nimekirjad
saada see lisada Mis saab kraapida.
>> Nüüd näeme seal sada valitud üksused.
Kui ma tahan olla teises valdkonnas, et ma Samuti kraapida, mis on seotud sellega
öelda tahan kraapida hind samuti, siis ma saan teha sama.
>> Nii et siin on näide sellest, kuidas see on palju vähem jõuline, sest nüüd on see
pealevõtmine linna asemel lihtsalt hind, mida ma tahan.
Ja nüüd on see kiirenenud 200 asja.
Võite minna tagasi ja kustutada.
Võid proovida uuesti.
Aga mingit garantiid.
See on, kuidas see töötab mõnikord.
Nagu näete, siin, nüüd ta ütleb 96 siin.
See on kiirenenud enamik linke mis sa tahad kraapida, kuid mitte
tingimata kõigile.
>> Veel üks kasulik vahend Kimono kuigi on sul võimalik minna lisafunktsioonid
siin, mine Advanced, ja siis näitan sulle
jaotus unikaalne viivat HTML
sildid, mis sa tahad kraapida.
Nii nimekirjad, kui te vaatate siin Kui te juurde div p span span,
tegelikult võite lihtsalt kasutada see oma Nokogiri koodi
kus enne oli meil span.txt juurdepääsuks iga loetelu.
Kui ma tahan teksti jooksul nimekirjad,
Suutsin sisend div ruumi p ruumi span ruumi span ruumile,
ja see oleks sama efekti.
Ja neile, kes on huvitatud kasutades regulaaravaldisi,
see juhtub ka teile regulaarselt Väljend omamoodi string sisestada
leida asju sa üritad leida.
>> Nii et on veel üks lahe omadus kimono, kus saab pagineerima,
mis ei ole mitte ainult ma kraapima selle tulemuste lehel
Ma ei vajuta seda vähe nuppu siin, PAGINATION,
määrata nupule, mis oleks võta mind järgmisel leheküljel,
ja siis lihtsalt tean, et see võib kinnitada, et järgmisel leheküljel,
ja siis kraapige kõik the-- niikaua kui see on sama formaati course--
Maastik kõik need lingid ka.
>> Nii sest Kimono ei taha töötada Craigslistissa, mida oleme teinud
on mul Kimonofied Harvard Crimson.
Olen tõmmatud mõned omamoodi top Soovitatavad artiklid, kinnitavad siin.
Ütle kõik need.
Olen koostanud selle API Teile enne tähtaega.
Aga muidu mida sa teeksid on sul oleks lihtsalt nuppu Valmis.
Sisesta oma API üksikasjad.
Seadke see kas automatiseeritud või käsitsi indekseerimist.
Nii võib uuendada andmeid iga 15 minuti
nädalal, iga päev, mida iganes sa tahad.
Pane oma API.
Loo API.
Teie kasuks, lõin Crimson esilehel API juba.
>> Nii et sa lihtsalt luua kontole sisse Kimono ja see
salvestab kõik oma API teile.
Nii et sisuliselt ongi kõik teie Eraldi erinevad kriimustuste eest.
>> Nii et kui me vaatame siin, see on arvamused lingid, et olen kogunud.
Need on iseloomustanud lingid, mida olen kogunud.
Ja need on kõige lugeda lingid, mida olen kogunud
Sellest viimasest API Maastik.
>> Nii et kui te näete siin, Need oleks Objekte,
Need oleks arvamusi, mis selles näites
Olen kokku neid kõiki ühte kollektsioon.
Aga kui sa lihtsalt mängida seda natuke, saate jagada seda üles
ning jagada see aga tahad niikaua
kui vormindamine on veidi erinev.
>> Lihtsalt mängida seda on indekseerimise luua üks varjuküljed
on sul võimalik ainult kerra 25 lehekülge korraga.
See ongi üks piiravaks teguriks.
Aga siin, kui valid käsitsi indekseerimine,
kuidas saab öelda, et Ajakohastage oma andmeid.
Ja siin näete indekseerimise ajalugu kõike, mida olete roomas.
Ja kutid minna tagasi, sisse logida, mängida kõiki erinevaid võimalusi
et saate muuta ja kasutada oma andmed.
>> Kimono saab seadistada kraapida linke linke.
Ja siis oleks seda teha esimese kraapides linkide nimekiri,
ja hiljem kasutada seda API kui hüpata punkti teise API
et loote skripti.
Aga see on keerulisem kui mida me hakka täna.
>> Nii et Kimono.
Me räägime plusse ja miinuseid Nokogiri ja Kimono.
>> Nokogiri, see on tõesti kiire.
See on lihtne testida.
Sa võid paneb midagi konsool, lihtne seadistada.
Võite otsustada täpselt, mida tahad kraapida ja poest.
Puuduvad leht piirides.
Ma tegelikult kasutas seda kraapida nagu 1800 Lõuna-Aafrika koolis veebilehed
kirju internatuuri, mis ma tegin.
>> Nii et see on võimalik, kuigi hea tava oleks lahku skripti.
Sest kui see ei õnnestu, siis sa ei saa midagi teha.
Aga kui sa sada, äkki 200 lehekülge korraga,
siis on mõned võimalused vähemalt saada see tükkhaaval, eriti
kui teil on halb internet.
>> Kahjuks saab ainult kraapida HTML.
Nii et kui teil on dünaamiliselt koormatud pages--
ja ma näitan teile näide nagu Kayak on second--
Nokogiri kahjuks ei kraabi seda.
>> Aga Kimono on ka lihtne kasutada.
Nagu nägid, et see on sisuliselt punkti ja klõpsa.
See võib kraapida JavaScript.
Kahjuks on maksimaalselt et mitu lehekülge saab kraapida.
Mõnikord on vähe raske seadistada.
See saab segaduses.
Aga see on kindlasti midagi arvata
kui sa ei taha olla super tugev hooldatav kraapima.
Kui tahad lihtsalt saada kõik off lehe kiiresti,
siis Kimono on tõesti hea vahend kasutada.
Ja nagu ma mainisin, ei arenenud omadus Kimono
mis näitab teile, kuidas juurdepääsu ainulaadne HTML
element, mis on super kasulik ka Kui te töötate Nokogiri.
>> Nii et kui me läheme Kayak saidi jaoks Näiteks näete on--
või äkki sa ei näe.
Aga kui ma näitan sulle URL Kayak, see tegelikult on just allikas URL.
See on URL enne olemisele modifitseeritud iganes JavaScript skripte
et nad on pooleli.
Ja see läheb teistmoodi alates kontrollimise element.
>> Nii et kui sa lähed läbi ja sa sobivad kuni Kontrollige Element
koodi lähtekoodi, see on tegelikult saab olema erinev.
Ja see on sisuliselt miks Nokogiri ei saa kraapida dünaamiliselt koormatud kohtades.
Kuna Nokogiri on kraapides allikas URL,
samas Kimono on tegelikult kraapides mida sa sisuliselt
näeme Vali Element.
>> Nii et kui ma lähen läbi ja ma proovida ja Kimonofy Kayak,
Ma ei saa tegelikult läbida ja valige hinnaga.
See on natuke raskem, ja sel juhul, see on
tegelikult näeme seda hinda erinevana neid.
Nii et võite configure-- või kui see ei ole dünaamiliselt koormatud,
võid seadistada Nokogiri saada kõiki neid.
>> Kuna vormindamine on veidi erinevad selle oksjoni
sest see on võrreldes ülejäänud neist, ja näed siin
see on tegelikult läinud ja valitud kogu lennu hindades.
Äkki ma tahan valida lennuaja samuti.
Ja ma ei lähe läbi ja omamoodi seadistada nii.
Ma ei taha seda.
Ma tahan järgmise lennu ajal.
Ja siis pärast paari neid läbimas, siis saab pilt.
Nii Kimono on päris tark.
See lihtsalt ei ole päris nii tugev.
>> On teisigi alternatiive, mida saab kasutada.
Ja ma näitan sulle neid siin.
Kui teil on mugavam Python asemel Ruby äkki,
on raamatukogu Ilusaid supp.
Võite kasutada seda.
See on väga sarnane Nokogiri.
See on veel mõned omadused.
Leiad HTML tag ja siis liikuda üles või külgsuunas liikuda.
>> Seal PyQt.
See võib tegelikult kraapida dünaamiline saite, sest see on omamoodi
on WebKit mis teeskleb, et brauser, ilma et tegelikult
olles brauserit.
Seega oleks oodata kõik JavaScript laadida kõigepealt ja siis
minna ja proovida ja kraapida kohas.
>> Kui sa tahad jääda Ruby, siis võib minna üks tasandil üles Nokogiri.
Võite kasutada Vesi Siga koos poltergeist ümbris.
Ja seda saab tegelikult sisuliselt sama asja tegema
kui PyQt, mis on see on WebKit.
See ootab jaoks JavaScript laadida esimesena.
Kui te viiul ringi seda piisavalt, võite isegi saada see klikkima asju.
>> Nii et kui seal on link, et ei ole klassikaline href kus
tee on kergesti ligipääsetav ja see on mingi JavaScript asi, mis tuvastab
Click saab tegelikult teha.
Üha populaarsemaks raamatukogu simuleerida kasutaja
on JavaScript, mis on PhantomJS.
See saab ilmselt kraapida dünaamiline saite, sest see on sisuliselt
teeseldes Chrome ilma kasutajaliides.
>> Ja siis muidugi kõige jõuline, kuid aeglasem variant,
on Seleen brauseri automaatika.
Ja kahjuks sa ei kavatse olla
seda teha teie CS50 IDE.
Kuna sisuliselt mida see ei ole see käivitub Chrome,
Firefox, olenemata brauseri mida soovite kasutada,
ja ta lugusid äkki hiirt liikumine, mida sa kirjutad,
ja see lihtsalt omamoodi automatiseerib selle protsessi.
Seega töötati välja omamoodi veebisait automaatika testimise tööriist.
Aga paljud inimesed kasutavad Seleen kraapida veebilehed
et nad muidu on palju raskusi kraapides
kusjuures mõned neist Teine, kiirem tööriistu.
>> Nii et kõik on mul web pühkimist.
Lõbutse hästi.
>> Sihtrühm: Küsimus.
>> ROBERT KRABEK: Jah.
>> Sihtrühm: Kas on olemas mehhanism hash kodulehel, et sa võiksid põhimõtteliselt
läbida seda hiljem.
ROBERT KRABEK: Jah.
Nii panime meie Näiteks nii neist,
paneme kogu kodulehel doc.
Ja siis võiks tegelikult lihtsalt võtta muutuja doc ja kirjutada faili.
Nii et kui ma tahtsin, et ma võiks kirjuta välja HTML-failina,
ja seejärel kasutamise asemel OpenURI ja cURL taotluse,
siis ma võiks lihtsalt avada doc HTML ja siis otsida seda.
>> Sihtrühm: Aga kas sa säilitad omamoodi online kogemusi
Kuigi te offline.
Näiteks. kui sa oled sõidavad mõnetunnist
Ma tahan, et põhimõtteliselt arhiiv Kogu kodulehel. [Kuuldamatu]
>> ROBERT KRABEK: Jah, see on exactly-- nii sõna otseses mõttes, mida see teeb
on see võtab kõik et oleks sellelt aadressilt.
Nii et kui me jooksime Curl, see on Seda kõike HTML,
ja see on hoiustamisel sees muutuja doc.
Nii siis võid teha mida iganes sa tahad teha doc.
Soovi korral saate seda faili.
Sihtrühm: Aga see ei ole seostatud.
See ei ole dünaamiline.
See ei ole rekursiivne, eks?
Sa näed, mida ma mõtlen?
Püüan põhiliselt omamoodi hash Kogu kodulehel minu kõvakettale
nii et ma võiks põhimõtteliselt teha mitmeks tunniks ilma internet.
>> ROBERT KRABEK: Right.
Nii et kui ma had-- siis kus on mu faili I / O?
Nii et see on faili I / O. Nii öelda asemel Selle kutsun seda craigslist.html.
Ma avada see üles.
Ma paneb doc ta.
Ma fail sulgeda.
Ja siis lihtsalt sellepärast, et CS50 IDE on pilve, mis on iganes.
Ma ei lähe siin.
Võin laadida faili.
Ja siis oleks minu kõvakettale.
Nii et sa ei saa seda teha nii.
Või kui sa oled kodus, ei kasuta CS50 IDE, nagu Sublime või midagi,
see on isegi lihtsam, sest see kõik on kohapeal olemas,
ole seotud interneti.
>> Sihtrühm: ma näen.
See on üks eriline probleem.
Kas sa seda rekursiivselt nii, et teil minna mitu kihti sügav selline asi?
>> ROBERT KRABEK: ma ei lae kaustad samuti, kui see on, mida sa küsida.
Sihtrühm: Jah.
>> ROBERT KRABEK: Cool.