[Music kucheza] ROBERT KRABEK: Hello, nyie. Jina langu ni Robert Krabek, na Mimi nitakuwa nyie akifundisha jinsi ya scrape mtandao na Nokogiri, ambayo ni maktaba Ruby, na Kimono, ambayo ni ugani Chrome. Hivyo kwanza kuna wanandoa mambo ambayo anaweza kufanya kama labda tumekuwa kufanya psets zote hadi sasa na workspace yako ni kupata kidogo kamili. Tunaweza kweli tu kwenda na kuunda workspace mpya kwa ajili yako tu kufanya bidhaa mpya mradi katika. Hivyo kama huna wanataka kuendelea kufanya kazi katika CS50 template ID kwamba sasa kuwa, kujisikia huru, na unaweza tu kufunga Nokogiri na CFLAGS equals-- gem kufunga nokogiri. Lakini vinginevyo mimi nitakuonyesha jinsi ya kuanzisha mpya moja up. Na kisha hii ni kimsingi kuacha magurudumu mafunzo zaidi. Na wewe ni coding kama kama ungekuwa coding tu katika Mtukufu au kitu. Hivyo kama sisi kuhama juu. Hivyo kusema hii ni sasa CS 50 ID yako. Unaweza tu kwenda Cloud9 hapa. Unaweza kwenda dashibodi yako. Ni lazima kuleta workspaces tab. Na kisha unaweza bonyeza tu hapa, Kujenga New Workspace. Jina workspace yako mpya, labda mtihani, au kugema. Na kisha click huu tabo desturi hapa, badala ya CS50 templates tab. Na kisha unaweza tu kwenda na kuunda workspace mpya. Nimekuwa tayari umba workspace hapa. Hivyo tutaweza kufanya kazi na hii. Na kama wewe kuundwa mpya workspace hivyo kwa tab Desturi, unaweza tu aina gem kufunga nokogiri, ambayo si kwenda hapa. OK, ni kidogo hao. Lakini unaweza aina gem kufunga nokogiri. Na kwamba lazima kila kitu hapo ni ufungaji. Kama nilivyosema hapo kabla, kama wewe ni bado kufanya kazi katika CS50 yako template ID, wewe tu haja ya aina CFLAGS sawa gem kufunga nokogiri. Na nimekuwa tayari imewekwa hapa hivyo mimi si kufanya hivyo. Lakini kwa wale zifuatazo pamoja, kujisikia huru kufanya hivyo. Hivyo mara nimepata Nokogiri yako workspace au maktaba imewekwa, Mimi nina kwenda kukupa kidogo bila shaka ajali katika Ruby syntax kwa sababu Nokogiri ni maktaba Ruby. Hivyo itabidi haja ya kujua baadhi ya msingi Ruby syntax kwa kufanya kazi na Nokogiri. Hivyo baadhi ya tofauti za msingi kutokana na kile wewe ni kutumika kwa labda kama tumekuwa kufanya kazi hadi sasa katika tu C na PHP, wewe kutangaza vigezo na hakuna aina. Huwezi kutumia semicolons, ambayo ni aina ya misaada. Hakuna mabano sasa karibu kwa au wakati tanzi, kwa mfano. Wewe tu na kuzuia wa kanuni, na basi kukomesha mwishoni mwa hiyo. Hakuna pamoja pamoja na au bala bala, hivyo tu tunajua kwamba kwa wakati unafanya kwa tanzi, tu pamoja na bala sawa sawa. Na badala ya hash ni pamoja na, itabidi kutumia zinahitaji na kisha chochote maktaba kujaribu kupakia katika mpango wako. Ruby sio lugha ulioandaliwa. Hivyo hiyo ni misaada mwingine. Ni zaidi sawa na PHP ambapo ni lugha kufasiriwa. Unaweza kukimbia yoyote script Ruby kwamba kuandika na Ruby ikifuatiwa kwa jina la script yako au mpango. Kwa ishara kwamba ni mpango Ruby, wewe tu kuishia kwa .rb badala ya c. Na kuna kutofautiana arrays ukubwa katika Ruby, ambayo ni super rahisi wakati uko kugema na labda wanataka append data kwamba umefanya scraped katika safu. Huna malloc safu mpya na nakala safu ya zamani katika safu mpya. Unaweza tu append kwa mbili mshale ishara. Na hakuna chars, kuna moja tu masharti barua. Hivyo kwamba wanapaswa kuwa rahisi kidogo. Hivyo tutaweza tu kukupa baadhi mifano ya baadhi ya msingi Ruby syntax. Hivyo hapa unaweza kuona kwamba badala ya kufyeka kufyeka, kutoa maoni katika Ruby, wewe tu kutumia chupa ishara. Na tamko kutofautiana, wewe aina tu sawa kutofautiana chochote unataka kutofautiana kuwa. Wanaweza kuwa masharti. Unaweza kuwa na safu, ambayo wewe na idadi ya na maadili. unaweka na prints ni sawa. Kwa madhumuni yetu, Tofauti tu ni kweli kwamba unaweka, ambayo inasimamia kwa unaweka, unaweka tu mstari mpya tabia katika chochote ni uchapishaji. Hivyo kama sisi kutoa dogo maandamano hapa, tunaweza kukimbia hii with-- kufungua terminal mpya. Unaweza kuona yote haya mafaili walioko wastaafu yangu. Na kama mimi kukimbia tu Ruby, akiki intro.rb, ni unaweka nje tano Habari Mather, Quincy, Carrier. Adams. Hivyo hiyo ni yote kuna kwa kutangaza arrays. Watazamaji: Robert, unaweza kufanya font yako kidogo kubwa? ROBERT KRABEK: Ndiyo. Na siwezi kuvuta kwa sababu huwezi kuvuta kwa fonts wastaafu inaonekana. Hivyo hiyo ni jinsi gani magazeti vigezo kwa wastaafu yako. Unaweza pia kutumia vigezo ndani ya kamba. Hivyo hivi karibuni katika PHP, unaweza wamejifunza kuwa kuna kamba nyongeza katika kitabu. Hivyo kama wewe kuangalia hapa, kama mimi kutangaza vigezo tatu, jina, maktaba, na lugha, na mimi unaweka, mimi kuandika kamba, hello jina langu ni. Na kisha badala ya PHP toleo la kamba nyongeza katika kitabu ambayo inaonekana zaidi kidogo kama hii, una chupa ishara, na kisha brace curly, na kisha jina la kutofautiana. Na kwamba ni jinsi wewe d magazeti, wanasema, jina lolote kutofautiana ni. Na kisha unaweza pia concatenate masharti. Ruby inafanya super rahisi na alama ya kuongeza. Wewe tu na kamba moja upande wa kushoto pamoja na kutofautiana au nyingine kamba pamoja na kamba. Hivyo kama mimi magazeti hii nje, ni lazima tu kusema Hello, jina langu ni Robert. Mimi nitakuwa kufundisha wewe nokogiri katika Ruby. Na hebu tu kuthibitisha kwamba kwamba ni kweli case-- akiki intro. Hello, jina langu ni Robert. Mimi nitakuwa kufundisha wewe nokogiri katika Ruby. Kusonga mbele, kama mwingine kauli, ni tofauti kidogo kutokana na kile unaweza kutumika kwa kama tumekuwa kufanya kazi katika C. Huna haja ya mabano. Huna haja braces curly. Na badala ya mwingine kama, ni elsif concatenated. Hivyo katika hapa, kama nimekuwa alitangaza x up hapa, kama tunaweza kuona, x bado ni 5. Hivyo kama x ni chini ya 3, kutakuwa na kuweka ndogo. Kama ni chini ya 7, kati, pengine kubwa. Hivyo 5 ni idadi kati. Na mimi kuishia hii ya kuzuia wa kanuni na mwisho. Hapa ni yangu kwa kitanzi. Na syntax hii pia tofauti kidogo. 0 hadi tano tu kimsingi anatangaza arrays ya 0-5. Hivyo kuna inafaa tano katika safu. Na kisha kwa kila yanayopangwa kwa kuwa safu, nitakuwa incrementing i. Hivyo hii lazima magazeti 0-5, au 0-4. Na hii lazima magazeti kati. Na mimi itabidi kuwaka kupitia. Nyie watakuwa na fursa kwa kanuni hii baadaye. Hivyo nyie wanaweza kukimbia wenyewe hii. Hivyo hii ni wakati wako msingi kitanzi. Hii itakuwa tu kuwa uchapishaji j, incrementing na 1 mpaka sisi hit 5. Super haraka Ruby ajali shaka juu ya jinsi ya kuandika kazi. Badala ya, kusema, int factorial idadi, sisi tu def. Na kimsingi uko kufafanua kazi hapa. Hii ni kwenda kuwa jina la kazi, na hii ni vigezo yoyote kwamba wanataka kupita katika kazi. Unaweza kuwa kama kauli ndani ya. Unaweza kurudi. Katika kesi hiyo, tuko kufafanua recursively kutekelezwa factorial kazi. Hivyo sisi kuwaita tu kazi katika Ruby kama hii. Hivyo kama nimekuwa inavyoelezwa hii, mimi Unaweza kupiga simu factorial, kupita katika 3, na kisha 3 na idadi kutofautiana kwamba naweza kutumia ndani ya kazi. Na to_s hii ni kugeuka tu kurudi thamani ya factorial ndani ya kamba. Vinginevyo hii itatupa kosa kusema oh, mimi hawezi magazeti kamba kwa sababu kama unakumbuka, unaweka ni kuweka kamba kwa sababu hii factorial amerejea idadi. Ili tuweze kubadilisha kwamba kwa kamba kama hizo. Na kinyume chake, unaweza pia kubadilisha kamba kwa integer na to_i. Hivyo kufanya kila kitu super rahisi, kama mimi tu kutoa maoni hii nje, ila na kukimbia kazi factorial. Tunapaswa kuwa na uwezo wa kuona kwamba factorial ya 3 ni 6. Na huko ndiko kweli. Hivyo hiyo ni ajali yako shaka katika Ruby. Na sasa unajua Ruby, tunaweza kwenda juu ya kwa Nokogiri msingi kugema kuanzisha. Kimsingi wote una kufanya ni, katika Ruby, zinahitaji maktaba. Na kwa madhumuni yetu tutaweza kuwa kutumia maktaba OpenURI kama vile Nokogiri. Na kisha nini do-- na itabidi kukupa syntax kwa Haya ni wewe kufungua URL sana kama wewe ungekuwa katika ombi curl, ambayo inasimamia kwa C URL. Hivyo kuchukua URL ya tovuti katika swali. Wewe kuhifadhi katika kutofautiana. Na kisha unaweza kutafuta njia ya kuwa kutofautiana kwa HTML kipekee kwa kutumia Css amri. Na kisha unaweza pato maudhui ya popote unataka. Unaweza kuanza katika orodha. Unaweza pato katika faili, au hata tu magazeti hayo ili screen. Hivyo tutaweza kuonyesha kombe msingi. Hivyo hapa unaweza kuona tuna wanaohitaji nokogiri, zinahitaji wazi uri. Kuweka yako ya msingi juu, hebu kuiita hati au doc, sawa Nokogiri :: HTML wazi, ambayo ni amri zinazotolewa kwetu na OpenURI maktaba. Na tutaweza kuwa kutafuta, kwa wale wa wewe ambao wanaweza kuwa wanaishi katika quad, kwa baiskeli walioko Boston waliotajwa juu ya Boston Craigslist baiskeli sehemu tovuti. Hivyo kama wewe ni unfamiliar kwa curl, mimi itabidi tu kuonyesha halisi haraka kile Curl atafanya. Kama nilitaka kupata yote ya URL kutoka Craigslist tovuti, kama mimi aina curl, ni madampo tu wote wa URL kutoka Craigslist baiskeli tovuti kwenye terminal yangu. Hiyo si hasa muhimu kwa sababu mimi si wanataka manually kwenda kwa njia na kupata kitu mimi nina kuangalia kwa. Lakini tu hivyo unaweza kuona kwamba mimi nina kweli kutumia kanuni sahihi, kama ukiangalia katika URL kwa Craigslist katika bikes-- kwa sababu fulani ni halikupatikana. Kama ukiangalia ukurasa huu na ukiangalia URL, hii inapaswa kuwa sawa na ombi Curl kwamba mimi tu kutuma. Na hakika, kwamba ni nini kuwa kuhifadhiwa katika doc kutofautiana. Hivyo wakati wewe kwenda nyuma ya kificho yetu, sisi Basi unaweza kufanya kazi juu ya hili kutofautiana doc kwa kutumia css. Hivyo kusema nilitaka kupata yote ya vitambulisho kwamba ni span.txt, na vitambulisho wote a ndani ya tag kwamba. Na kwa nini huenda tunataka kufanya hivyo, mimi kusikia wewe kilio? Kama sisi Kukagua kipengele, inakupa kuvunjika kwa jinsi URL ni muundo. Kama mimi kitabu chini kupitia hapa, unaweza kuona nini kila moja ya haya tofauti mambo inawakilisha. Hivyo labda nataka kupata hili kipengele fulani. Hivyo mimi nina kutumia Chrome developer zana Kukagua kipengele. Naona chini hapa kwamba hii ni tag ndani ya muda kumtambulisha na darasa la txt. Hivyo hii anapata yetu operesheni ya kwanza ambayo ni doc.css span, ambayo ni tag kwamba Mimi nina kuangalia kwa ndani URL hii yote. Na kisha txt kazi kiasi kama CSS anafanya wakati wewe ni kuandika tu CSS katika mafaili yako HTML na kubainisha darasani. Hivyo operator hasa hili itakuwa kutaja tag span na darasa la txt. Na kisha kama mimi kuondoka nafasi, hii kisha kwenda ndani ya tag kwamba na kisha kupata tag ndani ya hiyo. Hivyo kama mimi tu ya kuweka hii kwa wastaafu, mimi lazima na uwezo wa kuona kila kitu kimsingi kuwa ni ndani ya muda huu wa tabaka la txt. Hivyo tutaweza kutoa kwamba kwenda. akiki craigslist-kombe. Na hakika kwamba inatupa yote haya vitambulisho ya nyimbo mbalimbali ambazo ni juu ya Craigslist ukurasa. Hivyo kama sisi kurudi nyuma, tunaweza kugeuka hii katika kitu muhimu zaidi kidogo. Labda tunataka tu viungo. Kwa sababu ndani ya tag hii, mimi itabidi pia kuwa hyperlink ya njia kwamba ukurasa huu inakwenda. Hivyo kama ukiangalia kanuni hii hapa, nini la kufanya ni badala ya css, Siwezi kwenda at_css. Na hii itakuwa tu kupata kwanza kipengele cha mambo hayo yote. Hivyo kama ningekuwa kufanya hivyo hadi katika kificho I just awali alionyesha, badala ya kurudi zote ya hii, ingekuwa tu kurudi kwanza mmoja wa wale. Hivyo hiyo ni jinsi at_css operator kazi. Hivyo tunataka kuhifadhi njia zote za kwanza tag. Na kwa sababu itatupa a-- hivyo sisi bado ni kwenda kutumia css. Lakini kwa sababu hii ni kwenda kutoa sisi nyuma safu nzima ya vitambulisho, tunaenda kupata kitu cha kwanza. Hivyo hii ni njia nyingine ambayo unaweza kupata kipengele fulani yoyote kama wewe safu ya vipengele kuwa ni kurudi, kwa sababu unaweza kutibu kitu chochote ambacho anarudi css kama safu, kimsingi. Na kisha tunakwenda kupata HyperText kumbukumbu sifa ya hii. Hivyo kama wewe kuangalia, kama wewe inaonekana kweli karibu hapa, kama wewe tu kimsingi kuangalia bar URL, hii ni njia ambayo wewe ni kwenda kuwa kugema. Hivyo kama sisi kukimbia tu hii tena, na kuhakikisha tumekuwa kuokolewa nayo. Unaweza kuangalia nyumbani. Hii kwa kweli mechi na kiungo huu. Hivyo kwa nini huenda tunataka kutumia hii? Kama unataka scrape ukurasa na ina ukurasa wa viungo kama Craigslist gani, wewe kutaka kwenda basi ndani ya kila mmoja viungo wale na kisha scrape maudhui ya kwamba, ambayo ni nini hasa sisi ni kwenda kufanya. Hivyo mara moja una njia kama kutofautiana, mimi tena kweli huduma kuhusu uchapishaji nje. Mimi tu haja ya kuhifadhi kama kutofautiana. Na kisha mimi wanaweza kupata mwingine ukurasa njia hiyo mimi kupata doc katika nafasi ya kwanza. Ila kwa URL, tunakwenda kutumia kamba nyongeza katika kitabu kama mimi alikuwa kuelezea katika Ruby mapema juu ya append njia ya mwisho wa mizizi. Kwa hiyo kile hii ni kwenda kufanya ni hii ni kwenda kuweka kwenye njia ya kwamba mimi scraped awali na kisha kurejea kuwa ndani ya bidhaa mpya, chochote unataka piga it-- first_listing, kwa mfano. Lakini mimi nina ataondoka ni juu ya bidhaa kwa sasa, kwa sababu hicho ndicho mimi nina kutumia hapa. Hivyo kusema nilitaka kupata maelezo ya posting kwanza katika Craigslist. Hivyo napenda kwenda chini hapa. Napenda click kwenye Kukagua kipengele tena, kwa sababu hii ni maelezo. Ningependa kwenda chini hapa na kuona kama naweza kupata jinsi nipate kuwa na uwezo wa kutafuta tag hii ya kipekee. Na katika kesi hii, ina ID, ambayo inaongoza sisi kwa njia yetu ya pili ya kwa ajili ya kutafuta vitambulisho, ambayo ni pamoja na alama. Hivyo kwa ajili ya madarasa, unaweza kutumia nukta operator. Hivyo txt ni kubainisha kundi la txt, ambapo hash bayana kitambulisho. Hivyo katika kesi hii, tag ni sehemu, na ID ni postingbody. Hivyo hii huenda na anaona first-- kwa sababu tuko kutumia at_css-- hili linakwenda na anaona kipengele kwanza kwamba anakuja na tag ya sehemu na ID ya postingbody. Na kisha unaweza kupata kipengele asilia ya bidhaa kwamba akarudi na .text. Na kisha tunaweza kuhifadhi kwamba katika maelezo. Hivyo sasa kwamba tuna maelezo kutofautiana, tuweze kuwa na uwezo wa kufanya, kusema, faili I / O. Hivyo faili I / O katika Ruby ni sawa na faili I / O katika C ambapo sisi kufungua faili. Tupate kuandika na hiyo. Na kisha tutaweza karibu faili hilo. Hivyo hapa, sisi ni kumtaja tu faili, baadhi kutofautiana holela. Tunaweza pia kuweka tu hii hapa. Tuna kutofautiana kwamba sisi ni hifadhi faili wazi kama kwa File.open. Na sisi ni kuandika na faili hili, hivyo sisi kufungua hiyo na mwendeshaji w. Na kisha sisi kuweka kamba katika faili na .puts operator. Na kisha sisi kuweka kutofautiana kwamba sisi unataka kuandika na faili ndani ya hiyo. Na kisha sisi tu karibu faili. Hivyo kama sisi kwenda mbele na kukimbia hii, hii inapaswa kuzalisha hati na description.txt ambayo itakuwa na maelezo haya ndani yake. Hivyo kama mimi kukimbia it-- hakuna. Ni zinazozalishwa faili maandishi na, hopefully, kitu kimoja. Kwa hiyo, kuna uwezekano kuwa posting mpya hiyo ni kuja wakati nimekuwa kuzungumza. Na hakika inaonekana kama kumekuwa na. Hivyo kama sisi kwenda baiskeli hii classic, 1962-1966, ambayo inaonekana kwa mechi. Na kuna kwenda. Hivyo hiyo ni ya msingi zaidi utendaji wa kugema. Tunaweza kuwa na badala ya kuandika tu kwa faili hili, tunaweza kuongeza mambo kwa safu. Hivyo kama mimi kutangaza arrays tatu, cheo, bei, na maelezo. Na sisi ni kazi ya doc bidhaa sasa. Tunaweza kwenda kwa njia na kupata yote ya span.txt. Na kumbuka, hii anarudi safu ya vitu vyote anaona. Na kisha katika Ruby, unaweza kutumia tu .Kila iterate kupitia kila kitu ya safu. Na kisha kwa kila kitu, Mimi tu kwenda kuiita kiungo, kwa sababu hiyo kimsingi ni nini. Hivyo kama mimi kuweka kila link.css nukta a.hdrlnk, hii ni kweli kwenda kiungo na kutafuta ndani ya kwamba kiungo mwingine HTML kipengele na darasa sambamba. Hivyo kama tunakumbuka hii ilikuwa, span.txt, unaweza kuona- napenda tu kwenda nyuma quick-- halisi ndani ya span.txt tuna mengi ya madarasa mengine. Hivyo ndani ya span.txt, sisi ni kuangalia kwa tag na darasa hdrlnk. Hivyo basi mimi tu kupata kwamba kwa nyie halisi haraka. Hivyo unaweza kuona hapa, hii ni tag hiyo ni ndani ya muda wa darasani txt ambayo ina tabaka la hdrlnk. Na kwamba ni kweli nini sisi ni kujaribu kupata. Hivyo sisi ni sasa kujaribu kuhifadhi wote ya viungo wale ndani ya kichwa. Na kisha tunakwenda magazeti nje kila moja ya viungo wale. Hakuna, pole. Tunakwenda magazeti nje bei ya kila moja ya hizo. Basi hebu kukimbia kweli hii haraka na kuona kile yake. Hivyo hii alikwenda tu kimsingi njia ya kila ya viungo kwa upande wake, kupatikana tag katika swali, na kisha kujiondoa bei. Na alifanya hivyo kwa sababu baada ya una kila kitu katika cheo, tumekuwa tu kuhifadhiwa jina huko. Tumekuwa tu kuhifadhiwa kiungo ndani ya kichwa safu. Na katika hii kwa kitanzi operesheni, ambapo badala ya kwenda a.hdrlnk, sisi ni kuangalia kwa span.price. Hivyo kama naweza tu kweli haraka kupata bei, kama wewe kukagua kipengele, utaona kuwa ni span na darasa la bei. Na hiyo ndiyo kimsingi jinsi sisi ni kupata bei huko. Hivyo hiyo ni kweli kesi ya msingi ya kugema. Hiyo ni jinsi ya kupata zote vipengele kwenye ukurasa kwamba, kusema, tayari kujua URL ya. Hivyo kama tunataka kupata kidogo zaidi kwa kina, tunaweza scrape kurasa ndani ya kurasa. Na kwa mfano huu, mimi itabidi kuwa outputting kwa jalada la CSV. Hivyo mimi nina wanaohitaji csv hapa kwa sababu Ruby hana, ndani ya yenyewe, na utendaji pato tu files CSV. Hivyo hiyo ni super rahisi. Napenda tu kwenda ijayo. Sisi kufunikwa faili I / O. Hivyo hii ni sawa na jinsi ilivyo katika C. Na kabla ya sisi kuendelea na Kimono, Mimi itabidi kuonyesha jinsi kweli haraka scrape maeneo ndani ya vituko. Kwa hiyo sisi tayari kujifunza jinsi kutangaza arrays katika Ruby. Hivyo mimi nina kutangaza tu rundo la arrays holela kwamba mimi itakuwa kuhifadhi data ndani ya. doc ni kazi kwa njia hiyo hiyo kama ilivyokuwa katika faili uliopita. Tunakwenda katika, kutafuta kila mmoja wa span.txt. Sisi tayari kujua kwamba. Hiyo ni chombo ambamo kila kiungo ina yote ya data kwamba tunataka. Hivyo hapa sisi ni kufanya ni kwa kila kiungo wa darasa span txt, tunakwenda katika na sisi ni kutafuta tag, kutafuta kitu cha kwanza ya kwamba. Kumbuka, css anarudi safu, hivyo huwezi kupata hiyo kama ni. Tunakwenda kupata kitu cha kwanza. Hata kama ni safu ya moja bidhaa, una kutumia syntax hii, na kisha kujiondoa sifa href. Hivyo sisi alifanya hivyo mapema. Hivyo hii inapaswa kuangalia ukoo. Na hivyo sasa tuna safu aitwaye njia ya yote ya viungo yetu kwamba tunakwenda wanataka kutumia. Hivyo kama tuna safu hii ya yote ya njia ya kuwa tunataka kutumia, sisi kisha unaweza kuunda bidhaa kwa kila ya kurasa hizo, wakati sisi kufungua ukurasa huo. Hivyo kama pia tuliona juu ya syntax kabla, ambapo kufanya kamba nyongeza katika kitabu na njia hapa, hivyo syntax ni tu kwa ajili ya njia. Na mimi naweza kutaja hii kutofautiana jina yoyote holela. Hii ni moja muhimu. Hii ni safu kwamba utasikia kuwa kupata kila kipengele. Lakini unaposema kwa njia katika njia, hii ina maana kwa kila kipengele katika njia, kuiita njia, na kutumia huo. Hii ni kimsingi kama wakati kufanya kwa kitanzi na matumizi int i. Hivyo unaweza kutibu njia kama kutofautiana hiyo incrementing. Na kisha kwa kila moja ya hizo, kwenda katika kila moja ya viungo wale. Kwa sababu sisi ni hifadhi hiyo katika bidhaa ukurasa, hivyo sisi ni kujenga ukurasa mpya kila wakati sisi kupata huduma hiyo. Na kisha ndani ya ukurasa huo mpya, kupata span.postingtitletext, span.price, na kisha sehemu # postingbody. Sisi tayari mifuniko sehemu postingbody # wakati sisi inaonekana katika maelezo. Ili tuweze kwenda kuona katika Craigslist baada, kama wewe ni kuangalia tu kwa jina, unaweza kuona ni hapa juu, span postingtitletext. Na hii ndiyo maana ni huko. Na kisha kwa bei, unaweza kupata hiyo kwa span daraja ya bei. Hali kadhalika na sisi labda anaweza unataka kuhifadhi URL. Hivyo tutaweza kukimbia tu hii tena, kuhifadhi katika safu, kwa sababu kama wewe ni kuangalia juu ya Craigslist, uko pengine atataka njia ya, ikiwa unaweza kuona kitu kuwa na maslahi yenu, kurudi nyuma na tovuti hiyo. Hivyo wewe tu unataka kuhifadhi URL kwa ajili ya kumbukumbu. Hii ni kimsingi syntax nyingine kwa ajili ya kitanzi. Mimi nilikuwa tu kufanya paths.each badala ya kwa njia katika njia na ripoti. Na syntax hii ni Ruby for-- njia ndivyo tulivyofanya hapa juu, kutangaza variable kwa kila kitu. Na ripoti kutenda kama i katika C kwa mizunguko. Hivyo unaweza kuweka wimbo yale ripoti ni. Hivyo hapa ni kitu kidogo rahisi kwa wakati wewe ni mbio kombe. Kama wewe ni kugema mamia ya kurasa, kuhakikisha kuwa siyo kunyongwa, itakuwa pato tu, Mimi kupata ukurasa huu, na kuhakikisha kuwa ni bado yanaendelea. Lakini kwa madhumuni yetu, kwa sababu kuna mia vitu, Mimi nina kwenda kupata tatu tu kati yao hivyo kwamba hatuna kukimbia nje ya muda hapa. Lakini kabla ya sisi kupata kwamba, Mimi tu kwenda kuonyesha kweli haraka, Mimi nitakuwa outputting cheo, bei, maelezo, na URL ya kila moja ya viungo kwamba nimepata scraped. Na kisha hii ni syntax kwa ajili ya maktaba CSV. Kufungua CSV. Hii ni nini mimi kwenda kwa simu yake. Kufungua na kuandika do. Na kisha CSV itakuwa kwamba faili wewe ni inputting kila kitu ndani. Hii ni sanity hundi kwa mimi kujua kwamba ni mbio. Na hii ni sanity yangu kuangalia kujua kwamba ni kukamilika. Hivyo mimi nina kuweka kichwa katika mstari katika CSV, bei, url, maelezo, zote katika safu katika CSV. Hivyo kama sisi kwenda na kukimbia now-- hii na mimi tu kuhakikisha kwamba nimepata kuokolewa it-- badala ya tu outputting kwa wastaafu, tunapaswa kuwa CSV faili kwamba ni zinazozalishwa. Hivyo hapa tunaweza kuona CSV faili kwamba imekuwa zinazozalishwa. Hii ni pato la scape kwamba mimi tu mbio. Kama unaweza kuona hapa, kupata ukurasa 0, 1, 2, 3. Hizi ni vyeo, bei, maelezo. Na kama sisi kuangalia CSV hii faili kwamba tumekuwa yanayotokana, unaweza kuona wake outputted hapa. Hii si Excel, hivyo si mpangilio katika safu na nguzo. Lakini unaweza kufikiria jinsi inaweza kuwa mpangilio. CSV anasimama kwa comma kutengwa maadili. Hivyo unaweza kufikiria hii inaweza kuwa mfululizo. Na kila comma ingekuwa zinaonyesha safu tofauti. Tu ujumbe wa caution-- wakati mwingine uko kugema mambo na mengi ya koma. Hivyo kama wewe ni outputting kwa jalada la CSV, ni nguvu si pato njia unaweza kufikiri. Hivyo hiyo ni kimsingi zote hapo ni kugema HTML msingi kurasa na Nokogiri. Hivyo biashara ya utu ubunifu kama ina kuja na automatiska zaidi na GUI toleo la, angalau kidogo imara toleo la kugema tovuti mbalimbali. Na kwa madhumuni yetu Mimi itakuwa kuonyesha ugani Chrome aitwaye Kimono. Na wote una kufanya ni wewe navigate kwa ukurasa kwamba unataka scrape. Wewe click kwenye uwanja wa maslahi. Wewe calibrate mashamba, kwa sababu itakuwa moja kwa moja kuchunguza nini anadhani unataka kuwa kugema, na kisha tu kujenga API. Hivyo kama sisi walikuwa wa kuonyesha kwenye Craigslist, ni kweli bila kazi. Na hii ni nini nilikuwa kurejea akisema kuhusu hilo kutokuwa na kama imara. Ina shida kujenga API. Lakini kama maandamano ya nini angefanya, kama kufunga ugani Chrome, wote kufanya ni bonyeza juu yake. Ni Kimonofies ukurasa, na kisha click kwenye jambo unataka script. Hivyo kama ningekuwa click kwenye kwamba, ingekuwa kuonyesha nini anadhani nataka kuwa kugema mbali ukurasa huo. Hivyo labda mimi wito nyimbo hii. Hivi ndivyo vitu vingi I have kuchaguliwa. Na naweza tu kuthibitisha au kukataa baadhi ya wengine nyimbo alipendekeza kupata na kuongeza nini itakuwa scraped. Hivyo sasa tunaweza kuona kuna vitu mia kuchaguliwa. Kama mimi nataka kuwa na uwanja mwingine kwamba mimi pia scrape ambayo ni kuhusiana na hii, kusema nataka scrape bei pamoja, basi siwezi kufanya hivyo. Hivyo hapa ni uthibitisho wa jinsi ni kiasi kidogo imara, kwa sababu sasa ni kuokota mji badala ya tu bei kuwa nataka. Na sasa ni ilichukua mambo 200. Unaweza kwenda nyuma na kufuta. Unaweza kujaribu tena. Lakini hakuna dhamana. Hii ni jinsi hii matendo wakati mwingine. Kama unaweza kuona hapa, sasa inasema 96 hapa. Ni ilichukua zaidi ya viungo kwamba unataka scrape, lakini si lazima wote. Chombo mwingine muhimu wa Kimono ingawa ni unaweza kwenda juu Makala hapa, kwenda juu, na itakuwa kuonyesha kuvunjika kwa kipekee njia ya kupata HTML vitambulisho kwamba unataka scrape. Hivyo kwa ajili ya nyimbo, kama ukiangalia hapa, kama wewe kupata div p span span, unaweza kweli kutumia tu huu katika Nokogiri kanuni yako, ambapo kabla tulikuwa span.txt kupata kila moja ya nyimbo. Kama mimi nataka tu maandishi ndani ya nyimbo, Mimi naweza pembejeo div nafasi p nafasi span nafasi nafasi span a, na ingekuwa kufikia athari sawa. Na kwa wale ambao ni nia katika kutumia maneno ya mara kwa mara, hutokea kwa kawaida pia kukupa kujieleza aina ya kamba pembejeo kupata mambo wewe ni kujaribu kupata. Kwa hiyo, kuna kipengele mwingine baridi ni ya Kimono ambapo unaweza paginate, ambayo si tu naweza scrape matokeo ya ukurasa huu, Siwezi click kwenye hii ndogo kifungo hapa, Pagination, kutaja kifungo kwamba ingekuwa kuchukua yangu kwa ukurasa wa pili, na basi itakuwa tu kujua kwamba inaweza iterate kwa ukurasa wa pili, na kisha scrape wote wa the-- kwa muda mrefu kama ni utaratibu huo huo wa kozi hii scape wote wa viungo wale pia. Hivyo kwa sababu Kimono hataki kazi na Craigslist, kile ambacho tumefanya ni Nimekuwa Kimonofied Harvard Crimson. Nimekuwa kujiondoa baadhi ya aina ya juu featured makala, kuthibitisha hapa. Kusema yote haya. Nimekuwa ulioandaliwa API huu kwa wewe kabla ya muda. Lakini vinginevyo nini ungependa kufanya ni wewe ingekuwa tu bonyeza Done. Kuingia katika API maelezo yako. Kuweka kwa ama automatiska au mwongozo kutambaa. Hivyo unaweza kuboresha yako data kila baada ya dakika 15, kila wiki, kila siku, chochote unataka. Jina API wako. Kujenga API. Kwa manufaa yako, nimekuwa kuundwa Bendera ukurasa wa mbele API tayari. Hivyo tu kujenga akaunti kwenye Kimono, na mapenzi kuhifadhi APIs yako yote kwa ajili yenu. Hivyo kimsingi kwamba wote yako tofauti scrapes tofauti. Hivyo kama sisi kuangalia hapa, hii ni maoni viungo kwamba nimepata zilizokusanywa. Hizi ni featured viungo kwamba nimepata zilizokusanywa. Na hawa ni wengi kusoma viungo kwamba nimepata zilizokusanywa kutokana na hili hivi karibuni API scape. Hivyo kama unaweza kuona hapa, haya itakuwa featured, haya itakuwa maoni, ambayo katika mfano huu, Nimekuwa pamoja nao wote ndani ya ukusanyaji moja. Lakini kama wewe tu kucheza karibu na hiyo kidogo kidogo, unaweza kupasuliwa it up na kuigawanya up hata hivyo unataka kwa muda mrefu kama formatting ni tofauti kidogo. Tu kucheza karibu na hayo, kutambaa kuanzisha, moja ya downsides ni unaweza tu kutambaa juu 25 kurasa wakati huo. Hiyo ni moja ya sababu ya kikwazo. Lakini hapa, kama wewe kuweka hiyo mwongozo kutambaa, hii ni jinsi gani unaweza kuwaambia ni kwa mahitaji data yako. Na hapa unaweza kuona historia kutambaa yako wa kila kitu kwamba umefanya crawled. Na nyie unaweza kwenda nyuma, ishara ya juu, kucheza karibu na njia zote mbalimbali ambayo unaweza kurekebisha na kutumia data zako. Kimono inaweza kuweka juu kwa scrape viungo ndani ya viungo. Na ungependa kufanya hivyo na kugema orodha ya viungo, na kisha kutumia kwamba API kama kuruka mbali uhakika kwa ajili API mwingine kwamba kujenga script. Lakini hiyo ni ngumu zaidi kuliko nini tunakwenda kupata katika leo. Hivyo hiyo ni Kimono. Tutaweza majadiliano juu ya faida na hasara za Nokogiri na Kimono. Nokogiri, ni kweli kwa haraka. Ni rahisi kwa mtihani. Unaweza tu unaweka chochote console, rahisi configure. Unaweza kuamua nini hasa unataka scrape na kuhifadhi. Hakuna ukurasa mipaka. Mimi kwa kweli kutumika kwa scrape kama 1800 tovuti ya Afrika Kusini shule kwa barua pepe kwa vitendo kwamba mimi alivyofanya. Hivyo hiyo ni iwezekanavyo, ingawa utendaji bora itakuwa kugawa up script. Kwa sababu kama inashindwa, basi huwezi kupata kitu chochote. Lakini kama wewe kufanya mia, labda 200 kurasa wakati huo, basi una baadhi ya nafasi ya angalau kupata ni piecemeal, hasa kama una biashara mbaya. Kwa bahati mbaya inaweza tu scrape HTML. Hivyo kama una dynamically kubeba pages-- na mimi itabidi kuonyesha mfano kama Kayak katika pili Nokogiri kwa bahati mbaya Huwezi scrape hiyo. Lakini Kimono pia ni rahisi kutumia. Kama wewe aliona, ni kimsingi uhakika na click. Ni inaweza scrape JavaScript. Kwa bahati mbaya, kuna upeo kwa jinsi kurasa nyingi unaweza scrape. Wakati mwingine ni kidogo ngumu configure. Ni anapata kuchanganyikiwa. Lakini ni dhahiri kitu ya kuzingatia kama wewe si kujaribu kuwa na super imara maintainable scrape. Kama unataka tu kupata kila kitu mbali ya ukurasa haraka, kisha Kimono ni kweli chombo nzuri ya kutumia. Na kama nilivyoeleza hapo awali, kuna kipengele juu ya Kimono kwamba inaonyesha jinsi ya kupata HTML kipekee kipengele, ambayo ni super muhimu hata kama wewe ni kufanya kazi katika Nokogiri. Hivyo kama sisi kwenda Kayak tovuti, kwa mfano, unaweza kuona kuna is-- au labda huwezi kuona. Lakini kama mimi kuonyesha URL kwa Kayak, hii kwa kweli ni tu chanzo URL. Hii ni URL kabla ya kuwa iliyopita na chochote JavaScript scripts kuwa wana kinachoendelea. Na ni kwenda kuangalia tofauti kutoka akikagua kipengele. Hivyo kama wewe kwenda kwa njia na wewe match up Kukagua kipengele kificho kwa kificho chanzo, ni kweli kwenda kuwa tofauti. Na hii ni kimsingi kwa nini Nokogiri Huwezi scrape maeneo dynamically kubeba. Kwa sababu Nokogiri ni kugema chanzo URL, ambapo Kimono ni kweli kugema nini wewe kimsingi kuona katika Teule kipengele. Hivyo kama mimi kwenda kwa njia na mimi kujaribu na Kimonofy Kayak, Mimi kweli anaweza kwenda kwa njia ya na kuchagua bei. Ni vigumu kidogo, na katika kesi hii, ni kweli kuona bei hii kama tofauti na haya. Hivyo ambapo unaweza configure-- au kama hii walikuwa si dynamically kubeba, unaweza configure Nokogiri kupata yote haya. Kwa sababu formatting ni kidogo tofauti kwa orodha hii kama ni ikilinganishwa na wengine wao, na unaweza kuona hapa ni kweli wamekwenda na kuchaguliwa zote ndege bei. Labda mimi unataka kuchagua wakati wa ndege pia. Na siwezi kwenda kwa njia na aina ya configure hiyo. Sitaki hiyo. Mimi nataka tu wakati ndege ujao. Na kisha baada ya wanandoa wa haya kwenda kwa, anapata picha. Hivyo Kimono ya pretty smart. Ni tu si kabisa kama imara. Kuna baadhi ya wengine mbadala kwamba unaweza kutumia. Na mimi nitakuonyesha yao hapa. Kama ni vizuri zaidi katika Chatu badala ya Ruby labda, kuna maktaba uitwao Mzuri supu. Unaweza kutumia hiyo. Ni sawa na Nokogiri. Ina chache makala zaidi. Unaweza kupata HTML tag na kisha hoja juu au hoja sideways. Kuna PyQt. Hii kweli anaweza scrape nguvu maeneo, kwa sababu ni aina ya ni WebKit kwamba anajifanya kuwa browser bila kuna kweli kuwa browser. Hivyo itakuwa kusubiri kwa wote JavaScript kupakia kwanza, na kisha kwenda katika na kujaribu na scrape tovuti. Kama unataka fimbo na Ruby, wewe unaweza kwenda ngazi moja juu kutoka Nokogiri. Unaweza kutumia Capybara kwa Poltergeist kanga. Na hii inaweza kweli kimsingi kufanya kitu kimoja kama PyQt, ambayo ni kuwa hii ni WebKit. Ni kusubiri kwa JavaScript kupakia kwanza. Kama Fiddle karibu na hayo kutosha, unaweza hata kupata kwa bonyeza juu ya mambo. Hivyo kama kuna kiungo kwamba si classic href ambapo njia ni urahisi, na ni baadhi kitu JavaScript kwamba hutambua click, unaweza kweli kufanya hivyo. Maktaba maarufu zaidi kuiga user ni katika JavaScript, ambayo ni PhantomJS. Hii inaweza wazi scrape nguvu maeneo kwa sababu hii ni kimsingi kujifanya kuwa Chrome bila interface user. Na kisha, bila shaka wengi imara, lakini madogo zaidi chaguo, ni automatisering Selenium browser. Na kwa bahati mbaya, wewe si kwenda kuwa uwezo wa kufanya hivyo ndani ya CS50 yako IDE. Kwa sababu kimsingi ni nini Je, ni buti up Chrome yako, Firefox, browser chochote kwamba unataka kutumia, na ni tracks labda panya yako harakati, chochote aina katika, na ni aina tu ya automates mchakato huu. Hivyo ilitengenezwa kama aina ya tovuti automatisering kupima chombo. Lakini mengi ya watu kutumia Selenium scrape tovuti kuwa wao vinginevyo na mengi ya ugumu kugema na baadhi ya hizi nyingine, kwa kasi zana. Hivyo hiyo ni yote Mimi nimepata kwa mtandao kugema. Kuwa na furaha. Watazamaji: Swali. ROBERT KRABEK: Ndiyo. Watazamaji: Je, kuna utaratibu wa hash tovuti hivyo nilikuwa kimsingi kwenda kwa njia hiyo baadaye. ROBERT KRABEK: Naam. Hivyo sisi kuweka, katika yetu mfano, kwa wote wawili, sisi kuweka tovuti nzima katika doc. Na hivyo unaweza kweli tu kuchukua kutofautiana doc na kuandika ni kwa file. Hivyo kama nilitaka, mimi naweza kuandika ni nje kama faili HTML, na kisha badala ya kutumia OpenURI na ombi curl, basi mimi naweza tu kufungua doc HTML na kisha kutafuta kwa ajili hiyo. Watazamaji: Lakini unaweza kuhifadhi aina ya uzoefu online wakati wewe kufanya nje ya mkondo. Kwa mfano. wakati uko kuruka kwa saa kadhaa, Nataka kimsingi archive tovuti nzima. [Inaudible] ROBERT KRABEK: Yeah, hiyo ni exactly-- hivyo literally nini hii ni kufanya ni ni kuchukua kila kitu hiyo inaweza kuwa katika URL hii. Hivyo kama sisi mbio curl, ni kuchukua yote ya HTML huu, na ni hifadhi hiyo ndani ya doc kutofautiana. Hivyo basi unaweza kufanya chochote unataka kufanya na doc. Unaweza pato kwa faili. Watazamaji: Lakini si zimeunganishwa. Siyo nguvu. Siyo kujirudia, sawa? Unaweza kuona nini namaanisha? Mimi nina kujaribu kimsingi aina ya hash tovuti nzima kwenye gari yangu ngumu ili niweze kimsingi kufanya hivyo kwa masaa kadhaa bila ya mtandao. ROBERT KRABEK: Haki. Hivyo kama mimi had-- hivyo ambapo ni faili yangu I / O? Hivyo hii ni faili I / O. Hivyo kusema badala ya hii, mimi wito craigslist.html hii. Ningependa kufungua kwamba up. Ningependa unaweka doc ndani yake. Mimi karibu faili. Na kisha tu kwa sababu CS50 IDE ni juu ya wingu, hiyo ni chochote. Siwezi kwenda hapa. Siwezi kupakua faili. Na kisha kwamba itakuwa kwenye gari yangu ngumu. Hivyo unaweza kufanya hivyo kwa njia hiyo. Au kama wewe ni nyumbani, si kwa kutumia CS50 IDE, kama Mtukufu au kitu, hii ni hata rahisi, kwa sababu hii yote ni inapatikana ndani ya nchi, si amefungwa kwa mtandao. Watazamaji: Mimi naona. Hii ni kwa tatizo moja tu. Je, unaweza kufanya hivyo recursively ili uweze kwenda tabaka kadhaa aina ya ndani ya jambo? ROBERT KRABEK: Mimi unaweza kushusha folders pia, kama kwamba ni nini wewe ni kuuliza. Watazamaji: Naam. ROBERT KRABEK: Moto.