[Muzika] ROBERT KRABEK: Përshëndetje, djema. Emri im është Robert Krabek, dhe Unë do të jetë mësim ju djema si për hall web me Nokogiri, e cila është një bibliotekë Ruby, dhe Kimono, e cila është një zgjerim Chrome. Pra, së pari ka një disa gjëra që ju mund të bëni në qoftë se ndoshta ju keni qenë duke bërë të gjitha psets deri tani dhe Workspace juaj është duke marrë një pak të plotë. Ne fakt mund të shkoni vetëm dhe të krijuar një hapësirë ​​pune të re për ju të vetëm të bëjë një projekt krejt të re në. Pra, nëse ju doni të vazhdojë që punojnë në ID template CS50 se ju keni aktualisht, të ndjehen të lirë, dhe ju mund të vetëm instaluar Nokogiri me CFLAGS perlë equals-- instaluar nokogiri. Por përndryshe unë do t'ju tregoj si për të vendosur një të ri një dorë. Dhe pastaj kjo është në thelb duke rënë më shumë rrota trajnimit. Dhe ju jeni coding sikur keni qenë vetëm kodim në Sublime ose diçka. Pra, nëse ne ndryshim atë përsipër. Pra, thonë se kjo është aktuale CS 50 ID tuaj. Ju thjesht mund të shkoni në Cloud9 këtu. Ju mund të shkoni në panelit të kontrollit tuaj. Ajo duhet të sjellë deri hapësirave të punës tab. Dhe atëherë ju vetëm mund të klikoni këtu, Krijo një Workspace Ri. Emri hapësira e punës tuaj të re, ndoshta testi, apo scraping. Dhe pastaj klikoni këtë skedë me porosi këtu, në vend të CS50 templates tab. Dhe pastaj ju mund të shkoni vetëm dhe për të krijuar një hapësirë ​​pune të re. Unë kam krijuar tashmë një workspace këtu. Pra, ne do të punojmë me këtë. Dhe në qoftë se keni krijuar një të ri workspace kështu me tab Custom, ju thjesht mund të shtypni perlë të instaluar nokogiri, e cila nuk është duke shkuar këtu. OK, kjo është pak e ngrirë. Por ju mund të shtypni perlë të instaloni nokogiri. Dhe kjo duhet të jetë mbi të gjitha që ka të instalimit. Siç kam thënë më parë, në qoftë se ju jeni ende duke punuar në template tuaj CS50 ID, ju vetëm duhet të shkruani CFLAGS është e barabartë me perlë instaluar nokogiri. Dhe unë e kam instaluar tashmë ajo këtu kështu që unë nuk do ta bëjë këtë. Por, për ata që ndjekin së bashku, të ndjehen të lirë për ta bërë këtë. Pra, një herë ju keni marrë Nokogiri tuaj Workspace ose bibliotekë instaluar, Unë do të ju jap pak e një kurs përplasje në Ruby sintaksë sepse Nokogiri është një bibliotekë Ruby. Pra, ju do të duhet të dini disa themelore Ruby sintaksë për të punuar me Nokogiri. Kështu që disa dallime themelore nga ajo që ju jeni duke përdorur për të ndoshta në qoftë se ju keni qenë duke punuar deri më tani në vetëm C dhe PHP, ju të deklarojë variablave pa lloji. Ju nuk e përdorni pikpresje, që është lloj i një lehtësim. Nuk ka kllapa tani rreth për ose ndërsa unazore, për shembull. Ju vetëm duhet një bllok të kodit, dhe pastaj të vendosni të përfundojë në fund të kësaj. Nuk ka plus plus ose minus minus, kështu që vetëm e di se kur për ju jeni duke bërë për sythe, vetëm të barabartë plus dhe minus barabartë. Dhe në vend të hash përfshijnë, ju do të përdorni nevojë dhe pastaj çfarëdo bibliotekë duke u përpjekur të ngarkesës në programin tuaj. Ruby nuk është një gjuhë hartuar. Pra, kjo është një tjetër lehtësim. Është shumë e ngjashme me PHP ku është një gjuhë interpretuar. Ju mund të drejtuar ndonjë script Ruby që ju shkruani me Ruby ndjekur me emrin e shkrimit tuaj ose programit. Për të ditur se kjo është një program Ruby, ju vetëm të përfundojë atë me .rb vend të .C. Dhe nuk janë të ndryshueshme Vargjeve mesme në Ruby, e cila është super i përshtatshëm kur ju jeni scraping dhe ndoshta duan të append të dhënat që ju keni rrëzuar në një rrjet. Ju nuk keni për të malloc një rrjet të ri dhe kopjoni array vjetër në rrjet të ri. Ju mund të append vetëm me dy shenjat shigjetë. Dhe nuk ka chars, atje vetëm vargjet vetme letër. Kështu që duhet të jetë pak më e lehtë. Pra, ne vetëm do të ju jap disa shembuj të disa bazë sintaksë Ruby. Kështu që këtu ju mund të shihni se në vend të plagë plagë, për të komentuar në Ruby, ju vetëm përdorni shenjën paund. Dhe deklarata ndryshueshme, ju vetëm lloji të barabartëve ndryshueshme çdo gjë që ju dëshironi ndryshueshme të jetë. Ata mund të jenë vargjet. Ju mund të keni rrjet, i cili ju populloj me vlera. vë dhe printime janë të ngjashme. Për qëllimet tona, Dallimi i vetëm është me të vërtetë që i vë, i cili qëndron për vë, vetëm vë një linjë të re karakter në çdo gjë që ju jeni shtypjen. Pra, nëse ne japim një të vogël demonstrim këtu, ne mund të kandidojë këtë with-- të hapur një terminal të ri. Ju mund të shihni të gjitha këto fotografi të cilat janë në terminalin e mia. Dhe në qoftë se unë vetëm të drejtuar Ruby, intro.rb rubin, atë vë nga pesë Përshëndetje Mather, Quincy, Carrier. Adams. Pra, kjo është e gjitha nuk është të vargjeve deklarojnë. Audienca: Robert, mund të bëni font tuaj pak më e madhe? ROBERT KRABEK: Po. Dhe unë mund të zoom në, sepse ju nuk mund të zoom në për të fonts terminal me sa duket. Pra, kjo është se si ju të shtypura Variablat në terminalin tuaj. Ju gjithashtu mund të përdorni variabla brenda një varg. Pra, kohët e fundit në PHP, ju mund të keni mësuar se ka string interpolation. Pra, nëse ju merrni një vështrim këtu, në qoftë se unë deklaroj tre variablave, emrin, bibliotekë, dhe gjuhës, dhe unë vë, unë shkruaj një varg, Hello emri im është. Dhe pastaj në vend të PHP version i string interpolation e cila duket pak më shumë si kjo, ju keni një shenjë kile, dhe pastaj një mbajtëse kaçurrel, dhe pastaj emri i variablit. Dhe kjo është se si ju do të shtypura, të themi, çfarëdo emri ndryshueshme është. Dhe pastaj ju gjithashtu mund të lidh vargje. Ruby bën atë super të lehtë me shenjë plus. Ju thjesht duhet një varg në të majtë plus një variable ose në një tjetër varg plus një varg. Pra, nëse unë të shtypura këtë jashtë, ajo duhet vetëm thonë Hello, Emri im është Robert. Unë do të jetë mësim se nokogiri në Ruby. Dhe le të vetëm të konfirmojnë se që është me të vërtetë intro case-- rubin. Përshëndetje, emri im është Robert. Unë do të jetë mësim se nokogiri në Ruby. Moving on, nëse deklaratat e të tjerët, kjo është pak më ndryshe nga ajo që ju mund të përdoret për të në qoftë se ju keni qenë duke punuar në C. Ju nuk keni nevojë të kllapa. Ju nuk keni nevojë për formatimin e teksteve kaçurrel. Dhe në vend të tjetër nëse, kjo është një elsif concatenated. Kështu që këtu, në qoftë se unë kam deklaruar x up këtu, si ne mund të shohim, x është ende 5. Pra, nëse x është më pak se 3, ajo do të vënë të vogla. Në qoftë se kjo është më pak se 7, të mesme, të mëdha tjetër. Kështu 5 është një numër medium. Dhe unë të përfundojë këtë bllok i kodit me fund. Këtu është e mia për lak. Dhe kjo është edhe Sintaksa pak më të ndryshme. Në 0 për pesë vetëm në thelb është deklaruar një vargjeve nga 0 deri në 5. Pra, ka pesë lojëra elektronike në rrjet. Dhe pastaj për çdo slot në se grup, unë do të jem bën rritjen i. Kështu që kjo të printuar 0 deri në 5, ose 0 deri ne 4. Dhe kjo duhet të shtypura medium. Dhe unë vetëm do të flakët nëpër. Ju djema do të kenë qasje të këtij kodi më vonë. Kështu që ju djema mund të drejtuar këtë veten. Pra, kjo është bazë lak juaj ndërsa. Kjo do të jetë vetëm j shtypjen, bën rritjen nga 1 deri ne goditi 5. Super shpejtë kurs përplasje Ruby se si të shkruajnë një funksion. Në vend të, të themi, int faktoriale numrin, ne vetëm duhet def. Dhe në thelb ju jeni përcaktimin e një funksion këtu. Kjo do të jetë emri i funksionit, dhe kjo është ndonjë variablave që ju duan të kalojnë në funksion. Ju mund të keni nëse deklaratat brenda. Ju mund të kthehen. Në këtë rast, ne jemi përcaktimin e një Recursively implementuar funksionin faktorial. Pra, ne vetëm thirrje funksionet në Ruby si kjo. Pra, nëse unë kam përcaktuar këtë, unë mund të telefononi faktorial, të kalojë në 3, dhe pastaj 3 do të jetë numri i ndryshueshëm që unë mund të përdorni brenda funksionit. Dhe kjo to_s është vetëm duke e kthyer vlera e faktorial kthyer në një varg. Përndryshe kjo do të hedhin një gabim duke thënë oh, unë nuk mund të shtypura një string-- sepse siç ju kujtohet, vë është vënë string-- sepse kjo faktorial ka kthyer një numër. Pra, ne mund të konvertohet se në një varg si të tillë. Dhe anasjelltas, ju gjithashtu mund të konvertohet një varg të një numër të plotë me to_i. Pra, duke e bërë çdo gjë super e thjeshtë, në qoftë se unë vetëm komentoj këtë gjë, për të shpëtuar dhe drejtuar funksionin faktorial. Ne duhet të jetë në gjendje për të parë që faktorial nga 3 është 6. Dhe kjo është me të vërtetë e vërtetë. Pra, kjo është kursi juaj përplasje në Ruby. Dhe tani që ju e dini Ruby, ne mund të shkojnë në në Nokogiri bazë scraping ngritur. Në thelb të gjithë ju duhet të bëni është, në Ruby, kërkojnë bibliotekat. Dhe për qëllimet tona ne do të jetë duke përdorur Biblioteka OpenURI si dhe Nokogiri. Dhe pastaj çfarë ju do-- dhe ajo do të ju jap sintaksë për this-- është që ju hapni URL shumë si ju do në një kërkesë curl, i cili qëndron për C URL. Pra, ju merrni URL e në faqen e internetit në fjalë. Ju ruani atë në një variabël. Dhe pastaj ju mund të kërkoni përmes se variabël për unike HTML tags përdorur komanda .css. Dhe pastaj ju mund të prodhimit përmbajtje për të kudo që ju dëshironi. Ju mund të filloni me një bazë të dhënash. Ju mund të prodhimit në një skedar, ose edhe vetëm të shtypura atë në ekran. Pra, ne do t'ju tregojë një kruese themelore. Kështu që këtu ju mund të shihni kemi kërkon nokogiri, kërkojnë hapur-uri. Vendosur Juaj themelore lart, le të e quajti atë dokument ose doc, barabartë Nokogiri :: HTML hapur, i cili është komandë dhënë për ne nga OpenURI bibliotekë. Dhe ne do të jetë në kërkim, për ata të ju që mund të jetojnë në kuadrat, për bikes që janë të listuara në Boston në seksionin biçikletë Boston Craigslist faqe. Pra, nëse ju jeni të panjohura me curl, unë vetëm do të ju tregojnë se vërtetë të shpejtë çfarë do të bëjë të rehatohem. Në qoftë se unë të kërkuar për të marrë të gjitha URL nga site Craigslist, nëse unë lloji curl, ajo vetëm mërzi të gjitha URL nga faqja Craigslist biçikletave mbi terminal time. Kjo nuk është veçanërisht e e dobishme, sepse unë nuk e bëj duan të shkojnë dorë nëpër dhe gjetur gjë e unë jam duke kërkuar për. Por vetëm kështu që ju mund të shihni se unë jam në të vërtetë duke përdorur kodin e duhur, në qoftë se ju shikoni në URL për Craigslist në bikes-- për disa arsye ajo nuk është gjetur. Nëse ju shikoni në këtë faqe dhe ju shikoni në URL, kjo duhet të jetë identike me Kërkesa Curl që unë thjesht dërgoni. Dhe me të vërtetë, kjo është ajo që është duke u ruhet në variablin doc. Pra, kur ju shkoni përsëri në kodin tonë, ne pastaj mund të veprojë në këtë variabël doc duke përdorur .css. Kështu që thonë se unë të kërkuar për të marrë të gjitha të tags që janë span.txt, dhe të gjitha një e tags brenda këtij tag. Dhe pse mund të duam të bëni këtë, unë dëgjoj ju qaj? Nëse ne Inspect Element, kjo ju jep një ndarje se si është strukturuar URL. Nëse unë lëvizni poshtë nëpër këtu, ju mund të shihni çfarë secili prej tyre të ndryshme Elementet përfaqëson. Kështu që ndoshta unë dua për të hyrë në ky element i veçantë. Kështu që unë jam duke përdorur zhvilluesi Chrome mjete për të Inspect Element. Unë mund të shoh këtu poshtë se kjo është një një tag brenda një hapësirë tag me një klasë të txt. Pra, kjo merr për tonë Operacioni i parë i cili është hapësirë ​​doc.css, që është tag që Unë jam duke kërkuar për brenda të gjithë këtë URL. Dhe pastaj .txt funksionon shumë si CSS bën kur ju jeni vetëm me shkrim CSS në tuaj fotografi HTML nga specifikuar një klasë. Pra, ky operator i veçantë do të specifikoni një tag span me klasën e txt. Dhe pastaj, nëse kam lënë një hapësirë, Kjo pastaj do të shkojë brenda këtij tag dhe pastaj të gjeni një një tag brenda se. Pra, nëse unë vetëm vënë këtë në terminali, unë duhet të jetë në gjendje për të parë në thelb gjithçka që është në këtë hapësirë ​​të klasës txt. Pra, ne do të japim se një lëvizje. rubin Craigslist-kruese. Dhe me të vërtetë që na jep të gjitha këto tags e listings të ndryshme që jeni në faqen Craigslist. Pra, nëse ne kthehemi, ne mund të kthehet këtë në diçka pak më e dobishme. Ndoshta ne duam vetëm lidhjet. Sepse brenda këtij tag, unë gjithashtu do të kanë hyperlink të rrugës se kjo faqe shkon në. Pra, nëse ju shikoni në këtë kod këtu, ajo që unë do të bëj është në vend të .css, Unë mund të shkoj at_css. Dhe kjo vetëm do të merrni e parë element i të gjitha ato gjëra. Pra, nëse unë do të bëj që deri në Kodi Unë vetëm demonstruar më parë, në vend të kthimit të gjithë të kësaj, ajo do të vetëm kthejë një të parë nga ata. Pra, kjo është se si funksionon operatori at_css. Pra, ne duam të ruajtur rruga të gjithë të parë një tag. Dhe për shkak se një do të na japë a-- kështu që ne jemi ende duke shkuar për të përdorur .css. Por për shkak se kjo do të japë na mbrapa një grup të tërë të tags, ne jemi duke shkuar për qasje elementi i parë. Pra, kjo është një tjetër mënyrë që ju mund të hyni në ndonjë element të veçantë në qoftë se ju kanë një rrjet të elementeve që është kthyer, sepse ju mund të trajtoni çdo gjë që kthimet .css si një grup, në thelb. Dhe pastaj ne jemi duke shkuar për të hyrë në atribut HyperText referencë për këtë. Pra, nëse ju merrni një vështrim, qoftë ju dukej me të vërtetë afër këtu, Nëse ju vetëm në thelb shikoni në URL bar, kjo është rruga që ju jeni do të jetë scraping. Pra, nëse ne vetëm të drejtuar këtë përsëri, dhe sigurohuni që ne kemi ruajtur atë. Ju mund të kontrolloni në shtëpi. Kjo në fakt përputhet me këtë lidhje. Pra, pse mund të duam ta përdorim këtë? Nëse ju doni të hall faqja dhe ajo ka një faqe e lidhjeve si Craigslist bën, ju mund të dëshironi të shkoni, atëherë në secilën prej këtyre lidhjeve dhe pastaj hall përmbajtja e kësaj, që është pikërisht ajo që ne jemi duke shkuar për të bërë. Pra, një herë ju keni rrugë si një ndryshueshme, unë nuk të vërtetë kujdesen për shtypjen it out. Unë vetëm nevojë për të ruajtur atë si një ndryshore. Dhe pastaj unë mund të hyni në një tjetër faqe në të njëjtën mënyrë hyj doc në vendin e parë. Përveç me URL, ne jemi duke shkuar të përdorin varg interpolation si unë u përshkruar në Ruby herët për të append rruga për në fund të rrënjë. Pra, çfarë kjo do të bëjë është kjo do të vihet në rrugën e që unë scraped parë dhe pastaj të kthehet se në një artikull të ri, çdo gjë që ju dëshironi të quajnë it-- first_listing, për shembull. Por unë jam duke shkuar për të lënë ajo në pikën për tani, sepse kjo është ajo që unë jam duke përdorur këtu. Kështu që thonë se unë të kërkuar për të marrë përshkrimin e shpalljes së parë në Craigslist. Kështu që unë do të shkoj këtu poshtë. Unë do të klikoni mbi Inspect Element përsëri, sepse ky është përshkrimi. Unë do të shkoj poshtë këtu dhe të shohim në qoftë se unë mund të gjeni se si unë mund të të jetë në gjendje për të kërkuar për këtë tag të veçantë. Dhe në këtë rast, ajo ka një ID, e cila na çon në rrugën tonë të ardhshëm të kërkim etiketa, e cila është me një hashtag. Pra për klasat, ju mund të përdorin dot operatorin. Pra, .txt është specifikuar një klasë të txt, ndërsa hash specifikon një ID. Pra, në këtë rast, është tag seksioni, dhe ID është postingbody. Pra, kjo shkon dhe gjen first-- sepse ne jemi duke përdorur at_css-- kjo shkon dhe gjen elementin e parë që vjen me tag e seksionit dhe ID e postingbody. Dhe pastaj ju mund të hyni në elementin tekst i atij sendit kthye me .text. Dhe pastaj ne mund të ruajë që në përshkrim. Pra, tani që ne kemi një përshkrim ndryshueshme, ne mund të jetë në gjendje të bëjë, të themi, paraqesë I / O. Pra, të paraqesë I / O në Ruby është shumë e ngjashme për të paraqesë I / O në C ku kemi hapur një skedë. Ne mund të shkruaj për të. Dhe pastaj ne do të mbyllë këtë dosje. Kështu që këtu, ne jemi vetëm emërtimin fotografi, disa ndryshore arbitrare. Ne gjithashtu mund të vetëm e kanë vënë këtë këtu. Ne kemi një ndryshore që ne jemi ruajtjen dosja e hapur si me File.open. Dhe ne jemi me shkrim për këtë fotografi, kështu që ne të hapur atë me operatorin w. Dhe pastaj ne kemi vënë string në të të paraqesë me operatorin .puts. Dhe pastaj ne kemi vënë ndryshore që ne dua të shkruaj në dosjen brenda atij. Dhe pastaj ne vetëm të mbyllë dosjen. Pra, nëse ne do të shkojmë përpara dhe të drejtuar këtë, kjo duhet të prodhojë një dokument me të cilin do të description.txt kanë këtë përshkrim brenda saj. Pra, nëse unë të drejtuar it-- nr. Është prodhuar një file teksti me, me shpresë, e njëjta gjë. Kështu që nuk mund të ketë qenë një postimi të ri që është dalë, ndërsa unë kam qenë duke folur. Dhe me të vërtetë duket sikur ka pasur. Pra, nëse ne do të shkojmë në këtë biçikletë klasik, 1962 deri 1966, që duket që të shkojë. Dhe ju shkoni atje. Pra, kjo është më themelore funksionalitetin e scraping. Ne mund të ketë në vend të vetëm me shkrim tek kjo skedë: ne mund të shtoni gjëra në një grup. Pra, nëse unë deklaroj tre vargjeve, titulli, çmimi, dhe përshkrim. Dhe ne jemi që veprojnë në pika doc tani. Ne mund të shkoni nëpër dhe të gjeni të gjitha të span.txt. Dhe mbani mend, kjo kthen një koleksion të gjitha sendet që ai gjen. Dhe pastaj në Ruby, ju mund të përdorni vetëm Cdo të iterate nëpër çdo send e vektorit. Dhe pastaj për çdo artikull, Unë jam vetëm duke shkuar për të thirrur atë një lidhje, sepse kjo është në thelb atë që është. Pra, nëse unë të vënë çdo link.css dot a.hdrlnk, kjo është në të vërtetë do të link dhe gjetja brenda këtë link tjetër Element HTML dhe të klasës përkatëse. Pra, në qoftë se ne kujtojmë se çfarë kjo ishte, The span.txt, ju mund të see- më lejoni vetëm të shkojnë prapa quick-- e vërtetë brenda span.txt ne kemi një shumë të klasave të tjera. Pra brenda span.txt, ne jemi duke shikuar për një një tag me një hdrlnk klasës. Pra më lejoni të gjeni vetëm se për ju djema të vërtetë të shpejtë. Kështu që ju mund të shihni këtu, kjo është një një tag kjo është brenda hapësirë ​​të klasës txt që ka hdrlnk klasës. Dhe kjo është me të vërtetë ajo që ne jemi duke u përpjekur për të marrë. Pra, ne jemi tani duke u përpjekur për të ruajtur të gjithë e këtyre lidhjeve brenda titull. Dhe pastaj ne jemi duke shkuar për të shtypur nga secili prej këtyre lidhjeve. Jo, më vjen keq. Ne jemi duke shkuar për të shkruar çmimi i secilit prej atyre. Pra, le të drejtuar këtë të vërtetë të shpejtë dhe të shohim se çfarë ajo bën. Pra, kjo vetëm në thelb u me secilin nga lidhjet nga ana tjetër, arrihen tag në fjalë, dhe pastaj u tërhoq nga çmimi. Dhe ajo e bëri këtë sepse pas ju keni gjithçka në titull, ne kemi ruajtur vetëm titullin atje. Ne kemi ruajtur vetëm lidhjen brenda titullit array. Dhe në këtë operacion për loop, ku në vend që të shkojnë në a.hdrlnk, ne jemi duke kërkuar për një span.price. Pra, nëse unë mund vetëm të vërtetë të gjeni shpejt çmimi, në qoftë se ju inspektojë elementin, ju do të shihni se ajo është një hapësirë me klasën e çmimit. Dhe kjo është në thelb si ne jemi duke marrë çmimin atje. Pra, kjo është me të vërtetë Rasti themelore e scraping. Kjo është se si ju të merrni të gjithë elementet në një faqe se, të themi, ju tashmë e dini URL e. Pra, nëse ne duam që të merrni një pak më shumë në thellësi, ne mund hall faqet brenda faqeve. Dhe për këtë shembull, unë do të të jetë kompjuteri në një skedar CSV. Kështu që unë jam duke kërkuar CSV këtu sepse Ruby nuk ka, brenda vetes, kanë funksionalitet të prodhimit vetëm CSV fotografi. Pra, kjo është super e thjeshtë. Më lejoni thjesht shkoni për të ardhshëm. Ne mbuluar skedar I / O. Pra kjo është e njëjtë me sa është në C. Dhe para se të lëvizin për Kimono, Unë vetëm do të ju tregojnë se si të vërtetë të shpejtë në hall faqet brenda pamjeve. Pra, ne tashmë e mësuar se si për të deklaruar vargjeve në Ruby. Kështu që unë jam vetëm duke deklaruar një bandë e vargjeve arbitrare që unë do të jetë ruajtjen e të dhënave brenda. doc operon në të njëjtën mënyrë ashtu siç bëri në dosjen e mëparshëm. Ne jemi duke shkuar në, duke gjetur secili prej span.txt-së. Ne tashmë e dimë se. Kjo është enë brenda së cilës çdo Lidhje ka të gjitha të dhënave që ne duam. Kështu që këtu ajo që ne po bëjmë është për çdo Lidhje e klasës hapësirë ​​txt, ne jemi duke shkuar në dhe ne jemi duke gjetur një tag, duke gjetur elementin e parë e asaj. Mos harroni, .css kthen një koleksion, kështu që ju nuk mund të përdorni atë siç është. Ne jemi duke shkuar për të gjetur elementin e parë. Edhe në qoftë se kjo është një grup i një artikull, ju duhet të përdorni këtë sintaksë, dhe pastaj të largohen nga atribut a href. Pra, ne e bëmë këtë më herët. Pra, kjo duhet të duket e njohur. Dhe kështu që tani kemi një rrjet quajtur rrugët e të gjithë të lidhjeve tona se ne do të dëshironi të përdorni. Pra, nëse kemi këtë grup të gjithë nga shtigjet që ne duam të përdorim, ne pastaj mund të krijojë një artikull për secilin e ato faqe kur ne hapim atë faqe. Pra, si ne gjithashtu pamë në Sintaksa më parë, ku duke bërë string interpolation me rrugën këtu, kështu që sintaksa është vetëm për rrugën. Dhe unë mund të emërojë këtë variabël ndonjë emër arbitrare. Kjo është e rëndësishme. Ky është grup që ju do të të jetë hyrë në çdo element. Por kur ju thonë se për rrugën në shtigjet, kjo do të thotë për çdo element në shtigjet, e quajti atë rrugë, dhe të përdorin atë. Kjo është në thelb si kur ju të bëjë një për lak dhe ti përdorni int i. Kështu që ju mund të trajtoni rrugën si më të variabël që është bën rritjen. Dhe pastaj për secilin nga ata, shkojnë në secilën prej këtyre lidhjeve. Sepse ne jemi ruajtjen atë në faqen pika, kështu që ne jemi duke krijuar një faqe të re çdo herë ne të hyrë në të. Dhe pastaj brenda asaj faqe të re, të gjejnë span.postingtitletext, span.price, dhe pastaj seksion # postingbody. Ne tashmë e mbuluar seksion # postingbody kur kemi shikuar në përshkrim. Pra, ne mund të shkojmë të shohim në postin Craigslist, në qoftë se ju jeni vetëm duke kërkuar në titull, ju mund të shihni atë këtu, postingtitletext hapësirë. Dhe kjo është arsyeja pse ajo është atje. Dhe pastaj për çmimin, ju mund të hyni në atë me klasën hapësirë ​​prej çmimit. Pra, ne edhe ndoshta fuqi dëshironi të ruani URL. Pra, ne do të kandidojë vetëm këtë përsëri, të ruajtur atë në një grup, sepse në qoftë se ju jeni në kërkim në Craigslist, ju jeni ndoshta do të duan një mënyrë për të, në qoftë se ju shihni diçka që ju interesojnë, të kthehemi në atë vend. Pra, ju thjesht duan për të ruajtur URL për hir referenca. Kjo është vetëm në thelb tjetër sintaksë për për lak. Unë mund vetëm të bëjë paths.each vend e për rrugën në shtigjet me indeks. Dhe kjo Sintaksa është Ruby for-- rrugë është ajo që ne e bëmë deri këtu, deklaruar një ndryshore për çdo send. Dhe indeksi sillet si Mbaj në C për sythe. Kështu që ju mund të ruaj gjurmët e asaj që indeksi është. Kështu që këtu është vetëm një pak gjë i përshtatshëm për kur ju jeni drejtimin e kruese. Nëse jeni duke scraping qindra faqe, për t'u siguruar se ajo nuk është e varur, ajo do të vetëm të prodhimit, Unë jam i hyrë në këtë faqe, dhe duke u siguruar që kjo është ende duke vazhduar. Por për qëllimet tona, sepse ka njëqind artikuj, Unë jam duke shkuar për të hyrë në vetëm tre prej tyre kështu që ne nuk do të dalë jashtë kohe ketu. Por, para se të shkoj në atë, unë jam vetëm duke shkuar për të treguar ju me të vërtetë të shpejtë, Unë do të jetë kompjuteri titullin, Çmimi, përshkrimi, dhe URL e secilit nga lidhjet që unë kam scraped. Dhe pastaj kjo është vetëm Sintaksa për bibliotekën CSV. Ju hapur një CSV. Kjo është ajo që unë jam duke shkuar për të thirrur atë. Të hapur atë me shkruaj detyrave. Dhe pastaj do të jetë CSV file që ju jeni inputting gjithçka në. Kjo është vetëm një kontroll mendje e shëndoshë për mua të di se është e running. Dhe kjo është kontroll ime mendje e shëndoshë ta dinë se është e përfunduar. Kështu që unë jam vënë titull në një rresht në CSV, çmimi, url, përshkrimin, të gjithë në rreshta në CSV. Pra, nëse ne do të shkojmë dhe të drejtuar ky now-- dhe unë vetëm sigurohuni që unë kam ruajtur it-- vend i vetëm kompjuteri atë në terminalin, ne duhet të kemi një CSV skedar që është prodhuar. Pra, këtu ne mund të shohim CSV skedë që është prodhuar. Kjo është prodhimi i arratisje që unë vetëm u zhvillua. Siç mund ta shikoni këtu, aksesimit faqe 0, 1, 2, 3. Këto janë titujt, çmimet, përshkrimet. Dhe nëse ne shikojmë në këtë CSV fotografi që kemi të krijuara, ju mund të shihni të saj outputted këtu. Kjo nuk është Excel, kështu që nuk është formatuar në rreshta dhe kolona. Por ju mund të imagjinoni se si ajo mund të jetë i formatuar. CSV qëndron për vlera të ndara me presje. Kështu që ju mund ta imagjinoni kjo mund të jetë një rresht. Dhe çdo presje do tregojnë një kolonë të veçantë. Vetëm një fjalë e caution-- ndonjëherë ju jeni scraping gjërat me një shumë të presje. Pra, nëse ju jeni kompjuteri ajo në një file CSV, kjo mund të mos Prodhimi mënyrë që ju mund të mendoni. Pra, kjo është në thelb të gjithë ka të scraping HTML themelore faqet me Nokogiri. Pra, qenia e internetit inovative siç ka dalë me një më të automatizuar dhe GUI version, megjithëse më pak të fuqishme Versioni i scraping faqet e internetit të ndryshme. Dhe për qëllimet tona Unë do të demonstruar një zgjerim Chrome quajtur Kimono. Dhe të gjithë ju duhet të bëni është që ju të lundruar në faqe që ju dëshironi për të hall. Ju klikoni mbi një fushë të interesit. Ju gjej kalibrin fushat, sepse ajo do të automatikisht zbuluar atë që mendon ju duan të jenë të scraping, dhe pastaj ju vetëm të krijojë një API. Pra, në qoftë se ne ishim për të demonstruar atë në Craigslist, ai në fakt nuk do të punojë. Dhe kjo është ajo që unë kam qenë duke shkuar prapa në duke thënë se për të mos qenë aq të fuqishme. Ajo ka problem duke krijuar API. Por, si një demonstrim e çfarë do të bëjë, në qoftë se ju instaloni zgjerimin Chrome, të gjithë ju bëni është të klikoni mbi të. Ajo Kimonofies faqe, dhe pastaj ju klikoni mbi gjë që ju doni të script. Pra, nëse unë do të klikoni mbi se, ai do të nxjerrë në pah ajo që mendon se unë dua të të jetë scraping off atë faqe. Kështu që ndoshta unë e quaj këtë listings. Kjo është se sa çështje e kam zgjedhur. Dhe unë vetëm mund të konfirmojë apo mohojë disa Listimet e tjera të sugjeruara për të marrë atë për të shtuar në çfarë do të scraped. Deri tani ne mund të shohim se ka njëqind artikuj të zgjedhur. Nëse unë dua që të ketë një fushë tjetër që unë edhe hall e cila është e lidhur me këtë, thonë se unë dua të hall çmimin si edhe, atëherë unë mund të bëjë të njëjtën gjë. Kështu që këtu është një demonstrim se si është shumë më pak të fuqishme, sepse tani është picking up qytetin në vend i vetëm çmimi që unë dua. Dhe tani është e kap 200 gjëra. Ju mund të ktheheni mbrapsh dhe të fshini. Ju mund të provoni përsëri. Por nuk ka garanci. Kjo është se si kjo punon ndonjëherë. Siç e shihni këtu, tani ai thotë se 96 deri këtu. Është kap shumica e lidhjeve që ju doni të hall, por jo domosdoshmërisht të gjithë ata. Një tjetër mjet i dobishëm i Kimono pse është që ju mund të shkoni në veçoritë e përparuara këtu, shkoni për të avancuar, dhe ai do t'ju tregojë ndarja e unike mënyrë për të hyrë në HTML tags që ju doni në hall. Pra për listings, në qoftë se ju shikoni në këtu, Nëse ju hyni në hapësirë ​​p div përfshijnë një, ju mund të vërtetë të përdorni vetëm këtë në kodin tuaj Nokogiri, ku para se të kishim span.txt për të hyrë në secilin nga lista e. Nëse unë vetëm dua tekstin brenda listings, Unë mund të dhëna hapësirë ​​div p hapësirë ​​hapësirë ​​hapësirë ​​hapësirë ​​hapësirë ​​një, dhe ai do të arrijë të njëjtin efekt. Dhe për ata prej jush që janë të interesuar në përdorur shprehje të rregullta, kjo ndodh për të ju jap më të rregullt shprehje lloj i vargut të dhëna për të gjetur gjërat ju jeni duke u përpjekur për të gjetur. Pra, ka një tjetër tipar i ftohtë i Kimono ku ju mund të numërtoj faqe, e cila nuk është vetëm mund të ia dal rezultatet e kësaj faqe, Unë mund të klikoni në këtë pak button këtu, Pagination, specifikojë butonin që do të marrë mua për faqen tjetër, dhe pastaj ai thjesht do të dinë se ajo mund të iterate në faqen tjetër, dhe pastaj hall gjithë the-- aq kohë pasi është e njëjta format e course-- arratisje të gjitha këto lidhje si. Pra, për shkak Kimono nuk dëshiron të punojnë me Craigslist, atë që ne kemi bërë po unë kam Kimonofied Harvard Crimson. Unë e kam tërhequr jashtë disa nga lloj Top Featured Artikuj, konfirmojnë këtu. Thuaj të gjitha këto. Unë kam hartuar këtë API për ju përpara kohe. Por përndryshe çfarë do të bënit është që ju vetëm do të klikoni Done. Shkruani të dhënat tuaja API. Vendosur atë në ose zvarritje automatizuar ose manuale. Kështu që ju mund të rinovuar tuaj të dhënat e çdo 15 minuta, javore, çdo ditë, çdo gjë që dëshironi. Emri API tuaj. Krijo API. Për të mirën tuaj, unë kam krijuar Crimson faqe API para tashmë. Kështu që ju vetëm të krijojë një llogari në Kimono, dhe ajo do të ruajë të gjitha TV tuaj për ju. Pra, në thelb kjo është e gjitha tuaj scrapes të veçanta të ndryshme. Pra, nëse ne shikojmë këtu, kjo është Mendimet lidhjet që unë kam mbledhur. Këto janë tipare lidhjet që unë kam mbledhur. Dhe këto janë më të lexuar lidhjet që unë kam mbledhura nga kjo arratisje më të fundit API. Pra, nëse ju mund të shihni këtu, këto do të jetë i paraqitur, këto do të jenë mendimet, që në këtë shembull, Unë e kam kombinuar ato të gjithë në një koleksion. Por në qoftë se ju vetëm të luajnë rreth me të pak, ju mund të ndarë atë dhe ndaje atë megjithatë ju doni të për aq kohë si formatimit është paksa e ndryshme. Vetëm për të luajtur rreth me këtë, zvarritje të ngritur, një dobësi është që ju vetëm mund të zvarritem deri në 25 faqe në një kohë. Kjo është një nga faktorët kufizues. Por këtu, në qoftë se keni vendosur atë për zvarritje manual, kjo është se si ju mund të thoni atë për të rinovuar të dhënat tuaja. Dhe këtu ju mund të shihni historinë tuaj zvarritje për çdo gjë që ju keni gjurmuar. Dhe ju djema mund të shkoni përsëri, të nënshkruar, luajnë rreth me të gjitha mënyra të ndryshme që ju mund të modifikoj dhe të përdorin të dhënat tuaja. Kimono mund të jetë ngritur për të hall lidhjet brenda lidhjet. Dhe ju do të bëni këtë duke e parë scraping një listë të lidhjeve, dhe pastaj duke përdorur atë si një API jump off pikë për një API që ju të krijoni skenarin. Por kjo është më e komplikuar se ajo që ne jemi duke shkuar për të marrë në sot. Pra, kjo është Kimono. Ne do të flasim për të mirat dhe të këqijat e Nokogiri dhe Kimono. Nokogiri, kjo është me të vërtetë i shpejtë. Është e lehtë për të provuar. Ju vetëm mund të vë asgjë për tastierë, të lehtë për të konfiguruar. Ju mund të vendosë saktësisht se çfarë ju doni të hall dhe dyqan. Nuk ka kufizime faqe. Unë në fakt e përdorën atë në hall si 1800 faqet e internetit të shkollave Afrikës së Jugut për postë elektronike për një stazh që kam bërë. Pra, kjo është e mundur, edhe pse praktikat më të mira do të jetë për të ndarë script. Sepse në qoftë se ai dështon, atëherë ju nuk merrni asgjë. Por në qoftë se ju bëni një njëqind, ndoshta 200 faqe në një kohë, atëherë ju keni një shans për të paktën marrë atë pak nga pak, sidomos në qoftë se ju keni internet keqe. Për fat të keq ajo mund të hall vetëm HTML. Pra, nëse ju keni pages-- ngarkohen në mënyrë dinamike dhe unë do t'ju tregoj një shembull si kayak në një second-- Nokogiri për fat të keq nuk mund të hall atë. Por Kimono është gjithashtu e lehtë për t'u përdorur. Siç e keni parë, është në thelb një pikë dhe klikoni. Ajo mund të hall JavaScript. Për fat të keq, ka një maksimum për sa shumë faqe ju mund hall. Ndonjëherë kjo është pak e vështirë për të konfiguruar. Ajo merr hutuar. Por është patjetër diçka që të marrin në konsideratë në qoftë se ju nuk jeni duke u përpjekur që të ketë një hall super të fuqishme maintainable. Nëse ju vetëm doni të merrni çdo gjë off e një faqe shpejt, atëherë Kimono është një të vërtetë mjet i mirë për të përdorur. Dhe siç e përmenda më parë, nuk ka tipar i avancuar i Kimono që tregon se si të të hapur HTML unik element, e cila është e dobishme super edhe në qoftë se ju jeni duke punuar në Nokogiri. Pra, nëse ne do të shkojmë në vendin e Kayak, për shembull, ju mund të shihni atje is-- apo ndoshta ju nuk mund ta shohin. Por në qoftë se unë ju tregojnë URL për kajak, kjo në fakt është vetëm burim URL. Kjo është URL para qenit modifikuar me çfarëdo Scripts JavaScript se ata kanë shkuar në. Dhe ajo do të duken të ndryshme nga inspektuar element. Pra, nëse ju shkoni nëpër dhe ju ndeshje deri Inspect Element Kodi për kodin burim, është e në të vërtetë do të jenë të ndryshme. Dhe kjo është në thelb arsyeja pse Nokogiri nuk mund të hall faqet ngarkohen në mënyrë dinamike. Sepse Nokogiri është scraping burim URL, ndërsa Kimono është në fakt scraping atë që ju jeni në thelb duke parë në Select element. Pra, nëse unë shkoj nëpër dhe unë provoni dhe Kimonofy Kayak, Unë në fakt mund të shkoni nëpër dhe zgjidhni çmimin. Kjo është pak e vështirë, dhe në këtë rast, është në fakt duke parë këtë çmim si të ndryshëm nga këto. Kështu, ndërsa ju mund të configure-- apo në qoftë se kjo nuk ishin të ngarkohen në mënyrë dinamike, ju mund të konfiguroni Nokogiri për të marrë të gjitha këto. Sepse formatimit është pak të ndryshme për këtë listim pasi ajo është në krahasim me pjesën tjetër prej tyre, dhe ju mund të shihni këtu është e shkuar në të vërtetë dhe përzgjedhura të gjitha çmimet e fluturimit. Ndoshta unë dua për të zgjedhur koha e fluturimit si. Dhe unë mund të shkoni nëpër dhe lloj konfiguroni atë. Unë nuk dua që. Unë vetëm dua kohë fluturimit të ardhshëm. Dhe pastaj pas nja dy këto duke kaluar, ajo merr foto. Pra Kimono është goxha i zgjuar. Është vetëm jo aq të fuqishme. Ka disa të tjera alternativa që ju mund të përdorni. Dhe unë do t'ju tregoj atyre këtu. Nëse ju jeni më të rehatshme në Python në vend të Ruby ndoshta, ka një bibliotekës quajtur supë bukur. Ju mund të përdorni atë. Është shumë e ngjashme me Nokogiri. Ajo ka disa karakteristika më shumë. Ju mund të gjeni një tag HTML dhe pastaj të shkojë deri ose të lëvizin anash. Ka PyQt. Ky fakt mund hall dinamike vende, sepse kjo është lloj i është një WebKit që pretendon të jetë një shfletues pa ka në të vërtetë duke qenë një shfletues. Pra, kjo do të presë për të gjithë JavaScript për të ngarkesës së pari, dhe pastaj shkoni në dhe të përpiqet dhe hall site. Nëse ju doni që të rrinë me Ruby, ju mund të shkoni një nivel up nga Nokogiri. Ju mund të përdorni Vjeter me një këmishë Poltergeist. Dhe kjo mund të vërtetë në thelb të bëjë të njëjtën gjë si PyQt, e cila është një WebKit. Ai pret për JavaScript për të ngarkesës së pari. Nëse ju shëndoshë rreth me atë të mjaftueshme, ju mund të merrni edhe atë për të klikoni mbi gjërat. Pra, nëse ka një lidhje që nuk është një href klasik ku rruga është e lehtë të arritshme, dhe kjo është diçka JavaScript që zbulon një klik, ju në fakt mund të bëjë këtë. Biblioteka më popullor për të simuluar një përdorues është në JavaScript, e cila është PhantomJS. Kjo mund të qartë hall dinamike faqet sepse kjo është në thelb pretenduar të jetë Chrome pa ndërfaqen e përdoruesit. Dhe pastaj, sigurisht më fuqishme, por opsion slowest, është një automatizimi shfletues Selen. Dhe për fat të keq, ju nuk do të jetë në gjendje të bëjë këtë brenda IDE tuaj CS50. Sepse në thelb ajo është nuk është ajo çizmet deri Chrome tuaj, Firefox, çfarëdo shfletuesi që ju dëshironi të përdorni, dhe ajo këngë ndoshta miun tuaj lëvizje, çdo gjë që ju shkruani në, dhe vetëm ajo lloj automatizojnë këtë proces. Kështu ajo u zhvillua si një lloj Faqja e internetit testimi automatizimi mjet. Por shumë njerëz përdorin Selen në hall Websites se ata ndryshe kemi një shumë vështirësi scraping me disa nga këto mjete të tjera, më të shpejtë. Pra, kjo është e gjitha unë kam marrë për web scraping. Have fun. Audienca: Pyetje. ROBERT KRABEK: Po. Audienca: A ka një mekanizëm për të hash Faqja e internetit kështu që ju mund të në thelb të shkojnë nëpërmjet saj më vonë. ROBERT KRABEK: Po. Pra, ne kemi vënë, në tonë shembull, për të dy prej tyre, ne kemi vënë të gjithë faqen e internetit në doc. Dhe kështu që ju mund të vërtetë të marrë vetëm doc ndryshueshme dhe shkruani atë në një skedar. Pra, nëse kam kërkuar për të, unë mund të shkruaj atë si një skedar HTML, dhe pastaj në vend të përdorimit OpenURI dhe një kërkesë curl, atëherë unë mund vetëm të hapë doc HTML dhe pastaj kërkoni për atë. Audienca: Por ju mund të ruajë lloj i përvojës në internet ndërsa ju bëni offline. Për shembull. kur ju jeni fluturues për disa orë, Unë dua të thelb Arkivi të gjithë internetit. [Padëgjueshme] ROBERT KRABEK: Po, kjo është exactly-- kështu që fjalë për fjalë ajo që kjo është duke bërë po ajo është duke marrë gjithçka që do të jetë në këtë URL. Pra, nëse ne u curl, është duke marrë të gjithë këtë HTML, dhe kjo është ruajtjen atë brenda doc ndryshueshme. Pra, atëherë ju mund të bëni çdo gjë që ju doni të bëni me doc. Ju mund të prodhimit është në një skedar. Audienca: Por kjo nuk është e lidhur deri. Kjo nuk është dinamike. Kjo nuk është gjithkund rekursive, e drejtë? Ju shihni se çfarë dua të them? Unë jam duke u përpjekur për të në thelb një lloj të hash të gjithë faqen e internetit në hard drive time kështu që unë mund të në thelb të bëjë atë për disa orë pa internet. ROBERT KRABEK: E drejta. Pra, nëse unë had-- kështu që ku është dosja ime I / O? Pra, kjo është skedari I / O. Pra, thonë se në vend të kësaj të kësaj, unë e quaj këtë craigslist.html. Unë do të hapur atë lart. Unë do të vë doc në të. I mbyllë dosjen. Dhe pastaj vetëm për shkak se CS50 IDE është mbi re, që është çfarëdo. Unë mund të shkoni këtu. Unë mund të shkarkoni skedarin. Dhe pastaj kjo do të jetë në hard drive time. Kështu që ju mund të bëni atë në këtë mënyrë. Ose në qoftë se ju jeni në shtëpi, jo duke përdorur CS50 IDE, si Sublime apo diçka, kjo është edhe më e lehtë, sepse kjo është e gjitha në dispozicion në nivel lokal, jo i lidhur me internet. Audienca: Unë shoh. Kjo është për një problem të veçantë. Mund ta bëni atë në mënyrë që ju Recursively shkojnë disa shtresa lloj të thellë e tillë? ROBERT KRABEK: Unë mund ta shkarkoni dosjet si dhe, nëse kjo është ajo që ju jeni duke kërkuar. Audienca: Po. ROBERT KRABEK: Best.