[MUSIC nagpe-play] ROBERT KRABEK: Hello, guys. Ang pangalan ko ay Robert Krabek, at Ako ay nagtuturo sa iyo guys kung paano upang simutin ang web sa Nokogiri, na kung saan ay isang Ruby library, at kimono, kung saan ay extension ng Chrome. Kaya may unang isang ilang mga bagay na kayo maaaring gawin kung marahil ka nakapunta ginagawa ang lahat ng psets sa ngayon at ang iyong workspace ay pagkuha ng isang maliit na puno. Maaari naming talagang pumunta lamang at lumikha ng isang bagong workspace para sa iyo upang gawin lamang ng isang bagong-bagong proyektong in. Kaya't kung ikaw ay nais na magpatuloy nagtatrabaho sa CS50 template ID na kasalukuyang mayroon, huwag mag-atubili, at maaari mo lamang install Nokogiri may CFLAGS equals-- gem install nokogiri. Ngunit kung hindi man ipapakita ko sa iyo paano mag-set ng bagong up ng isa. At pagkatapos na ito ay mahalagang bumababa pa gulong ng pagsasanay. At ikaw ay coding na kung ikaw ay lamang coding sa Sublime o isang bagay. Kaya kung ang paglilipat namin ito sa. Kaya sabihin na ito ay ang iyong kasalukuyang CS 50 ID. Maaari kang pumunta lamang sa Cloud9 dito. Maaari kang pumunta sa iyong dashboard. Ito ay dapat ilabas ang tab Workspaces. At pagkatapos ay maaari mong i-click lamang dito, Lumikha ng isang Bagong workspace. Pangalanan ang iyong bagong workspace, siguro pagsubok, o nagi-scrap. At pagkatapos ay i-click ang custom na tab dito, sa halip ng mga tab na mga template CS50. At pagkatapos ay maaari mo lamang pumunta at lumikha ng isang bagong workspace. Na ako ay gumawa nang isang workspace dito. Kaya gagawa kami sa mga ito. At kung ikaw ay lumikha ng isang bagong workspace kaya sa tab Custom, maaari mong i-type lamang gem install nokogiri, na kung saan ay hindi pagpunta dito. OK, ito ay isang maliit na frozen. Ngunit maaari mong i-type nokogiri gem install. At iyon ay dapat na ang lahat na doon ay upang ang pag-install. Tulad ng sinabi ko bago, kung hindi ka pa rin nagtatrabaho sa iyong CS50 template ID, kailangan mo lamang na mag-type CFLAGS katumbas nokogiri gem install. At mayroon akong naka-install ito dito kaya hindi ko gagawin iyon. Ngunit para sa mga sumusunod na kasama, mag-atubili na gawin ito. Kaya sa sandaling nakuha mo ang iyong Nokogiri workspace o library na naka-install, Pupunta ako upang bigyan ka ng isang maliit na piraso ng isang crash kurso sa Ruby syntax dahil Nokogiri ay isang Ruby library. Kaya kailangan mo upang malaman ang ilang mga pangunahing Ruby syntax para sa mga nagtatrabaho sa Nokogiri. Kaya ang ilang mga pangunahing pagkakaiba mula sa kung ano ang nakasanayan mong marahil kung kayo ay nagtatrabaho sa ngayon sa loob lamang C at PHP, ipinapahayag mo variable na walang mga uri. Hindi ka gumagamit ng mga semicolon, na kung saan ay uri ng isang kaluwagan. Walang mga panaklong ngayon sa paligid para sa o habang loop, halimbawa. Ikaw lamang ang isang bloke ng code, at pagkatapos mong ilagay end sa dulo ng mga iyon. Walang plus plus o minus minus, kaya lang malaman na kapag para sa ikaw ay gumagawa para sa mga loop, lang plus equals at minus katumbas. At sa halip ng hash isama, ang gagamitin mo ay nangangailangan ng at pagkatapos ay kahit anong library sinusubukan upang i-load sa iyong programa. Ruby ay hindi isang naipon wika. Kaya na ang isa pang relief. Ito ay mas katulad sa PHP kung saan ito ay isang interpreted wika. Maaari kang magpatakbo ng anumang Ruby script na sumulat ka sa sinusundan Ruby sa pamamagitan ng pangalan ng iyong script o program. Upang maging tanda na ito ay isang programa Ruby, tapusin mo lang ito sa .rb halip ng c. At may mga variable sized array sa Ruby, na kung saan ay sobrang maginhawa kapag ikaw ay scrape at marahil gusto upang maidagdag data na iyong scraped sa isang array. Hindi mo na kailangang mag-malloc isang bagong array at kopyahin ang mga lumang array sa bagong array. Maaari mong ikabit lang sa ang dalawang palatandaan arrow. At walang mga karakter, may solong sulat string. Kaya na ay dapat na isang maliit na mas madali. Kaya kami na lang bigyan ka ng ilang mga halimbawa ng ilang mga pangunahing Ruby syntax. Kaya dito maaari mong makita na sa halip ng ang slash slash, upang magbigay ng puna sa Ruby, ikaw lamang gamitin ang pound sign. At pagdeklara ng variable, ikaw i-type lamang ang mga variable na katumbas kahit anong gusto mo ang mga variable na. Maaari silang maging mga string. Maaari kang magkaroon ng array, na kung saan paramihin mo na may halaga. naglalagay at mga kopya ay katulad. Para sa aming mga layunin, ang pagkakaiba lamang ay talagang na naglalagay, na ang ibig sabihin naglalagay, lamang naglalagay ng isang bagong linya karakter sa anumang ikaw ay pag-print. Kaya kung bigyan kami ng isang maliit na demonstration dito, maaari naming patakbuhin ang with-- buksan ang isang bagong terminal. Maaari mong makita ang lahat ng mga ito mga file na nasa aking terminal. At kung ako ay tatakbo lamang Ruby, rubi intro.rb, ito inilalagay ang limang Kamusta Mather, Quincy, Carrier. Adams. Kaya na ang lahat ng may sa deklarasyon array. Madla: Robert, maaari kang gumawa ng ang iyong font sa isang maliit na mas malaki? ROBERT KRABEK Oo. At maaari kong mag-zoom in dahil hindi ka maaaring mag-zoom in sa terminal font malas. Kaya na kung paano mo i-print variable sa iyong terminal. Maaari mo ring gamitin variable sa loob ng isang string. Kaya kamakailan sa PHP, baka may natutunan na string agaw. Kaya't kung ikaw ay kumuha ng isang tumingin dito, kung ako Ipinahahayag tatlong variable, pangalan, library, at wika, at ako naglalagay, ako magsulat ng isang string, hello ang aking pangalan ay. At pagkatapos ay sa halip na ang PHP bersyon ng string agaw na kamukha ng kaunti pa tulad nito, ikaw ay may isang pound sign, at pagkatapos ay isang kulot suhay, at pagkatapos ay ang pangalan ng variable. At na kung paano nais mong i-print, sabihin, ano man ang pangalan ng variable ay. At pagkatapos ay maaari mo ring pagdugtungin string. Ruby ginagawang sobrang madali sa mga plus sign. Ikaw lamang ang isang string sa kaliwa kasama ang isang variable o isa pang string kasama ang isang string. Kaya kung i-print ko na ito out, ito ay dapat na sabihin lang Hello, ang aking pangalan ay Robert. Ako ay pagtuturo nokogiri mo sa Ruby. At ipaalam lamang kumpirmahin na na ay sa katunayan ang case-- rubi intro. Hello, ang aking pangalan ay Robert. Ako ay pagtuturo nokogiri mo sa Ruby. Paglipat sa, kung ibang mga pahayag, ito ay isang maliit na naiiba mula sa kung ano ang maaari mong gamitin upang kung ikaw ay nagtatrabaho sa C. Hindi mo na kailangan ang mga panaklong. Hindi mo na kailangan ang kulot tirante. At sa halip ng ibang tao kung, ito ay isang concatenated elsif. Kaya sa dito, kung iyong ipinahayag ko x up dito, tulad ng maaari naming makita, x pa rin ang 5. Kaya kung ang x ay mas mababa sa 3, makikita ito ilagay maliit. Kung ito ay mas mababa kaysa sa 7, medium, iba malaki. Kaya 5 ay isang medium numero. At tapusin ko ang bloke ng code sa dulo. Ito ang aking para sa loop. At ang syntax na ito ay isa ring bahagyang naiiba. Ang 0 hanggang limang mahalagang lamang ay deklarasyon ng isang array ng 0 hanggang 5. Kaya mayroong limang mga puwang sa array. At pagkatapos ay para sa bawat slot sa na array, ako ay incrementing i. Kaya dapat ito i-print 0 hanggang 5, o sa 0 hanggang 4. At ito ay dapat i-print medium. At kukunin ko na lang magdingas sa pamamagitan ng. Ikaw guys ay magkakaroon ng access na ang code na ito sa susunod. Kaya maaaring tumakbo sa iyo guys na ito sa inyong sarili. Kaya ito ay ang iyong pangunahing habang loop. Ito ay lamang ay pag-print ng j, incrementing sa pamamagitan ng 1 hanggang maabot namin 5. Super mabilis na crash course Ruby sa kung paano magsulat ng isang function. Sa halip ng, sabihin nating, int factorial number, may def lang namin. At mahalagang ikaw pagtukoy ng isang function dito. Ito ay magiging ang pangalan ng function, at ito ang anumang mga variable na kayo nais na pumasa sa mga function. Maaari kang magkaroon ng kung ang mga pahayag sa loob. Maaari kang bumalik. Sa kasong ito, hindi namin pagtukoy ng isang recursively ipinatupad factorial function. Kaya tumawag lang namin function sa Ruby tulad nito. Kaya kung tinukoy ko na ito, ako maaaring tumawag factorial, ipasa sa 3, at pagkatapos ay 3 ay ang bilang variable na maaari kong gamitin sa loob ng mga function. At ito to_s ay magkakaroon lamang ng bumalik halaga ng factorial sa isang string. Kung hindi man ito ay magtapon isang error na nagsasabi oh, ako Hindi maaaring i-print ang isang string dahil bilang mong tandaan, naglalagay ay ilagay string dahil ito factorial ay ibabalik ang isang numero. Kaya maaari convert namin na sa isang string tulad tulad. At sa kabaligtaran, maaari mo ring i-convert isang string sa isang integer na may to_i. Kaya paggawa ng sobrang simple lahat ng bagay, kung comment ko lang ito out, i-save ang at patakbuhin ang factorial function. Kami ay dapat ma upang makita ang na factorial ng 3 ay 6. At iyon ay sa katunayan totoo. Kaya na ang iyong pag-crash kurso sa Ruby. At ngayon na alam mo Ruby, maaari naming pumunta sa sa mga pangunahing Nokogiri scrape set up. Totoo lahat ng kailangan mong gawin ay, sa Ruby, ay nangangailangan ng mga aklatan. At para sa aming mga layunin kami ay magiging gamit ang library OpenURI pati na rin Nokogiri. At pagkatapos ay kung ano ang iyong do-- at makikita ito ibigay sa iyo ang syntax para this-- ay binuksan mo ang URL ng mas maraming bilang ng gagawin mo sa isang kulot na kahilingan, na ang ibig sabihin C URL. Kaya maglaan ka ng URL ng ang website na pinag-uusapan. Tindahan mo ito sa isang variable. At pagkatapos ay maaari kang maghanap sa pamamagitan ng na variable para sa mga natatanging mga tag na HTML gamit ang CSS command. At pagkatapos ay maaari mong output ang nilalaman o kahit saan mo gusto. Maaari kang magsimula sa isang database. Maaari mong output sa isang file, o kahit i-print lamang ito sa screen. Kaya ipapakita namin sa iyo ng isang pangunahing scraper. Kaya dito maaari mong makita ang mayroon kami nangangailangan nokogiri, nangangailangan ng open-uri. Ang iyong basic set up, sabihin tumawag ito dokumento o doc, katumbas Nokogiri :: HTML bukas, kung saan ay ang utos na ibinigay sa amin sa pamamagitan ng OpenURI library. At kami ay naghahanap, para sa mga ikaw na maaaring nakatira sa patyo sa loob, para sa mga bisikleta na nasa Boston nakalista sa seksyon ng Boston Craigslist bike site. Kaya't kung hindi ka pamilyar may kulot, kukunin ko na lang magpapakita sa iyo ng tunay na mabilis na kung ano ang kulot ay gawin. Kung gusto ko upang makakuha ng lahat ng mga URL mula sa ang site Craigslist, kung nagta-type ako curl, lungkot ito lamang ang lahat ng mga URL mula sa mga bicycle site Craigslist papunta sa aking terminal. Iyan ay hindi partikular na kapaki-pakinabang dahil hindi ako nais na manu-mano ang pumunta sa pamamagitan at hanapin ang bagay na ako ay naghahanap para sa. Ngunit lamang upang maaari mong makita na talagang ako gamit ang tamang code, kung titingnan mo sa URL para sa Craigslist sa bikes-- para sa ilang mga dahilan na ito ay hindi natagpuan. Kung tumingin ka sa pahinang ito at titingnan mo ang URL, ito ay dapat na kapareho ng magkulot request na ako magpadala lamang. At sa katunayan, iyon ay kung ano ang pagiging naka-imbak sa mga variable doc. Kaya kapag ikaw ay bumalik sa aming code, kami ay maaaring pagkatapos ay gumana sa mga variable na ito doc sa pamamagitan ng paggamit CSS. Kaya sinasabi ko nais na makakuha ng lahat ng mga ang mga tag na span.txt, at ang lahat ng isang tag sa loob ng na tag. At kung bakit maaaring gusto naming gawin ito, ikaw ako marinig sigaw? Kung Siyasatin namin Element, ito ay nagbibigay sa iyo ng isang listahan ng kung paano ang mga URL ay nakaayos. Kung mag-scroll ko pababa sa pamamagitan ng dito, maaari mong makita ang kung ano ang bawat isa sa mga iba't-ibang kumakatawan sa mga elemento. Kaya marahil ay gusto kong i-access ito partikular na elemento. Kaya gumagamit ako ng Chrome developer mga kasangkapan upang Siyasatin ang Elemento. Maaari ko bang makita rito na ito ay isang isang tag sa loob ng isang span i-tag sa isang klase ng mga txt. Kaya ito ay makakakuha ng sa aming unang operasyon na kung saan ay doc.css span, kung saan ay ang tag na Naghahanap ako ng loob ng lahat ng URL na ito. At pagkatapos .txt nagpapatakbo ng marami tulad CSS ginagawa kapag sumusulat ka lang CSS sa iyong mga file ng HTML pagtukoy ng isang class. Kaya ito partikular na operator ay tukuyin ang isang span tag na may klase ng txt. At pagkatapos ay kung iwan ako ng space, ito ay pagkatapos ay pumunta sa loob ng na tag at pagkatapos ay hanapin ang isang isang tag sa loob na. Kaya kung inilagay ko na lang ito sa ang terminal, ang dapat kong ay maaaring makita ang mahalagang lahat ng bagay na nasa loob ito span ng mga klase txt. Kaya bibigyan namin na ang isang go. rubi craigslist-scraper. At sa katunayan na nagbibigay sa amin ng lahat ng mga tag ng iba't-ibang mga listahan na ang nasa pahina Craigslist. Kaya kung pumunta namin pabalik, maaari naming i-on ito sa isang bagay na higit pa sa isang maliit na kapaki-pakinabang. Siguro gusto lang namin ang mga link. Dahil sa loob ng tag na ito, bibigyan ko rin may hyperlink ng path na ang pahinang ito papunta sa. Kaya kung titingnan mo ang code na ito dito, kung ano ang kailangan kong gawin ay sa halip ng CSS, Maaari ba akong pumunta at_css. At ito ay lamang makuha ang unang elemento ng lahat ng mga bagay. Kaya kung ako ay upang gawin up na sa code ko lang dati nagpakita, sa halip na bumalik sa lahat ng mga ito, gagawin ito lamang ibalik ang unang isa sa mga iyon. Kaya na kung paano gumagana ang at_css operator. Kaya gusto namin upang i-imbak ang landas ng lahat ng unang tag. At dahil isang ay magbibigay sa amin a-- kaya kami ay pagpunta pa rin ninyong gamitin css. Ngunit dahil ito ay upang mabigyan amin pabalik sa isang buong hanay ng mga tag, kami ay pagpunta sa pag-access ang unang elemento. Kaya ito ay isa pang paraan na maaari mong ma-access ang anumang mga partikular na elemento na kung ikaw magkaroon ng isang hanay ng mga elemento na ay bumalik, dahil maaari mong ituring ang anumang bagay na css nagbabalik bilang isang array, mahalagang. At pagkatapos kami ay pagpunta upang ma-access ang hypertext reference katangian ng mga ito. Kaya't kung ikaw ay kumuha ng isang pagtingin, kung Ikaw ba ay tumingin talagang malapit dito, kung ikaw mahalagang lamang tingnan ang URL bar, ito ay ang landas na ikaw ay pagpunta sa ma-scrape. Kaya kung tumakbo lang namin ito muli, at tiyakin na nai-save namin ito. Maaari mong suriin sa bahay. Ito ang tunay na tumutugma up sa link na ito. Kaya bakit maaaring gusto naming gamitin ang mga ito? Kung nais mong simutin ang mga pahina at ito ay may isang pahina ng mga link tulad ng Craigslist ay, ikaw maaaring gusto mong pumunta pagkatapos sa bawat isa sa mga link na iyon at pagkatapos ay simutin ang nilalaman ng mga iyon, na kung saan ay kung ano mismo ang kami ay pagpunta sa gawin. Kaya sa sandaling mayroon ka ng landas bilang variable, hindi ko na talaga pag-aalaga tungkol sa pag-print ito. Kailangan ko lang mag-imbak ito bilang variable. At pagkatapos ay ako maaaring ma-access ng iba pang pahina sa parehong paraan na access ko doc sa unang lugar. Maliban sa mga URL, kami ay pagpunta gamitin string agaw tulad ng ako ay naglalarawan sa Ruby mas maaga sa upang isama daan patungo sa katapusan ng root. Kaya kung ano ito ay pagpunta sa gawin ay ito ay pagpunta sa ilagay sa path na ako nasimot dati at pagkatapos ay i-na sa isang bagong item, kahit anong gusto mong tumawag it-- first_listing, halimbawa. Ngunit ako pagpunta sa iwanan ito sa item para sa ngayon, dahil na ay kung ano ako gamit dito. Kaya sinasabi ko nais upang makakuha ang paglalarawan sa mga unang pag-post sa Craigslist. Kaya bumaba ako dito. Gusto ko mag-click sa Siyasatin ang Elemento muli, dahil ito ay ang paglalarawan. Gusto kong pumunta down dito at tingnan kung ko mahahanap ang kung paano ko maaaring ma-search para sa mga natatanging tag. At sa kasong ito, ito ay may isang ID, na hahantong sa amin sa aming mga susunod na paraan ng paghahanap para sa mga tag, na kung saan ay may isang hashtag. Kaya para sa mga klase, maaari mong gamitin ang tuldok operator. Kaya txt ay tumutukoy sa isang klase ng txt, samantalang ang hash tumutukoy sa isang ID. Kaya sa kasong ito, ang mga tag ay seksyon, at ang ID ay postingbody. Kaya ito napupunta at hahanap ang first-- dahil kami gamit at_css-- ito napupunta at nahahanap ang unang elemento na pagdating up sa mga tag ng seksyon at ang ID ng postingbody. At pagkatapos ay maaari mong ma-access ang mga elemento ng teksto ng mga item na ibinalik sa .text. At pagkatapos ay maaari kaming mag-imbak na sa paglalarawan. Kaya ngayon na kami ay may isang paglalarawan variable, maaari naming magawa, sabihin nating, maghain I / O. Kaya mag-file I / O sa Ruby ay katulad na katulad sa file ko / O sa C kung saan naming buksan ang isang file. Maaari naming magsulat dito. At pagkatapos ay gagamitin namin isara file na iyon. Kaya dito, lang kami sa pagbibigay ng pangalan sa mga maghain, ang ilang mga di-makatwirang variable. Kami rin ay may lamang ilagay ang mga ito dito. Kami ay may isang variable na namin ang pag-iimbak mga bukas na file tulad ng may File.open. At kami ay sumusulat upang file na ito, kaya bukas na namin ito sa mga w operator. At pagkatapos ay inilalagay namin ang string sa magharap sa .puts operator. At pagkatapos ay inilalagay namin ang mga variable na tayo nais na magsulat sa mga file sa loob na. At pagkatapos isara lang namin ang mga file. Kaya kung pumunta kami magpatuloy at patakbuhin ito, ito ay dapat gumawa ng isang dokumento may description.txt na kung saan ay magkaroon ng ganitong paglalarawan sa loob nito. Kaya kung nagpatakbo ako it-- no. Ito ay ginawa sa isang text file na may, sana, ang mga parehong bagay. Kaya doon ay maaaring isang bagong pag-post na dumating up habang ako ay pakikipag-usap. At sa katunayan mukhang nagkaroon. Kaya kung pumunta kami sa ito klasikong bike, 1962-1966, na tila upang tumugma sa. At doon ka pumunta. Kaya na ang pinaka-basic pag-andar ng nagi-scrap. Maaari kaming magkaroon sa halip ng lamang sa pagsusulat sa talaksan na ito, maaari naming magdagdag ng mga bagay-bagay sa isang array. Kaya kung Ipinahahayag ko tatlong array, pamagat, presyo, at paglalarawan. At kami ay operating sa doc item ngayon. Maaari naming pumunta sa pamamagitan at hanapin ang lahat ng mga span.txt. At tandaan, nagbabalik ito ng isang array ng lahat ng mga item na ito na nahahanap. At pagkatapos ay sa Ruby, maaari mo lamang gamitin ang .Ang bawat upang umulit sa pamamagitan ng bawat item ng array. At pagkatapos ay para sa bawat item, Lamang ako ng pagpunta sa tawag na ito ng isang link, dahil na mahalagang kung ano ito ay. Kaya kung ko bang ilagay ang bawat link.css dot a.hdrlnk, ito ay tunay na pagpunta sa link at paghahanap sa loob ng link na iyon sa isa pang HTML element at kaukulang class. Kaya kung namin matandaan kung ano ito ay, ang span.txt, maaari mong makita- halina akin lamang pabalik real quick-- loob span.txt kami ay may isang pulutong ng iba pang mga klase. Kaya sa loob span.txt, naghahanap kami para sa isang isang tag na may isang klase hdrlnk. Kaya ipaalam mahanap ako lamang na para sa inyo guys tunay na mabilis. Kaya maaari mong makita dito, ito ay isang isang tag na sa loob ng maikling panahon ng klase ng txt na may klase hdrlnk. At iyan ay sa katunayan kung ano kami ay sinusubukan upang makakuha ng. Kaya ngayon kami ay sinusubukan upang mag-imbak ang lahat ng ng mga link sa loob ng mga pamagat. At pagkatapos kami ay pagpunta upang i-print ang bawat isa sa mga link na iyon. Hindi Pasensya na. Kami ay pagpunta upang i-print out ang presyo ng bawat isa sa mga iyon. Ni patakbuhin ang talagang Kaya sabihin mabilis at tingnan kung ano ang ginagawa nito. Kaya ito talaga lang nagpunta sa pamamagitan ng bawat isa sa mga link naman, na-access ang mga tag sa mga tanong, at pagkatapos ay nakuha sa labas ng presyo. At ginawa nito iyon dahil matapos mayroon kang lahat sa title, lamang na naka-imbak namin ang pamagat doon. Lamang na naka-imbak namin ang link sa loob ng pamagat array. At sa ito para sa loop na operasyon, kung saan sa halip ng pagpunta sa a.hdrlnk, kami ay naghahanap ng isang span.price. Kaya kung maaari ko lang talaga mabilis na mahanap ang presyo, kung siyasatin mo ang element, makikita mo na ito ay isang span sa klase ng presyo. At iyan ay mahalagang kung paano ang nakukuha namin ang presyo doon. Kaya iyon ang talagang basic kaso ng nagi-scrap. Iyon ay kung paano ka ng lahat ang mga elemento sa isang pahina na, sabihin nating, na alam mo ang URL ng. Kaya kung gusto naming upang makakuha ng isang kaunti pa sa lalim, maaari naming simutin pahina sa loob ng mga pahina. At para sa mga halimbawa na ito, kukunin ko maging outputting sa isang CSV file. Kaya ako na nangangailangan ng csv up dito dahil Ruby ay hindi, sa loob mismo, Walang pagganang sa makatarungan output CSV file. Kaya na sobrang simple. Hayaan pumunta lamang sa akin sa susunod. Sakop namin file I / O. Kaya ito ay katulad ng kung paano ito sa C. At bago lumipat kami sa Kimono, Kukunin ko na lang ipakita na tunay na mabilis na kung paano upang simutin site na kabilang sa mga pasyalan. Kaya na natutunan namin kung paano upang magpahayag ng array sa Ruby. Kaya lang ako deklarasyon ng isang grupo ng mga arbitrary mga array na ako ay pag-iimbak ng data sa loob. doc ay operating sa parehong paraan tulad ng ginawa nito sa nakaraang file. Kami ay pagpunta sa, paghahanap bawat isa sa mga span.txt ni. Alam na namin na. Iyon ay ang lalagyan sa loob kung saan ang bawat isa link ay ang lahat ng data na gusto namin. Kaya dito kung ano ang aming ginagawa ay para sa bawat isa link ng span class txt, kami ay pagpunta sa at kami ay sa paghahanap ng isang tag, paghahanap ng unang elemento ng iyon. Tandaan, nagbabalik css isang array, kaya hindi maaaring lamang ma-access mo ito bilang ay. Kami ay pagpunta upang mahanap ang unang elemento. Kahit na ito ay isang array ng isa item, kailangan mong gamitin ang syntax na ito, at pagkatapos ay hilahin ang href attribute. Kaya ginawa namin ito nang mas maaga. Kaya ito ay dapat mukhang pamilyar. At kaya ngayon kami ay may isang array tinatawag na mga landas ng lahat ng aming mga link na namin ang pagpunta sa gusto mong gamitin. Kaya kung kami ay may array na ito ng lahat ng ng mga landas na gusto naming gamitin, pagkatapos ay maaari naming lumikha ng isang item para sa bawat ng mga pahinang iyon kapag binuksan namin ang page na iyon. Kaya bilang rin nakita namin sa ang syntax bago, kung saan paggawa ng string agaw sa path dito, kaya ang syntax ay para lamang sa path. At maaari ko bang pangalanan ito variable anumang arbitrary pangalan. Ito ay ang mahalagang isa. Ito ay ang array na makikita mo maging pag-access ng bawat elemento. Ngunit kapag sinabi mong para sa landas sa landas, ang ibig sabihin nito para sa bawat elemento sa landas, tumawag ito path, at gamitin iyon. Ito ay mahalagang tulad ng kapag ikaw gawin ang isang para sa loop at gumamit ka ng int i. Kaya maaari mong ituring ang mga landas bilang mga variable na incrementing. At pagkatapos ay para sa bawat isa sa mga iyon, pumunta sa bawat isa sa mga link na iyon. Dahil kami ay nag-iimbak ito sa pahina item, kaya kami ay ang paglikha ng isang bagong pahina sa bawat oras namin ma-access ito. At pagkatapos ay sa loob ng na bagong pahina, hanapin span.postingtitletext, span.price, at pagkatapos seksyon # postingbody. Na sakop namin ang seksyon na # postingbody kapag kami ay tumingin sa paglalarawan. Kaya maaari naming pumunta makita sa Craigslist post, kung ikaw ay lamang ng pagtingin sa mga pamagat, maaari mong makita ito dito, span postingtitletext. At iyon ang dahilan kung bakit ito ay may. At pagkatapos ay para sa mga presyo, maaari kang i-access ito sa span class ng presyo. Kaya marahil din namin na baka nais na tindahan ng mga URL. Kaya makikita lamang tumakbo namin ito muli, tindahan ito sa isang array, dahil kung ikaw ay naghahanap sa Craigslist, ikaw ay marahil pagpunta sa gusto ng isang paraan upang, kung nakikita mo ang isang bagay na kawili-wili sa iyo, bumalik sa site na iyon. Kaya gusto mo lamang na mag-imbak ang URL para sa kapakanan ng mga sanggunian. Ito ay mahalagang lamang ibang syntax para sa para sa loop. Maaari ko paths.each lamang sa halip ng para sa landas sa landas na may index. At ang syntax na ito ay Ruby for-- landas ay kung ano ang ginawa namin dito, deklarasyon ng variable para sa bawat item. At index behaves tulad ng ang i sa C para sa loop. Kaya maaari mong subaybayan ng kung ano ang index ay. Kaya dito ay lamang ng isang maliit na maginhawang bagay para kapag ikaw ay nagpapatakbo ng mga scraper. Kung ikaw ay nagi-scrap ng daan-daan ng mga pahina, tiyakin na ito ay hindi nakikipag-hang, ito ay output lang, Ako sa pag-access ang pahinang ito, at siguraduhin na ang ito ay patuloy pa rin. Ngunit para sa aming mga layunin, dahil mayroong isang daang mga item, Pupunta ako upang ma-access lamang ng tatlong ng mga ito upang hindi tayo mauubusan ng oras dito. Ngunit bago makuha namin sa na, lamang ako pagpunta sa magpapakita sa iyo talagang mabilis, Ako ay outputting ang pamagat, presyo, paglalarawan, at mga URL ng bawat isa sa mga link na na nasimot ko. At pagkatapos ay ito lamang ang syntax para sa mga library CSV. Binuksan mo ang isang CSV. Ito ay kung ano ako pagpunta sa tawag na ito. Buksan ito sa write do. At pagkatapos CSV ay ang file na ikaw ay inputting ang lahat ng bagay sa. Ito ay lamang ng isang katinuan suriin para sa ipakilala mo sa akin na ito ay tumatakbo. At ito ay ang aking katinuan check upang malaman na ito ay nakumpleto. Kaya ako ng paglalagay ng pamagat sa isang hilera sa ang CSV, presyo, url, paglalarawan, lahat sa mga hilera sa CSV. Kaya kung pumunta kami at run ito now-- at ako lamang siguraduhin na sa halip na-save ko it-- ng lang outputting ito sa terminal, tayo ay dapat magkaroon ng isang CSV file na ginawa. Kaya dito maaari naming makita ang CSV file na na-produce. Ito ay ang output ng tanawin na ako lang tumakbo. Tulad ng iyong nakikita dito, page 0, 1, 2, 3 access. Ito ang mga pamagat, mga presyo, mga paglalarawan. At kung tinitingnan namin ang CSV file na iyong binuo namin, maaari mong makita outputted nito dito. Ito ay hindi Excel, kaya ito ay hindi format sa hanay at haligi. Ngunit maaari mong isipin kung paano maaaring ito ay na-format. CSV ibig sabihin para sa comma separated values. Kaya maaari mong isipin ito ay maaaring maging isang hilera. At sa bawat kuwit gagawin ipahiwatig ang isang magkahiwalay na haligi. Lamang ng isang salita ng caution-- minsan ikaw ay scrape bagay na may isang pulutong ng mga kuwit. Kaya't kung ikaw ay outputting ito sa isang CSV file, maaaring ito ay hindi output ang paraan maaari mong isipin. Kaya na mahalagang lahat doon ay upang scrape basic HTML mga pahina na may Nokogiri. Kaya ang internet pagkatao makabagong bilang na ito ay magkaroon ng na may isang mas awtomatiko at GUI bersyon, kahit na mas mahusay na bersyon ng nagi-scrap ng mga iba't-ibang mga website. At para sa aming mga layunin Kukunin ko ay nagpapakita extension ng Chrome na tinatawag na kimono. At ang lahat ng kailangan mong gawin ay mag-navigate ka sa pahina na gusto mong simutin. Click ka sa isang larangan ng interes. Calibrate mo ang mga patlang, dahil ito ay awtomatikong tuklasin kung ano ang sa tingin nito gusto mong ma-scrape, at pagkatapos ay lumikha ka lamang ng isang API. Kaya kung kami ay upang ipakita ang mga ito sa Craigslist, ito ang tunay na ay hindi gumagana. At ito ay kung ano ang nangyayari ako pabalik sa sinasabi tungkol ito hindi bilang matatag. Ito ay may problema sa paglikha ng API. Ngunit bilang isang demonstration ng kung ano ang nais gawin ito, kung i-install mo ang extension ng Chrome, lahat ng gagawin mo ay i-click ito. Ito Kimonofies pahina, at pagkatapos ay sa iyo mag-click sa bagay na nais mong script. Kaya kung ako ay upang mag-click sa na, ito ay i-highlight kung ano ang sa tingin nito gusto kong maging scrape off pahinang iyon. Kaya siguro ako tawag na ito ng listahan. Ito ay kung gaano karaming mga item na napili ko. At ko makukumpirma lamang o tanggihan ang ilang mga ng iba pang mga iminungkahing mga listahan upang makakuha ng ito upang idagdag sa ano ay nasimot. Kaya ngayon maaari naming makita doon ang nakapili ng isang daang mga aytem. Kung gusto kong magkaroon ng isa pang field na ako simutin din na kung saan ay may kaugnayan sa mga ito, sabihin na gusto kong simutin ang presyo pati na rin, pagkatapos ay maaari kong gawin ang parehong. Kaya dito ay isang pagpapamalas ng kung paano ito ay higit na mas mababa matatag, dahil ngayon ito ay tumatawag sa lungsod sa halip na lamang ang presyo na gusto ko. At ngayon ito ay kinuha ang 200 na mga bagay. Maaari kang bumalik at tanggalin. Maaari mong subukang muli. Ngunit walang garantiya. Ito ay kung paano kung minsan ito gumagana. Tulad nang nakikita mo dito, ngayon sinasabi nito 96 up dito. Ito ay kinuha ang karamihan ng mga link na nais mong i-scrape, ngunit hindi kinakailangan ang lahat ng mga ito. Isa pang kapaki-pakinabang na tool ng kimono bagaman ay maaari kang pumunta sa Advanced Features dito, pumunta sa Advanced, at ito ay magpapakita sa iyo ang breakdown ng mga natatanging paraan upang ma-access ang HTML tag na gusto mong simutin. Kaya para sa listahan, kung pagtingin mo dito, kung na-access mo span p div span a, Maaari mong aktwal na gamitin lamang na ito sa iyong Nokogiri code, kung saan bago namin ay span.txt upang ma-access ang bawat isa sa mga listahan. Kung gusto ko lang ang text sa loob ng mga listahan, Kaya kong input div space p space span space span space a, at ito ay makamit ang parehong epekto. At para sa mga mo na interesado sa paggamit ng mga regular na expression, ito ang mangyayari na din sa iyo ang regular sort pagpapahayag ng string na input upang mahanap ang mga bagay-bagay sinusubukan mong hanapin. Kaya may isa pang magaling na tampok ng kimono kung saan maaari kang paginate, na kung saan ay hindi lamang ang maaari kong simutin ang mga resulta ng pahinang ito, Maaari ko bang i-click sa maliit na ito button dito, pagbilang ng pahina, tukuyin ang mga button na dalhin ako sa susunod na pahina, at pagkatapos ay lamang na malaman ito na maaari itong umulit sa susunod na pahina, at pagkatapos ay simutin ang lahat ng the-- hangga't tulad ng ito ay ang parehong format ng course-- tanawin ang lahat ng mga link na iyon pati na rin. Kaya dahil kimono ay hindi nais na magtrabaho sa Craigslist, kung ano ang aming nagawa ay Kimonofied ko na ang Harvard Crimson. Na nakuha ko ang ilan sa mga uri ng top tampok na artikulo, magkaibigan dito. Sabihin ang lahat ng mga ito. Pinagsama-sama ko na ito API para sa iyo maagang ng panahon. Ngunit kung hindi man kung ano ang gusto mong gawin ay gusto mo lamang i-click ang Tapos na. Ipasok ang iyong mga detalye API. Itakda ito upang mag automated o manwal crawl. Kaya maaari mong i-update ang iyong data sa bawat 15 minuto, lingguhan, araw-araw, kahit anong gusto mo. Pangalanan ang iyong API. Lumikha ng API. Para sa iyong pakinabang, na aking nilikha ang Pulang-pula front page API na. Kaya gumawa ka na lamang ng isang account sa kimono, at ito ay mag-imbak ang lahat ng iyong mga API para sa iyo. Kaya mahalagang na ang lahat ng iyong hiwalay na iba't ibang mga scrapes. Kaya't kung tiningnan namin dito, ito ay ang opinyon ng mga link na iyong nakolekta ko. Ito ay ang mga tampok na mga link na iyong nakolekta ko. At ang mga ito ay ang pinaka-read mga link na iyong nakolekta ko na ito mula sa pinakahuling tanawin API. Kaya kung maaari mong makita dito, mga ito ay ang mga tampok na, mga ito ay ang mga opinyon, na sa halimbawang ito, Pinagsama ko na ang lahat ng mga ito sa isang koleksyon. Ngunit kung i-play sa paligid mo lamang sa mga ito isang maliit na piraso, maaari mo itong maghiwalay at hatiin ito gayunpaman gusto mong hangga't bilang ang pag-format ay bahagyang naiiba. Just upang i-play sa paligid na may ito, ang set up ng pag-crawl, ang isa sa mga downsides ay maaari mo lamang i-crawl up sa 25 mga pahina sa isang pagkakataon. Iyon ang isa sa mga takda sa mga kadahilanan. Ngunit dito, kung itinakda mo ito sa manu-manong pag-crawl, ito kung paano mo maaaring sabihin dito upang i-update ang iyong data. At dito maaari mong makita ang iyong kasaysayan ng pag-crawl ng lahat ng bagay na iyong na-crawl. At ikaw guys maaaring bumalik, mag-sign up, play sa paligid sa lahat ng mga iba't-ibang paraan na maaari mong baguhin at gamitin ang iyong data. Kimono ay maaaring itakda ng hanggang sa simutin ang pispis link sa loob ng mga link. At gusto mong gawin ito sa pamamagitan ng unang scrape ng isang listahan ng mga link, at pagkatapos ay gumagamit na API bilang tumalon off point para sa ibang API na kayo ay gumawa ng script. Ngunit iyon lamang ang mas kumplikado kaysa sa kung ano ang namin ang pagpunta upang makakuha ng sa araw na ito. Kaya na kimono. Susubukan naming makipag-usap tungkol sa mga kalamangan at kahinaan ng Nokogiri at kimono. Nokogiri, ito ay talagang mabilis. Ito ay madali na subukan. Maaari mo lamang naglalagay ng anumang bagay na console, madaling i-configure. Maaari kang magpasya kung ano mismo ang gusto mong simutin at tindahan. Walang mga limitasyon page. Ako tunay na ginamit ito upang simutin tulad 1800 South African websites school para sa mga email para sa isang internship na aking ginawa. Kaya na maaari, kahit na ang pinakamahusay na kasanayan ay upang maghiwalay ang script. Dahil kung ito ay nabigo, at pagkatapos ay hindi mo makuha ang anumang bagay. Ngunit kung gagawin mo sa isang daan, siguro sa 200 mga pahina sa isang pagkakataon, pagkatapos ay mayroon kang ilang mga pagkakataon ng hindi bababa pagkuha ng ito unti-unti, lalo na kung ikaw ay may masamang internet. Sa kasamaang palad ito ay maaari lamang simutin HTML. Kaya kung mayroon kang dynamic na load pages-- at kukunin ko na ipakita sa iyo ng isang halimbawa tulad ng Kayak sa isang second-- Nokogiri kasamaang-palad hindi maaaring simutin iyon. Ngunit kimono ay madaling gamitin. Bilang na nakita mo, ito ay mahalagang isang point at click. Maaari itong simutin JavaScript. Sa kasamaang palad, may isang maximum sa kung gaano karaming mga pahina na maaari mong simutin. Minsan ito ay isang maliit na mahirap na i-configure. Ito ay makakakuha ng nalilito. Ngunit ito ay tiyak isang bagay upang isaalang-alang kung hindi ikaw ay sinusubukan upang magkaroon ng isang super magagaling maintainable scrape. Kung gusto mo lamang upang makakuha ng off ng isang pahina ng mabilis ang lahat ng bagay, pagkatapos kimono ay isang tunay na mahusay na kasangkapan upang gamitin. At bilang ko nabanggit bago, may mga advanced na tampok ng kimono na nagpapakita sa iyo kung paano mag ma-access ang mga natatanging HTML elemento, na kung saan ay sobrang kapaki-pakinabang kahit kung ikaw ay nagtatrabaho sa Nokogiri. Kaya kung pumunta kami sa site Kayak, para sa Halimbawa, maaari mong makita doon is-- o baka hindi mo makita. Ngunit kung ipakita ko sa iyo ang mga URL para sa Kayak, ito ay talagang lamang ang source URL. Ito ay bago ang URL sa pagiging binago ng kahit anong JavaScript script na pagpunta sa. At ito ay pagpunta sa iba't-ibang anyo mula inspecting ang element. Kaya kung pumunta ka sa pamamagitan ng at ikaw tumugma up ang Siyasatin ang Elemento code sa source code, ito ay talagang pagpunta sa iba. At ito ay mahalagang bakit Nokogiri hindi maaaring simutin dynamic na load sites. Dahil Nokogiri ay scrape ang source URL, samantalang kimono ay talagang scrape ano ka talaga nakakakita sa Pumili ng Element. Kaya kung pumunta ako sa pamamagitan ng at ako subukan at Kimonofy Kayak, Maaari ko talagang pumunta sa pamamagitan ng at piliin ang mga presyo. Ito ay isang maliit na mas mahirap, at sa kasong ito, ito ay aktwal na nakikita ang presyo bilang naiiba mula sa mga ito. Kaya kung saan maaari mong configure-- o kung ito ay hindi dynamic na load, maaari mong i-configure ang Nokogiri upang makakuha ng lahat ng mga ito. Dahil ang pag-format ay bahagyang iba't-ibang para sa listahang ito tulad ng ito ay kumpara sa iba ng mga ito, at makikita mo dito tunay na ito ay wala na at napiling lahat ng mga presyo na flight. Siguro gusto kong piliin oras ng flight pati na rin. At ako ay maaaring pumunta sa pamamagitan at uri ng isaayos iyon. Hindi ko nais na. Gusto ko lang ng oras ang susunod na flight ni. At pagkatapos ay pagkatapos ng ilang mga pagpunta sa pamamagitan ng, ito ay makakakuha ng mga larawan. So pretty smart kimono ni. Ito lang ang hindi lubos na matatag na. May ilang iba pang alternatibo na maaari mong gamitin. At ipapakita ko sa iyo ang mga ito dito. Kung kayo ay mas kumportable sa Python halip ng Ruby siguro, mayroong isang library tinatawag na Maganda Soup. Maaari mong gamitin na. Ito ay halos kapareho sa Nokogiri. Ito ay may ilang mga mas maraming mga tampok. Maaari mong mahanap ang isang tag na HTML at pagkatapos ay ilipat pataas o ilipat patagilid. May PyQt. Ito ay maaaring aktwal simutin dynamic mga site, dahil ito ay isang uri ng ay isang WebKit na nagpapanggap na isang browser na walang tunay na may pagiging isang browser. Kaya ito maghintay para sa lahat ng mga JavaScript upang i-load muna, at pagkatapos ay pumunta sa at subukan at simutin ang site. Kung nais mong i-stick sa Ruby, ikaw maaaring pumunta sa isang antas up mula Nokogiri. Maaari mong gamitin ang Capybara sa isang Poltergeist wrapper. At ito ay maaaring aktwal na mahalagang gawin ang parehong bagay bilang PyQt, na kung saan ay ito ay isang WebKit. Ito naghihintay para sa JavaScript upang i-load muna. Kung malakas sa paligid mo sa mga ito sapat, maaari ka ring makakuha ng mga ito upang mag-click sa mga bagay. Kaya kung may isang link na ay hindi isang klasikong href kung saan ang landas ay madaling ma-access, at ito ay ang ilang mga bagay JavaScript na nakita isang pag-click, maaari mong talagang gawin iyon. Ang mas popular library upang gayahin ang isang user ay nasa JavaScript, na kung saan ay PhantomJS. Ito ay maaaring malinaw naman simutin dynamic site na ito dahil ito ay mahalagang pagpapanggap ng Chrome wala ang mga user interface. At pagkatapos ay, siyempre ang pinaka matatag, ngunit pinakamabagal na opsyon, ay isang automation Siliniyum browser. At sa kasamaang palad, hindi ka na magiging magawa ito sa loob ng iyong CS50 IDE. Dahil mahalagang kung ano ito ay ay ito boots up ang iyong Chrome, Firefox, kahit anong browser na gusto mong gamitin, at ito track marahil ang iyong mouse kilusan, kahit anong type mo sa, at ito lamang ang uri ng automates ang proseso na ito. Kaya ito ay binuo bilang isang uri ng testing tool automation website. Ngunit ng maraming mga tao ang gumagamit Siliniyum upang simutin mga website na kung hindi man sila ay magkakaroon ng isang pulutong ng mga kahirapan scrape sa ilan sa mga iba pang, mas mabilis na mga tool. Kaya na ang lahat nakuha ko para sa web kudkod. Magsaya. Madla: Tanong. ROBERT KRABEK Oo. Madla: Mayroon bang isang mekanismo sa hash ang website sa gayon maaari mong talaga pumunta sa pamamagitan ng ito sa susunod. ROBERT KRABEK: Oo. Kaya naming ilagay ang, sa aming Halimbawa, para sa pareho ng mga ito, ilalagay namin ang buong website sa doc. At kaya maaaring aktwal na ikaw lang ang dadalhin variable doc at isulat ito sa isang file. Kaya kung nais kong, maaari ko isulat ito bilang isang HTML file, at pagkatapos ay sa halip ng paggamit OpenURI at isang kulot kahilingan, pagkatapos ay maaari ko bang buksan up lang doc HTML at pagkatapos ay maghanap para sa mga iyon. Madla: Ngunit maaari mong mapanatili ang ang mga uri ng online na karanasan habang ginagawa mo offline. Halimbawa. kapag ikaw ay paglipad para sa ilang oras, Gusto ko na talaga archive ang buong website. [Hindi marinig] ROBERT KRABEK: Oo, na exactly-- kaya literal kung ano ito ay ginagawa ito ay ang pagkuha ay ang lahat ng bagay na magiging sa URL na ito. Kaya kung nagpatakbo namin kulot, ito ay pagkuha ng lahat ng mga ito HTML, at ito ay pag-imbak nito sa loob ng variable doc. Kaya pagkatapos ay maaari mong gawin ang anumang gusto mong gawin sa mga doc. Maaari mong output ito sa isang file. Madla: Ngunit hindi ito naka-link up. Ito ay hindi dynamic. Ito ay hindi recursive, di ba? Makikita mo kung ano ang ibig sabihin ko? Sinusubukan ko na talaga ang uri ng isang hash ang buong website sa aking hard drive kaya na talaga ko maaaring gawin ito para sa ilang mga oras na walang internet. ROBERT KRABEK: Kanan. Kaya kung had-- ko kaya kung saan ang aking file I / O? Kaya ito ay ang file I / O. Kaya sabihin sa halip ng mga ito, tawagan ko ito craigslist.html. Gusto ko buksan na up. Gusto ko inilalagay doc sa mga ito. Isinara ko ang file. At pagkatapos lamang dahil ang CS50 IDE nasa ulap, na kahit na ano. Maaari ba akong pumunta dito. Maaari ko bang i-download ang file. At pagkatapos na magiging sa aking hard drive. Kaya maaari mong gawin ito na paraan. O kung ikaw ay nasa bahay, hindi gamit ang CS50 IDE, tulad ng kahanga-hanga o isang bagay, ito ay mas madali, dahil ito ay ang lahat ng magagamit na lugar lamang, hindi nakatali sa internet. Madla: nakikita ko. Ito ay para sa isang partikular na problema. Maaari mong gawin ito recursively upang ikaw pumunta ilang mga layer ng malalim uri ng bagay? ROBERT KRABEK: Maaari ko bang i-download ang mga folder pati na rin, kung na kung ano ang iyong hinihingi. Madla: Oo. ROBERT KRABEK: Cool.