[Speel van musiek] ROBERT KRABEK: Hallo, ouens. My naam is Robert Krabek en Ek sal julle leer ouens hoe om die web krap Nokogiri, wat is 'n Ruby biblioteek, en kimono, wat is 'n Chrome uitbreiding. So is daar 'n eerste paar dinge wat jy kan doen as Miskien het jy doen al die psets so ver en jou werkplek is om 'n bietjie vol. Ons kan eintlik net gaan en skep 'n nuwe werkplek vir jou om net 'n splinternuwe projek te doen. So as jy wil om voort te gaan werk in die CS50 sjabloon ID wat jy tans het, voel vry, en jy kan net Nokogiri installeer met CFLAGS equals-- juweel installeer nokogiri. Maar anders sal ek jou wys hoe om 'n nuwe een op te stel. En dan is dit in wese val meer opleiding wiele. En jy kodering asof jy net kodering in Sublime of iets. So as ons skuif dit oor. So sê dit is jou huidige CS 50 ID. Jy kan net gaan na Cloud9 hier. Jy kan gaan na jou dashboard. Dit moet bring blad Work. En dan kan jy kliek hier, skep 'n Nuwe Workspace. Noem jou nuwe werkplek, Miskien toets of skraap. En kliek hier persoonlike blad in plaas van die blad CS50 templates. En dan kan jy net gaan en die skep van 'n nuwe werkplek. Ek het reeds 'n werkspasie hier. So ons sal moet werk met hierdie. En as jy 'n nuwe geskep werkspasie so met die blad Custom, jy kan net tik juweel installeer nokogiri, wat nie hier gaan. OK, dit is 'n bietjie gevries. Maar jy kan tik juweel installeer nokogiri. En dat almal moet wees dat daar is om die installasie. Soos ek gesê het, as jy nog werk in jou CS50 sjabloon ID, jy hoef net te tik CFLAGS gelyk juweel installeer nokogiri. En ek het reeds geïnstalleer dit hier so sal Ek dit nie doen nie. Maar vir diegene volgende saam, voel vry om dit te doen. So as jy het jou Nokogiri werkspasie of biblioteek geïnstalleer is, Ek gaan vir jou 'n bietjie van 'n crash kursus in Ruby sintaksis omdat Nokogiri is 'n Ruby biblioteek. Sodat jy nodig het om te weet 'n paar basiese Ruby sintaksis vir die werk met Nokogiri. So 'n paar basiese verskille van wat jy gebruik om te miskien as jy het gewerk dusver in net C en PHP, verklaar u veranderlikes met geen tipe. Jy hoef nie kommapunte gebruik, wat is 'n soort van 'n verligting. Daar is geen hakies nou sowat vir of terwyl loops, byvoorbeeld. Jy moet net 'n blok van die kode, en dan kan jy die einde aan die einde van daardie. Daar is geen plus plus of minus minus, so net weet dat wanneer jy doen vir loops, net plus gelykes en minus gelyk. En in plaas van hash sluit, jy gebruik benodig en dan watter biblioteek probeer om te laai in jou program. Ruby is nie 'n saamgestel taal. So dis 'n ander verligting. Dit is meer soortgelyk aan PHP waar dit is 'n geïnterpreteer taal. Jy kan enige Ruby script loop wat jy skryf met Ruby gevolg deur die naam van jou script of program. Om aan te dui dat dit 'n Ruby program, jy net eindig met .rb plaas van .c. En daar is veranderlike grootte skikkings in Ruby, wat is super gerieflik wanneer jy skraap en miskien wil voeg data wat jy geskraap in 'n skikking. Jy hoef nie na 'n nuwe reeks malloc en kopieer die ou verskeidenheid in die nuwe reeks. Jy kan net voeg met Die twee pyl tekens. En daar is geen karakters, is daar net enkele brief snare. Sodat moet 'n bietjie makliker te maak. So ons sal net 'n paar te gee jou voorbeelde van 'n paar basiese Ruby sintaksis. So hier kan jy sien dat in plaas van die streep streep om kommentaar te lewer in Ruby, jy net die gebruik van die pond teken. En veranderlike verklaring, het jy tik net die veranderlike gelykes alles wat jy wil hê dat die veranderlike te wees. Hulle kan snare. Jy kan skikking, het wat jy vul met waardes. wan en afdrukke is soortgelyk. Vir ons doeleindes, die enigste verskil is regtig dit plaas, wat staan ​​vir wan, net sit 'n nuwe lyn karakter op alles wat jy druk. So as ons 'n klein demonstrasie hier ons kan hardloop hierdie with-- open 'n nuwe terminale. Jy kan al hierdie te sien lêers wat in my terminale. En as ek net loop Ruby, Ruby intro.rb dit sit uit vyf Hallo Mather, Quincy, Carrier. Adams. So dit is al wat daar is om te verklaar skikkings. GEHOOR: Robert, kan jy maak jou font 'n bietjie groter? ROBERT KRABEK: Ja. En ek kan in zoom, want jy kan nie zoom om terminale fonts blykbaar. So dit is hoe jy druk veranderlikes om jou terminale. Jy kan ook gebruik veranderlikes in 'n string. So onlangs in PHP, jy dalk geleer het dat daar string interpolasie. So as jy 'n blik hier neem, as ek verklaar drie veranderlikes, naam, biblioteek, en taal, en ek wan, ek skryf 'n string, hello my naam is. En dan in plaas van die PHP weergawe van string interpolasie wat lyk 'n bietjie meer soos hierdie, jy het 'n pond teken, en dan 'n krullerige brace, en dan die naam van die veranderlike. En dit is hoe jy wil druk, sê Wat ook al die veranderlike naam is. En dan kan jy ook koppel snare. Ruby maak dit super maklik om met die plus teken. Jy moet net een string aan die linkerkant plus 'n veranderlike of 'n ander string plus 'n string. So as ek druk dit uit, dit moet net sê Hallo, my naam is Robert. Ek sal julle leer nokogiri in Ruby. En laat ons net bevestig dat inderdaad die case-- Ruby intro. Hallo, my naam is Robert. Ek sal julle leer nokogiri in Ruby. Beweeg op, as anders state, dit is 'n bietjie anders van wat jy kan gebruik word om as jy het gewerk in C. Jy hoef nie die hakies nodig het. Jy hoef nie die krulhakies nodig. En in plaas van anders as, dit is 'n aaneen elsif. So hier, as ek verklaar x up hier, soos ons kan sien, is nog steeds x 5. So as x is minder as 3, sal dit klein te sit. As dit is minder as 7, medium, anders groot. So 5 is 'n medium-nommer. En ek eindig hierdie blok van die kode met die einde. Hier is my lus. En dit is ook sintaksis effens anders. Die 0 tot vyf net in wese is verklaar 'n skikkings van 0-5. So is daar vyf slots in die skikking. En dan vir elke slot in daardie skikking, sal ek die verhoog i. So moet die druk 0-5 of 0-4. En dit moet medium druk. En ek sal net bles deur. Julle sal toegang hê hierdie kode later. So julle ouens kan dit self te hardloop. So dit is jou basiese while lus. Dit sal net die druk van j, die verhoog deur 1 tot ons getref 5. Super vinnige Ruby crash kursus oor hoe om 'n funksie te skryf. In plaas van, sê, int faktoriaal nommer, ons het net def. En in wese is jy definisie van 'n funksie hier. Dit gaan die wees naam van die funksie, en dit is 'n veranderlikes wat jy wil slaag in die funksie. Jy kan indien state binne te hê. Jy kan terugkeer. In hierdie geval, ons is definisie van 'n rekursief geïmplementeer faktoriaal funksie. Sodat ons net noem funksies Ruby soos hierdie. So as ek hierdie, ek omskryf kan faktoriaal noem, slaag in 3, en dan 3 sal die aantal veranderlike wat ek kan gebruik binne die funksie. En dit is net die to_s draai die waarde van faktoriaal teruggaan na 'n string. Anders sal dit gooi 'n fout te sê o, ek kan 'n string-- nie druk want as jy onthou, sit 'is string-- sit, want dit faktoriaal het 'n aantal teruggekeer. So kan ons skakel wat om 'n string soos so. En omgekeerd, kan jy ook omskep 'n string na 'n heelgetal met to_i. So maak alles super eenvoudige, as ek dit net nie kommentaar lewer nie, te red en loop die faktoriaal funksie. Ons moet in staat wees om te sien dat faktoriaal van 3 is 6. En dit is inderdaad waar. So dit is jou crash kursus in Ruby. En nou dat jy weet Ruby, ons kan gaan om die basiese Nokogiri skraap opgestel. Wese al wat jy hoef te doen is, Ruby, vereis dat die biblioteke. En vir ons doeleindes sal ons in die gebruik van die biblioteek OpenURI asook Nokogiri. En dan wat jy do-- en dit sal gee jou die sintaksis vir this-- is jy die URL veel oop as jy sou in 'n cURL versoek, wat staan ​​vir C URL. Sodat jy die URL van te neem die betrokke webwerf. Jy stoor dit in 'n veranderlike. En dan kan jy soek deur daardie veranderlike vir unieke HTML tags gebruik van die Css opdrag. En dan kan jy die uitset inhoud te waar jy wil. Jy kan begin in 'n databasis. Jy kan uitvoer in 'n lêer of selfs net druk dit op die skerm. So sal ons jou 'n basiese skraper. So hier kan jy sien ons het vereis nokogiri vereis oop uri. Jou basiese stel, laat se noem dit dokument of doc, gelyk Nokogiri :: HTML oop, wat is die opdrag deur die OpenURI aan ons verskaf biblioteek. En ons sal soek, vir die van julle wat in die quad mag woon, vir bikes wat in Boston gelys op die fiets artikel Boston Craigslist werf. So as jy nie vertroud is met krul, sal ek net wys jou ware vinnig wat cURL sal doen. As ek wou al die URL te kry van die Craigslist site, as ek tik krul, dit is net dumps al die URL uit die Craigslist fiets webwerf op my terminale. Dit is nie besonder nuttig omdat ek dit nie doen nie wil die hand deur te gaan en vind die ding wat ek soek. Maar net sodat jy kan sien dat ek eintlik gebruik van die regte kode, as jy kyk by die URL vir Craigslist in bikes-- vir een of ander rede is dit nie gevind nie. As jy kyk na hierdie bladsy en jy kyk na die URL, dit moet identies aan die wees cURL versoek dat ek net stuur nie. En inderdaad, dit is wat die wese gestoor in die doc veranderlike. So wanneer jy terug gaan na ons kode, ons kan dan werk op hierdie dokument veranderlike deur die gebruik van Css. So sê Ek wou al kry die etikette wat span.txt is, en al die n tags binne daardie tag. En hoekom kan ons wil doen dit, ek hoor jy roep? As ons Inspekteer Element, dit 'n gee uiteensetting van hoe die URL saamgestel is. As ek rol af deur hier kan jy sien wat elkeen van hierdie verskillende elemente verteenwoordig. So miskien is ek wil toegang hierdie spesifieke element. So ek gebruik Chrome ontwikkelaar gereedskap te inspekteer element. Ek kan hier neer te sien dat dit is 'n 'n tag binne 'n span merk met 'n klas van txt. So dit kry ons eerste operasie wat is doc.css span, wat is die tag wat Ek soek in al hierdie URL. En dan bedryf txt baie soos CSS doen wanneer jy net wil skryf CSS in jou HTML-lêers deur spesifiseer 'n klas. So hierdie spesifieke operateur sal spesifiseer 'n span tag met die klas van txt. En dan as ek 'n ruimte te verlaat, dit sal gaan dan binne daardie tag en vind dan 'n 'n tag binne daardie. So as ek dit sit net om die terminale, sou ek in staat wees om alles te sien in wese wat binne hierdie span van die klas txt. So ons sal gee dat 'n go. Ruby craigslist-skraper. En inderdaad dit gee ons al hierdie tags van die verskillende aanbiedings wat op die Craigslist bladsy. So as ons terug te gaan, kan ons hierdie draai in iets 'n bietjie meer nuttig. Miskien wil ons net die skakels. Want binne hierdie merker, sal ek ook het die hyperlink van die pad dat hierdie bladsy gaan. So as jy kyk na hierdie kode hier, wat ek sal doen, is in plaas van Css, Ek kan gaan at_css. En dit sal net die eerste element van al hierdie dinge. So as ek dit doen in die Ek het net-kode voorheen gedemonstreer, in plaas van die terugkeer van almal van hierdie, sou dit net die eerste een van die terugkeer. So dit is hoe die at_css operateur werk. So wil ons die stoor pad al van die eerste n tag. En omdat 'n ons sal a-- gee so ons is nog steeds gaan Css gebruik. Maar omdat dit gaan om te gee ons terug 'n hele verskeidenheid van etikette, ons gaan toegang die eerste element. So, dit is 'n ander manier wat jy kan toegang tot enige spesifieke element as jy het 'n verskeidenheid van elemente wat teruggekeer het, omdat jy enigiets kan hanteer wat Css opbrengste as 'n skikking, wese. En dan gaan ons die toegang hiperteks verwysing kenmerk van hierdie. So as jy 'n blik, as jy kyk hier baie naby, as jy net in wese kyk na die URL bar, dit is die pad wat jy gaan word skraap. So as ons net dit weer hardloop, en maak seker ons het dit gered. Jy kan by die huis te gaan. Dit pas eintlik met hierdie skakel. So hoekom kan ons wil om dit te gebruik? As jy wil krap die bladsy en dit het n bladsy met skakels soos Craigslist doen, moet jy dalk wil gaan dan in elk van die skakels en dan skraap die inhoud van dit wat is presies wat ons gaan doen. So wanneer jy die pad as 'n veranderlike, ek nie meer werklik omgee druk dit uit. Ek het net nodig om dit te stoor as 'n veranderlike. En dan kan ek 'n ander toegang page dieselfde manier wat ek toegang doc in die eerste plek. Behalwe met die URL, ons gaan string interpolasie gebruik soos ek was in die beskrywing Ruby vroeër by te voeg die pad na die einde van die wortel. So, wat dit gaan doen, is dit gaan oor die pad te sit dat ek voorheen geskraap en draai dan in 'n nuwe item, wat jy wil om noem it-- first_listing, byvoorbeeld. Maar ek gaan om te verlaat dit op 'n item vir nou, want dit is wat ek hier gebruik nie. So sê Ek wou die beskrywing kry van die eerste plaas in Craigslist. So sou ek hier neer gaan. Ek sou klik op Inspekteer Element weer, want dit is die beskrywing. Ek sal hier neer gaan kyk As ek kan vind hoe ek kan in staat wees om te soek na hierdie unieke tag. En in hierdie geval, dit het 'n ID, wat lei ons na ons volgende manier van soek vir tags, wat met 'n hashtag. So vir klasse, jy kan gebruik die dot operateur. So txt is spesifiseer 'n klas van txt, terwyl die hash spesifiseer 'n ID. So in hierdie geval, die merker is artikel, en die ID is postingbody. So dit gaan en vind die first-- omdat ons gebruik van at_css-- dit gaan en vind die eerste element wat kom met die etiket van artikel en die ID van postingbody. En dan kan jy toegang tot die teks element van daardie item teruggekeer met .text. En dan kan ons slaan wat in die beskrywing. So nou dat ons 'n veranderlike beskrywing, ons in staat kan wees om te doen, sê, lêer I / O. So lêer I / O in Ruby is baie soortgelyk na 'n lêer I / O in C waar ons 'n lêer oop te maak. Ons kan skryf. En dan sal ons die lêer te sluit. So hier, ons is maar net die noem van die lêer, sommige arbitrêre veranderlike. Ons kon ook net sit dit hier. Ons het 'n veranderlike wat ons stoor die oop lêer as met File.open. En ons skryf hierdie lêer, sodat ons maak dit met die w operateur. En dan het ons string na die lêer met die .puts operateur. En dan het ons die veranderlike wat ons wil skryf na die lêer binne daardie. En dan het ons net maak die lêer. So as ons gaan voort en hardloop hierdie, dit moet 'n dokument met description.txt wat sal het hierdie beskrywing in dit. So as ek hardloop it-- no. Dit het 'n teks lêer met, hopelik, dieselfde ding. So is daar dalk 'n nuwe plaas gewees wat se kom terwyl ek het gepraat. En inderdaad is dit lyk asof daar is. So as ons na hierdie klassieke fiets, 1962-1966, wat blyk te pas. En daar gaan jy. So wat is die mees basiese funksionaliteit van skraap. Ons kon plaas van het net skryf om hierdie lêer, kan ons dinge toe te voeg tot 'n skikking. So as ek verklaar drie skikkings, titel, prys, en beskrywing. En ons bedryf nou op die doc item. Ons kan deur te gaan en vind al die span.txt. En onthou, hierdie terugkeer 'n skikking van al die items wat dit vind. En dan in Ruby, jy kan net gebruik .each om Itereer deur elke item van die skikking. En dan vir elke item, Ek gaan net om dit te noem 'n skakel, want dit is wese wat dit is. So as ek elke link.css dot a.hdrlnk, Dit is eintlik gaan om die skakel en vind binne 'n ander wat verwys HTML element en die ooreenstemmende klas. So as ons onthou wat dit was die span.txt, kan jy See-laat my net terug te gaan werklike quick-- binne span.txt ons het 'n baie ander klasse. So binnekant span.txt, is ons op soek vir 'n 'n tag met 'n klas hdrlnk. So laat my vind net dat vir julle ware vinnig. So jy hier kan sien, is dit 'n 'n tag dit is in die span van die klas txt wat die klas hdrlnk. En dit is inderdaad wat ons probeer om te kry. So ons probeer nou al te stoor van die skakels in die titel. En dan gaan ons om te druk uit elk van die skakels. Nee jammer. Ons gaan uit te druk die prys van elkeen van daardie. So laat loop dit regtig vinnige en sien wat dit doen. So dit net basies het deur elke van die skakels op sy beurt, verkry die tag in die vraag, en dan trek die prys. En dit het gedoen, want na jy alles in die titel, Ons het nou net die titel gestoor daar. Ons het nou net die skakel gestoor binne die skikking titel. En in hierdie lus operasie, waar in plaas van gaan na a.hdrlnk, Ons is op soek na 'n span.price. So as ek kan net regtig vinnig te vind die prys, as jy die element inspekteer, sal jy sien dat dit 'n span met die klas van die prys. En dit is in wese hoe ons kry die prys daar. So wat is die werklik basiese geval van skraap. Dit is hoe jy kry al die elemente op 'n bladsy dat, sê, jy weet reeds die URL van. So as ons wil 'n te kry bietjie meer in diepte, kan ons bladsye binne bladsye skraap. En vir hierdie voorbeeld, sal ek wees om 'n uitdruk CSV. So ek wat csv hier omdat Ruby nie, binne die self, het die funksie net uitset CSV lêers. So dit is super maklik. Laat my net te gaan na die volgende. Ons bedek lêer I / O. So dit is soortgelyk aan hoe dit is in C. En voor ons na kimono, Ek sal net wys jy regtig 'n vinnige hoe om terreine binne visier skraap. So het ons reeds geleer hoe om skikkings te verklaar in Ruby. So ek net waarby 'n n klomp van die arbitrêre skikkings dat ek sal stoor data in. doc bedryf op dieselfde manier soos dit gedoen het in die vorige lêer. Ons gaan in, vind elk van die span.txt se. Ons weet reeds dat. Dit is die houer waarin elke skakel het al die data wat ons wil hê. So hier wat ons doen is vir elke skakel van span class txt, ons gaan in en ons is die vind van die 'n tag, vind die eerste element van daardie. Onthou, Css terug 'n skikking, sodat jy kan nie net toegang tot dit soos dit is. Ons gaan die eerste element te vind. Selfs al is dit 'n verskeidenheid van een item, jy het hierdie sintaksis te gebruik, en dan trek uit die href kenmerk. So ons het hierdie vroeër. Sodat hierdie moet vertroud te kyk. En so nou het ons 'n skikking genoem paaie van almal van ons skakels dat ons gaan om te wil gebruik. So as ons hierdie reeks van alle van die paaie wat ons wil gebruik, Ons kan dan 'n item vir elke te skep van daardie bladsye wanneer ons oop bladsy. So as ons het ook op die sintaksis voor, waar doen string interpolasie met die pad hier, so die sintaksis is net vir pad. En ek kon dit noem veranderlike enige arbitrêre naam. Dit is die belangrike een. Dit is die skikking dat jy wees om toegang tot elke element. Maar as jy sê vir pad in paaie, Dit beteken vir elke element in paaie, noem dit die pad, en gebruik dit. Dit is in wese soos wanneer jy doen 'n lus en jy int i gebruik. So jy kan die pad as die behandeling van veranderlike wat is die verhoog. En dan vir elkeen van daardie, gaan in elk van die skakels. Omdat ons dit stoor in item bladsy so ons is die skep van 'n nuwe bladsy elke keer ons toegang het. En dan binne daardie nuwe bladsy, vind span.postingtitletext, span.price, en dan artikel # postingbody. Ons het reeds gedek artikel # postingbody wanneer ons kyk na die beskrywing. Sodat ons kan gaan kyk in die Craigslist post, as jy net kyk na die titel, jy kan dit hier sien het, span postingtitletext. En dit is hoekom dit is daar. En dan vir die prys, kan jy toegang met span class van die prys. So het ons ook miskien kon wil die URL te stoor. So sal ons net hierdie hardloop weer, stoor dit in 'n skikking, want as jy op soek is op Craigslist, is jy waarskynlik gaan om 'n manier te wil, as jy sien iets wat jou interesseer, gaan terug na die webwerf. So jy wil net om te stoor die URL vir verwysings ontwil. Dit is net in wese 'n ander sintaksis vir die lus. Ek kon net nie paths.each plaas van vir pad in paaie met indeks. En dit is sintaksis Ruby for-- pad is wat ons gedoen het hier grootgeword, waarby 'n veranderlike vir elke item. En die indeks optree soos die i in C vir loops. Sodat jy kan tred te hou van wat die indeks is. So hier is net 'n bietjie gerieflike ding vir wanneer jy die bestuur van die skraper. As jy skraap honderde bladsye, om seker te maak dat dit nie hang, Dit sal net uitvoer, Ek is die toegang tot hierdie bladsy, en seker te maak dat dit is nog steeds voort. Maar vir ons doeleindes, want daar is 'n honderd items, Ek gaan om toegang tot net drie van hulle sodat ons nie hardloop uit tyd hier. Maar voordat ons by wat, ek is net gaan jy regtig vinnig wys, Ek sal uitdruk die titel, prys, beskrywing, en URL van elk van die skakels wat ek geskraap. En dan is dit net die sintaksis vir die CSV biblioteek. Jy maak 'n CSV. Dit is wat ek gaan om dit te noem. Maak dit met skryf do. En dan sal die CSV-lêer wees dat jy skryf alles in. Dit is net 'n gesonde verstand tjek vir my om te weet dat dit loop. En dit is my gesonde verstand tjek om te weet dat dit voltooi is. So ek sit titel in 'n ry in die CSV, prys, url, beskrywing, alles in rye in die CSV. So as ons gaan en hardloop hierdie now-- en ek het net seker te maak dat ek it-- gered het plaas van net uitdruk dit na die terminale, ons het 'n CSV moet hê lêer wat geproduseer. So hier kan ons die CSV sien lêer wat is geproduseer. Dit is die opbrengs van die blomas dat ek net gehardloop. Soos jy hier kan sien, ontsluiting bladsy 0, 1, 2, 3. Hierdie is die titels, pryse, beskrywings. En as ons kyk na hierdie CSV lêer wat ons het gegenereer, jy kan sien hier die outputted. Dit is nie Excel, so dit is nie geformateer in rye en kolomme. Maar jy kan dink hoe dit kan geformateer word. CSV staan ​​vir kommas geskei waardes. So jy kan dink dit kan 'n ry wees. En elke komma sou dui op 'n aparte kolom. Net 'n woord van caution-- soms is jy skraap dinge met 'n baie kommas. So as jy uitdruk dit na 'n CSV-lêer, dit dalk nie die uitset manier wat jy dink. So dit is in wese al daar is om te skraap basiese HTML bladsye met Nokogiri. So die internet wese innoverende as dit kom met 'n meer outomatiese en GUI weergawe, hoewel minder robuuste weergawe van skraap verskeie webtuistes. En vir ons doeleindes Ek sal toon 'n Chrome uitbreiding genoem kimono. En al wat jy hoef te doen, is jy opgevolg na die bladsy wat jy wil om te skraap. Jy kliek op 'n veld van belang. Jy Kalibreer die velde, want dit sal outomaties spoor wat hulle dink jy wil skraap, en dan kan jy net skep 'n API. So as ons dit op te demonstreer Craigslist, sou dit eintlik nie werk nie. En dit is wat ek terug gaan sê oor dit nie so sterk. Dit het probleme met die skep van die API. Maar as 'n demonstrasie van wat dit sou doen, as jy die Chrome uitbreiding te installeer, al wat jy doen is jy kliek op dit. Dit Kimonofies die bladsy en dan kan jy Klik op die ding wat jy wil script. So as ek klik op dat, sou dit na vore te bring wat hulle dink ek wil wees skraap af bladsy. So miskien noem ek hierdie lys. Dit is hoe baie items wat ek gekies het. En ek kan net bevestig of ontken sommige van die ander voorgestel volledige lys om dit te kry om by te voeg tot wat sal geskraap. So nou kan ons sien daar is 'n honderd items gekies. As ek wil 'n ander veld te hê dat ek ook skraap wat verband hou met hierdie, Ek sê die prys wil skraap sowel, dan sal ek kan dieselfde doen. So hier is 'n demonstrasie van hoe dit is veel minder robuuste, want dit is nou pluk aan die stad plaas van net die prys wat ek wil. En nou is dit opgetel 200 dinge. Jy kan terug gaan en te verwyder. Jy kan weer probeer. Maar geen waarborge nie. Dit is hoe dit werk soms. As jy hier sien, is dit nou sê 96 tot hier. Dit is die meeste van die skakels opgetel wat jy wil skraap, maar nie noodwendig almal van hulle. Nog 'n nuttige instrument van Kimono al is jy kan gaan na Gevorderde kenmerke hier, gaan na Gevorderde en dit sal vir jou wys die afbreek van die unieke manier om toegang te verkry tot die HTML tags wat jy wil te skraap. So vir volledige lys, as jy kyk na hier, As jy toegang tot div p span strek oor 'n, jy kan eintlik net gebruik hierdie in jou Nokogiri kode, waar voordat ons het span.txt om toegang tot elk van die volledige lys. As ek die teks wil net binne die volledige lys, Ek kon insette div ruimte p ruimte span ruimte span ruimte a, en dit sou dieselfde effek te bereik. En vir dié van julle wat belangstel in die gebruik van gereelde uitdrukkings, dit gebeur ook gee jou die gereelde uitdrukking soort string om insette om die dinge te vind jy probeer om uit te vind. So daar is nog 'n koel funksie van Kimono waar jy kan pagineren, wat nie net kan ek skraap die resultate van hierdie bladsy Ek kan op hierdie klein hier knoppie Paginering, spesifiseer die knoppie wat sou neem my na die volgende bladsy en dan sal dit net weet dat dit kan Itereer na die volgende bladsy, en dan is almal van the-- solank skraap as dit is dieselfde formaat van course-- blomas al die skakels as well. So omdat kimono wil nie werk met Craigslist, wat ons gedoen het is ek Kimonofied die Harvard Crimson. Ek het getrek uit 'n paar van die soort van top featured artikels, bevestig hier. Sê al hierdie. Ek het hierdie API saamgestel vir jou voor die tyd. Maar anders wat jy sou doen is jy kliek net gebraai. Tik in jou API besonderhede. Stel dit na óf outomatiese of handleiding crawl. Sodat jy kan werk jou data elke 15 minute, weekliks, daagliks, wat jy wil. Noem jou API. Skep die API. Vir jou eie voordeel, het ek het die Bloedrooi voorblad API reeds. Sodat jy net skep 'n rekening op kimono, en dit sal al jou APIs die winkel vir jou. So in wese is dit al jou aparte verskillende skrape. So as ons hier sien, dit is die menings skakels wat ek versamel het. Hierdie is die featured skakels wat ek versamel het. En dit is die mees gelees skakels wat ek versamel het Van hierdie mees onlangse API scape. So as jy hier kan sien, Dit sou wees die featured, Dit sou wees die menings, wat in hierdie voorbeeld, Ek het hulle al gekombineer in een versameling. Maar as jy net om te speel met dit 'n bietjie, kan jy dit verdeel en verdeel dit egter jy wil so lank as die formatering is effens anders. Net om te speel met hierdie, die crawl opstel, een van die nadele is jy kan net kruip up 25 bladsye op 'n slag. Dit is een van die beperkende faktore. Maar hier, as jy dit handleiding crawl, hierdie is hoe jy dit kan vertel om jou data te werk. En hier kan jy jou crawl geskiedenis te sien van alles wat jy gekruip. En julle kan terug gaan, teken, speel rond met al die verskillende maniere wat jy kan verander en gebruik jou data. Kimono kan opgestel word om skraap skakels binne skakels. En jy sal dit doen deur die eerste skraap 'n lys van skakels, en dan met behulp van die API as 'n af te spring punt vir 'n ander API dat jy die script te skep. Maar dit is meer ingewikkeld as wat ons gaan om te kry in vandag. So dit is kimono. Ons sal praat oor die voor-en nadele van Nokogiri en kimono. Nokogiri, dit is regtig vinnig. Dit is maklik om te toets. Jy kan net sit om iets te console, maklik om te instel. Jy kan besluit wat presies jy wil krap en winkel. Daar is geen perke bladsy. Ek het eintlik het dit gebruik om te krap soos 1800 Suid-Afrikaanse skool webtuistes vir e-pos vir 'n internskap wat ek gedoen het. So dit is moontlik, maar die beste praktyk sou wees om te verdeel die script. Want as dit nie werk nie, dan jy hoef nie iets te kry. Maar as jy nie 'n honderd, Miskien 200 bladsye op 'n tyd, dan moet jy 'n kans van ten minste om dit stuksgewys, veral as jy het 'n slegte internet. Ongelukkig kan dit net skraap HTML. So as jy ' dinamiese gelaai pages-- en Ek sal julle 'n voorbeeld wys soos kajak in 'n second-- Nokogiri ongelukkig kan nie krap nie. Maar kimono is ook maklik om te gebruik. As jy gesien het, is dit in wese 'n punt en klik. Dit kan skraap JavaScript. Ongelukkig is daar 'n maksimum hoeveel bladsye wat jy kan krap. Soms is dit 'n bietjie moeilik om te instel. Dit word verwar. Maar dit is beslis iets om te oorweeg as jy nie probeer om 'n het super sterk onderhoubare skraap. As jy net wil om te kry alles af van 'n bladsy vinnig, dan kimono is 'n baie goeie hulpmiddel om te gebruik. En soos ek voorheen genoem, is daar die gevorderde funksie van Kimono wat wys jou hoe om toegang tot die unieke HTML element, wat is super nuttig selfs As jy besig is in Nokogiri. So as ons na die kajak webwerf, vir Byvoorbeeld, kan jy daar te sien is-- of miskien kan jy nie sien nie. Maar as ek wys jou die URL vir Kayak, hierdie is eintlik die bron URL. Dit is die URL voor om gewysig deur watter JavaScript skrifte dat hulle aan die gang. En dit gaan om te kyk verskillende van die inspeksie van die element. So as jy deur te gaan en jy ooreenstem met die Inspekteer Element kode om die bronkode, dit is eintlik gaan anders wees. En dit is in wese waarom Nokogiri kan nie skraap dinamiese gelaai webwerwe. Omdat Nokogiri is skraap die bron URL, terwyl kimono is eintlik skraap wat jy in wese is sien in Select element. So as ek gaan deur en ek probeer Kimonofy Kayak, Ek kan eintlik gaan deur en kies die prys. Dit is 'n bietjie harder, en in hierdie geval, is dit eintlik sien hierdie prys as verskillend van hierdie. So, terwyl jy kan configure-- of As dit nie dinamies gelaai, jy kan Nokogiri instel om al hierdie te kry. Omdat die opmaak is effens anders vir hierdie lys as dit vergelyk word met die res van hulle, en jy kan sien hier dit is eintlik gegaan en gekies al vlug pryse die. Miskien het ek wil kies tyd van vlug as well. En ek kan deur te gaan en soort instel nie. Ek wil nie dat. Ek wil net tyd die volgende vlug se. En dan na 'n paar van hierdie gaan deur, raak dit die prentjie. So kimono se mooi slim. Dit is net nie heeltemal so sterk. Daar is 'n paar ander alternatiewe wat jy kan gebruik. En ek sal jou dit hier wys. As jy meer gemaklik in Python plaas van Ruby miskien, daar is 'n biblioteek genoem Beautiful sop. Jy kan gebruik nie. Dit is baie soortgelyk aan Nokogiri. Dit het 'n paar meer funksies. Jy kan 'n HTML tag te vind en dan beweeg op of sywaarts beweeg. Daar is PyQt. Dit kan eintlik skraap dinamiese plekke, want dit is soort van is 'n WebKit wat voorgee om te wees 'n leser sonder dat daar eintlik 'n leser. So dit sou wag vir al die JavaScript om eers te laai, en dan gaan in en probeer en skraap die site. As jy wil om te hou met Ruby, jy kan een vlak uit Nokogiri gaan. Jy kan gebruik om met Capybara 'n Poltergeist wikkel. En dit kan eintlik wese dieselfde ding doen as PyQt, wat is dit is 'n WebKit. Dit wag vir die JavaScript om eers te laai. As jy peuter met dit genoeg is, jy kan selfs dit kry om te klik op dinge. So as daar is 'n skakel wat is nie 'n klassieke href waar die pad is maklik toeganklik is, en dit is 'n paar JavaScript ding wat ontdek 'n kliek, kan jy eintlik doen nie. Die meer gewilde biblioteek om 'n gebruiker te boots is in JavaScript, wat is PhantomJS. Dit kan natuurlik dinamiese skraap webwerwe, want dit is in wese voorgee om Chrome wees sonder dat die gebruiker koppelvlak. En dan, natuurlik die mees robuuste, maar stadigste opsie, is 'n Selenium leser outomatisering. En ongelukkig, jy gaan nie om te wees in staat wees om dit te doen binne jou CS50 IDE. Omdat wese wat dit doen, is dit stewels jou Chrome, Firefox, ongeag die leser wat jy wil gebruik, en dit liedjies miskien jou muis beweging, alles wat jy tik in, en dit net soort van automatiseert hierdie proses. So dit is ontwikkel as 'n soort van webwerf outomatisering toets hulpmiddel. Maar baie van die mense gebruik Selenium webtuistes skraap dat hulle anders het 'n baie moeite skraap met 'n paar van hierdie ander, vinniger gereedskap. So dit is al wat ek het vir die web skraap. Hê pret. GEHOOR: Vraag. ROBERT KRABEK: Ja. GEHOOR: Is daar 'n meganisme om hash die webwerf sodat jy kan basies gaan deur dit later. ROBERT KRABEK: Ja. So het ons die, in ons Byvoorbeeld, vir beide van hulle, ons die hele webwerf in doc. En so kan jy eintlik net die veranderlike doc en skryf dit na 'n lêer. So as ek wou, kon ek skryf dit uit as 'n HTML-lêer, en dan plaas van die gebruik OpenURI en 'n cURL versoek dan kan ek net oop doc HTML en dan soek vir daardie. GEHOOR: Maar kan jy te bewaar die soort van aanlyn-ervaring terwyl jy op die regte pad te doen. Byvoorbeeld. wanneer jy vlieg vir 'n paar uur, Ek wil basies argief die hele webwerf. [Onhoorbaar] ROBERT KRABEK: Ja, dis exactly-- so letterlik wat dit doen is dit die neem van alles wat dit sou wees op hierdie URL. So as ons hardloop krul, dit is neem al hierdie HTML, en dit is om dit te stoor binne-in die veranderlike doc. So dan kan jy alles doen wat wat jy wil doen met doc. Jy kan uitvoer dit na 'n lêer. GEHOOR: Maar dit is nie gekoppel word. Dit is nie dinamies. Dit is nie rekursiewe, reg? Jy sien wat ek bedoel? Ek probeer om basies soort van 'n hash die hele webwerf op my hardeskyf sodat ek basies kan dit doen vir 'n paar uur sonder internet. ROBERT KRABEK: Right. So as ek had-- so waar's my lêer I / O? So, dit is die lêer I / O. So in plaas sê van hierdie, noem ek dit craigslist.html. Ek wil oop te maak. Ek wil wan doc in dit. Ek maak die lêer. En dan, net omdat die CS50 IDE is op die wolk dit is ook al. Ek kan hier gaan. Ek kan die lêer af te laai. En dan sal dit nie wees op my hardeskyf. So jy kan dit doen op die manier. Of as jy by die huis, nie met behulp van die CS50 IDE, soos Sublime of iets, dit is selfs makliker, want dit is alles plaaslik beskikbaar, nie gekoppel is aan die internet. GEHOOR: ek sien. Dit is vir 'n spesifieke probleem. Kan jy dit doen rekursief sodat jy gaan verskeie lae diep soort ding? ROBERT KRABEK: Ek kan dopgehou aflaai sowel, as dit is wat jy vra. GEHOOR: Ja. ROBERT KRABEK: Cool.