[Музички] РОБЕРТ KRABEK: Здраво, момци. Моето име е Роберт Krabek, и Јас ќе ви учењето момци како да се изгребе веб со Nokogiri, која е библиотека Руби, и Кимоно, што е продолжување Хром. Значи прво постои неколку работи кои што можете да направите ако Можеби сте биле прават сите psets досега и вашиот работен простор е добивање малку полна. Ние всушност може само оди и се создаде нов простор за вас само да се направи сосема нов проект во. Па ако не сакаат да продолжат работа во проект дефиниција CS50 дека во моментов имаат, се чувствуваат слободни, и може да се само инсталирате Nokogiri со CFLAGS equals-- дијамант инсталирате nokogiri. Но инаку јас ќе ви покажам како да поставите нова нагоре. И тогаш тоа е во суштина паѓајќи повеќе обука тркала. А ти си кодирање како да сте биле само кодирање во Високата или нешто. Значи, ако ние го префрли во текот. Така велат дека ова е вашата сегашна CS 50 проект. Вие само може да оди Cloud9 тука. Можете да одат на семафорот. Тоа треба да се донесе до табот работните површини. А потоа можете да кликнете тука, се создаде нов работен простор. Именува вашиот нов простор, можеби тест, или стружење. И потоа кликнете на овој обичај табот тука, наместо табот CS50 шаблони. А потоа ќе може да оди и да се создаде нов простор за работа. Јас веќе се создаде простор за работа тука. Па ние ќе се работи со ова. И ако се создаде нова работна површина, така со јазичето прилагодено, можете да напишете дијамант инсталирате nokogiri, што не се случува тука. Добро, тоа е малку замрзнати. Но, можете да напишете дијамант инсталирате nokogiri. И дека треба да биде сето тоа постои со инсталацијата. Како што реков претходно, ако сте уште работат во вашата CS50 дефиниција проект, вие само треба да напишеш CFLAGS еднаква дијамант инсталирате nokogiri. И јас сум веќе се инсталирани тоа тука, па јас нема да го стори тоа. Но, за оние кои по заедно, се чувствуваат слободни да го стори тоа. Значи откако ќе го имаме вашиот Nokogiri простор или библиотека инсталиран, Одам да ви даде малку на несреќата се разбира во Руби синтакса бидејќи Nokogiri е библиотека Руби. Па ќе треба да знаете некои основни Руби синтаксата за работа со Nokogiri. Па така некои основни разлики од она што сте навикнати да ги можеби ако сте биле работат досега во само Ц и PHP, ви се декларираат променливи без тип. Што не го користат на точка-запирки, која е вид на олеснување. Нема загради сега околу за или додека петелки, на пример. Вие само треба блок од код, и потоа ќе се стави крај на крајот на тоа. Нема плус плус или минус минус, па само знам дека кога што го правиш за петелки, само плус и минус еднакви рамноправни. И наместо тоа на хаш вклучуваат, ќе користите, а потоа бараат што и се обидува библиотека да се вчита во вашата програма. Руби не е компајлирана јазик. Па тоа е друга помош. Тоа е повеќе сличен на PHP каде тоа е препознаена јазик. Можете да го стартувате некој Руби скрипта која ти пишувам со Руби проследено со името на вашата скрипта или програма. Да значи дека тоа е програма со Руби, можете само да го заврши со .rb наместо .C. А тука се и променлива големина на низи во Руби, што е супер лесен кога сте стружење и можеби ќе сакате да се додаде податоците што сте ги добиеше во низа. Вие не мора да се Примерок нова низа и копија на старата низа во новата низа. Вие само може да се додаде со двете стрелки знаци. И нема знаци, има само еден жици писмо. Така што треба да биде малку полесно. Па ние само ќе ви даде некои примери на некои основни Руби синтакса. Па тука може да се види дека наместо коса црта коса црта, да коментира во Руби, само користење на знакот фунтата. И променлива декларација, ќе само тип на променлива еднаквите што и да сакате променливата да биде. Тие можат да бидат жици. Ќе може да има низа, која ви населуваат со вредности. става и отпечатоци се слични. За нашите цели, Единствената разлика е навистина што го става, која се залага за става, само го става нова линија карактер на она што сте печатење. Значи, ако ние даде мал демонстрација тука, можеме да ја извршите оваа with-- отвори нов терминал. Можете да ги видите сите овие додадени фајлови кои се во мојата терминал. И ако јас само се кандидира Руби, рубин intro.rb тоа, гаси пет Здраво Mather, Квинси, оператор. Адамс. Значи, тоа е сè што постои за прогласување на низи. ПУБЛИКАТА: Роберт, можете да направите вашиот фонт малку поголем? РОБЕРТ KRABEK: Да. И можам да зумирате, бидејќи не можете зумирате во терминал фонтови очигледно. Па тоа е како да се печати променливи во вашиот терминал. Можете да ги користите променливи внатре во низа. Така неодамна во PHP, сте го научиле дека постои низа интерполација. Значи, ако се погледне тука, ако јас прогласи три променливи, име, библиотека, и јазикот, и јас се става, јас напише низа, Здраво, моето име е. А потоа, наместо на PHP верзија на стринг интерполација кој изгледа малку повеќе, како таков, имате една фунта знак, а потоа кадрава голема заграда, а потоа името на променливата. А тоа е како што би се печати, да речеме, без оглед на името на променливата е. И тогаш ќе може, исто така, concatenate жици. Руби го прави супер лесно со знакот плус. Вие само треба еден стринг на левата плус варијабилен или некој друг збор и низи. Значи, ако јас печати ја оваа надвор, што треба само да се каже Здраво, моето име е Роберт. Јас ќе биде настава ви nokogiri во Ruby. И ајде да потврди дека тој навистина е case-- рубин интро. Здраво, моето име е Роберт. Јас ќе биде настава ви nokogiri во Ruby. Преселба на, ако друго извештаи, тоа е малку различен од она што може да се користи за да се ако сте биле работат во В. Вие не треба загради. Вие не треба на големите загради. И наместо тоа на друго место, ако, тоа е споена elsif. Па овде, ако сум го прогласи x нагоре тука, како што можеме да видиме, x е уште 5. Значи, ако x е помалку од 3, тоа ќе се стави мал. Ако тоа е помалку од 7, средни, големи друго. Па 5 е медиум број. И јас се стави крај на овој блок од код со крај. Овде е мојот за телефонска линија. И оваа синтакса е исто така малку поинаква. Од 0 до пет само во суштина е прогласување на низи на 0-5. Значи има шест места во низа. А потоа за секој слот во таа низа, јас ќе бидам јас ја зголемува. Па ова треба да се печати 0-5 или 0-4. И ова треба да се печати медиум. И јас само ќе беснеат низ. Вие момци ќе имаат пристап со овој законик подоцна. Па вие момци можат да ја извршите оваа себе. Значи ова е твојата основна додека јамка. Ова ќе биде само на печатење ј, ја зголемува од 1 до 5 ние хит. Супер брз Руби несреќата се разбира за тоа како да се напише функција. Наместо, да речеме, int факториел број, ние само треба дефиниција. И во суштина сте дефинирање на функција овде. Ова се случува да биде името на функцијата, и ова е сите променливи што ќе сакате да го помине во функција. Ќе може да има ако изјави во рамките. Може да се врати. Во овој случај, ние сме дефинирање на рекурзивно спроведува факториел функција. Па ние само повик функции во Руби се допаѓа ова. Значи, ако сум го дефинира ова, јас може да се јавите факториел, да помине во 3, а потоа и 3 ќе биде променлив број што ќе можам да се користи во рамките на функцијата. To_s и ова е само вртење на се врати вредноста на факториел во низа. Инаку ова ќе фрли грешка велејќи ох, не може да се печати string-- бидејќи, како што се сеќавам, става е ставен string-- бидејќи ова факториел се врати на број. За да можеме да го конвертирате дека до жиците како такви. И обратно, исто така можете да го конвертирате стринг во цел број со to_i. Така правејќи сè супер едноставен, ако јас само се коментира ова, да заштедат и да ја стартувате факториел функција. Ние треба да биде во можност да се види дека факториел од 3 е 6. И тоа е навистина точно. Па тоа е вашата несреќата се разбира во Руби. И сега дека знаете Руби, ние може да се оди на на основните Nokogiri стружење постави. Суштина се што треба да направите е да, во Руби, да бараат на библиотеките. И за нашите цели, ние ќе бидеме со користење на библиотека OpenURI како и Nokogiri. А потоа она што do-- и тоа ќе го ви даде синтакса за this-- е ќе се отвори многу URL-то како што би во навивам барање, што претставува С URL-то. Па ве однесе на URL-то на веб-сајтот во прашање. Вие чувајте го на променлива. А потоа можете да пребарувате низ кои променлива за единствена HTML тагови користење на .css команда. А потоа можете да излез на содржината на секаде каде што сакате. Можете да почнете да во нашата база. Можете да излез во датотека, или дури и само да ги печатите на екранот. Па ние ќе ви учат основните стругалка. Значи тука можете да видите ние сме бара nokogiri, бараат отворен URI. Твојата основна поставеност, ајде го нарекуваат документ или документ, е еднаква на Nokogiri :: HTML отворен, што е команда доставени до нас од страна на OpenURI библиотека. И ние ќе се бараат, за оние од вие, кои би можеле да живеат во четири, за велосипеди, кои се наведени во Бостон на делницата велосипед Бостон Craigslist страница. Значи, ако не сте доволно запознаени со навивам, јас само ќе ви покаже вистински брз што ќе направи навивам. Ако сакав да ги добиете сите од URL-то од сајтот Craigslist, ако сум тип навивам, тоа само исфрлување на сите URL-то од велосипед страницата на Craigslist на мојот терминал. Тоа не е особено корисно бидејќи јас не сакате рачно да одат преку и најдете нешто што го барам. Но, само така може да се види дека јас сум всушност користење на правото код, ако се погледне во URL-то за Craigslist во bikes-- поради некоја причина тоа не е пронајден. Ако се погледне на оваа страница и ќе се погледне на URL-то, ова треба да биде идентична со навивам барање дека само што ги испраќате. И навистина, тоа е она што се се чуваат во променлива doc. Значи, кога ќе се вратиме на нашиот код, ние тогаш може да работи на овој doc променлива со користење на .css. Така да се каже јас сакав да ги добиете сите од тагови кои се span.txt, и сите на тагови во рамките на таа ознака. И зошто можеби сакаме да да го направите ова, слушам плачеш? Ако ние Увид елемент, тоа ви дава дефект на тоа како е структурирана на URL-то. Ако јас дојдете долу преку Тука може да се види она што секој од овие различни елементи претставува. Па можеби и јас сакам да пристапите ова особено елемент. Затоа, јас сум со користење Хром инвеститорот алатки за да ги провери Елемент. Јас може да се види дека ова овде е ознака во распон ознака со класа на txt. Па ова добива на нашите Првата работа која е doc.css век, што е ознака што Јас сум во потрага за сето ова во рок од URL-то. А потоа и .txt работи многу како CSS прави кога сте само пишување CSS во вашиот HTML датотеки со одредување на класа. Па овој конкретен оператор ќе наведете еден распон таг со класа на txt. А потоа, ако јас се остави простор, тогаш ова ќе одиме во тој таг а потоа се најде во рамките на таа ознака. Значи, ако јас само се стави ова на терминалот, што требаше можете да видите се што е во суштина што е во рамките на овој временски период на класа txt. Па ние ќе му даде зелено светло. рубин Craigslist стругалка. И навистина, кој ни дава сите од овие ознаки на различни огласи кои се на страната Craigslist. Значи, ако ние одиме назад, ние може да го претвори ова во нешто малку повеќе корисни. Можеби сакаме само линковите. Затоа што во рамките на оваа ознака, јас исто така ќе имаат хиперврска на патеката дека оваа страница оди. Значи, ако се погледне на овој код овде она што јас ќе го направиме е наместо .css, Јас може да оди at_css. И тоа само ќе ја добие првата елемент на сите тие работи. Значи, ако јас се да го направи тоа нагоре во код Јас само претходно покажа, наместо да се вратат сите ова, тоа само би се врати на првата еден од нив. Значи тоа е како функционира оператор at_css. Значи, ние сакаме да го сочувате пат сите на првата ознака. И поради тоа што ќе ни даде a-- па ние сме уште се случува да се користи .css. Но, бидејќи тоа се случува да се даде ни назад цела низа на тагови, ние ќе се обидеме да го пристап првиот елемент. Значи, ова е уште еден начин на кој може да се да пристапите на некој одреден елемент, ако имаат низа на елементи дека се враќа, бидејќи може да се третираат нешто што .css враќа како низа, во суштина. И тогаш ние ќе треба да пристапите на хипертекст референца атрибут на овој. Значи, ако се погледне, ако сте виделе навистина блиску тука, ако само во суштина погледнете во бар URL-то, тоа е патот кој си оди за да се стружење. Значи, ако ние само се кандидира ова, повторно, и бидете сигурни дека ние сме го спаси. Може да се провери во домот. Ова, всушност, се совпаѓа со овој линк. Па зошто ние би можеле да сакате да го користите ова? Ако сакате да се изгребе страната и има страница на линкови како Craigslist прави тоа, ќе Можеби ќе сакате да се оди тогаш во секоја од тие врски а потоа одвај содржината на тоа, што е токму она што ние ќе треба да се направи. Па кога си патот како променлива, јас повеќе не навистина се грижи за тоа печатење. Јас само треба да се чува, како променлива. А потоа можам да пристапите до друг страница на ист начин да влезам doc, на прво место. Освен со URL-то, ние ќе да се користи низа интерполација како да сум опишувајќи во Руби порано за да се додаде на патот до крајот на коренот. Значи она што ова се случува да направите е да се ова ќе се стави на патот дека јас ќе добиеше претходно а потоа се претвори дека во нова точка, она што сакате да јавете it-- first_listing, на пример. Но јас ќе одам да ја напушти тоа на точка за сега, затоа што тоа е она што јас сум со користење тука. Така велат дека сакав да се добие описот на првиот објавување во Craigslist. Па јас ќе одат надолу тука. Јас ќе кликнете на Увид Елемент повторно, бидејќи ова е опис. Би одат надолу тука и да видиме ако можам да најдам како би можел да биде во можност да направите пребарување за овој уникатен таг. И во овој случај, тоа е лична карта, која не води до нашиот следен начин на барање за тагови, што е со хаштагот. Па за класи, можете да користат операторот точка. Па .txt се одредува класата на txt, со оглед на тоа хаш одредува лична карта. Значи во овој случај, етикетата е секција, а проект е postingbody. Значи ова оди и проигрува на first-- бидејќи ние сме користење at_css-- ова оди и наоѓа на првиот елемент кој влегува со ознака на секција и проект за postingbody. А потоа можете да пристапите до текстот елемент на таа ствар се врати со .text. И тогаш може да се сместат дека во описот. Па сега дека ние имаме променлива опис, ние би можеле да бидат во можност да се направи, да речеме, датотека I / O. Така датотека I / O во Руби е многу слична на датотека I / O во C, каде што се отвори датотеката. Ние би можеле да пишува на него. А потоа ќе се затвори таа датотека. Па еве, ние сме само именување на file, некои произволни променливи. Ние, исто така може да имаат само стави ова овде. Имаме една променлива, дека ние сме чување Отвори датотека, како и со File.open. И ние сме пишување до оваа датотека, така што можеме да го отвори со w оператор. А потоа го ставаме во низа датотека со операторот на .puts. А потоа ќе стави променлива дека ние сакате да запишам во датотеката во рамките на тоа. А потоа ние едноставно се затвори датотеката. Значи, ако ние се оди напред и да ја извршите оваа, ова треба да се произведе еден документ со кој ќе description.txt имаат овој опис во неа. Значи, ако јас се кандидира it-- бр. Тоа е произведен на документ со, се надевам, истото. Па таму би можело да биде нова работа кој излезе додека Сум бил зборува. И навистина изгледа како таму е. Значи, ако ние се постави во овој класичен велосипед, 1962-1966, што се чини дека да се совпаѓаат. И таму да одите. Значи тоа е најосновна функционалноста на стружење. Ние би можеле да имаат, наместо само пишување на оваа датотека, можеме да додадете работи во низа. Значи, ако јас прогласи три низи, Наслов, цена, и опис. И ние сме работат на точката на doc сега. Можеме да одат преку и ги најдете сите на span.txt. И се сеќавам, ова се враќа низа на сите елементи, кои ќе го пронајде. А потоа и во Руби, вие само може да се користи .Секоја да iterate преку секоја ставка на низата. И потоа за секоја ставка, Јас сум само ќе го наречеме линк, затоа што тоа е во суштина она што е. Значи, ако јас се стави секој link.css точка a.hdrlnk, ова е всушност ќе линк и наоѓање во рамките на тој линк друг HTML елемент и соодветната класа. Значи, ако ние се сетам што се ова беше, span.txt, можете да ЈИЕ дозволете ми да се вратам вистински quick-- рамките span.txt ние имаме голем број на други класи. Па внатре span.txt, ние сме во потрага за ознака со класа hdrlnk. Значи, дозволете ми само да се најде дека за вас момци вистински брз. За да можете да ја видите тука, ова е таг тоа е во растојание од класа txt кој има hdrlnk класа. И тоа е навистина она што ние се обидуваме да се добие. Па ние сме сега се обидува да ги чува сите од тие врски во внатрешноста на насловот. И тогаш ние ќе треба да се печати на секоја од тие врски. Не Извини. Ние ќе треба да се печати цената на секоја од нив. Значи, да се кандидира тоа навистина брзо и да видиме што тоа го прави. Значи ова е само основа отиде преку секој од линковите пак, се пристапи таг во прашање, а потоа се повлече од цената. И тоа го правеше тоа, бидејќи по имате се што во насловот, ние само се чуваат титулата таму. Ние само се чуваат на врската во насловот на низата. И во оваа операција за телефонска линија, каде што наместо да одат на a.hdrlnk, ние сме во потрага по span.price. Значи, ако јас само може да се најдат навистина брзо цената, ако ви се изврши увид во елемент, ќе видите дека тоа е век со класа на цена. И тоа е во основа како ние сме добивање на цената таму. Значи тоа е навистина основните случај на стружење. Тоа е како да ги добиете сите елементите на страницата дека, да речеме, веќе знаете на рачно. Значи, ако сакаме да се добие малку повеќе во длабочина, ние може да се изгребе страници во рамките на страници. И за овој пример, јас ќе биде Ставање на CSV датотека. Па јас сум се бара CSV се тука бидејќи Руби не се случи, во себе, имаат функционалност само излез CSV датотеки. Па тоа е супер едноставен. Дозволете ми да одат на следното. Опфативме датотека I / O. Па ова е слично на тоа како што е во В. И пред да продолжат понатаму да се кимоно, Јас само ќе ви покаже колку навистина брзо да се изгребе сајтови во рамките знаменитости. Па ние веќе научил како да се изјасни низи во Руби. Па јас сум само за прогласување на куп на произволни низи дека јас ќе се складирање на податоци во рамките. doc работи на ист начин како што беше и во претходниот фајл. Ние се случува во, наоѓајќи секоја од span.txt половина. Ние веќе знаеме дека. Што е сад во кој секоја линк има сите податоци кои ги сакате. Значи тука она што го правиме е за секој линк од span class txt, ние ќе треба во и ние сме наоѓање на некоја ознака, наоѓање на првиот елемент на тоа. Се сеќавам, .css враќа низа, така што не може само да го пристап како што е. Ние ќе треба да се најде на првиот елемент. Дури и ако тоа е низа на еден точка, ќе мора да ја користите оваа синтакса, а потоа извлечете го href атрибут. Па ние го направи ова и порано. Па ова би требало да изгледа познато. И така сега имаме низа повика патеки на сите наши врски дека ние ќе треба да сакате да го користите. Значи, ако имаме оваа низа од сите од патеките кои сакаме да ги користат, тогаш може да се создаде точка за секоја на овие страници кога ќе ги отвориме оваа страница. Така како што ние, исто така, видов на синтаксата и досега, во која прави низа интерполација со патот тука, па синтаксата е само за пат. И би можел да се именува оваа променлива какво било произволно име. Ова е важно. Ова е низата дека ќе се пристапува секој елемент. Но, кога ќе се каже за патека во патеки, тоа значи за секој елемент во патеки, го нарекуваат патеката, и го користат тоа. Ова е во суштина како кога ќе направи за телефонска линија и да го користите int i. За да можете да се третираат на пат како променлива кој ја зголемува. И потоа за секоја од тие, оди во секоја од тие врски. Затоа што ние сме чување на тоа во точка страница, па ние сме создавање на нова страница во секое време можеме да го пристап. А потоа и во рамките на таа нова страница, да се најде span.postingtitletext, span.price, а потоа делот # postingbody. Ние веќе се покриени делот # postingbody кога ние погледна во описот. За да можеме да одиме да го гледаме во Craigslist пост, ако сте само да гледа во насловот, можете да ја видите тука, распон postingtitletext. А тоа е зошто тоа е таму. А потоа и за цена, можете да се приближува со span class на цена. Па ние, исто така, можеби би можеле да сакате да го меморирате URL-то. Па ние само ќе ја извршите оваа повторно, таа продавница во низа, затоа што ако сте во потрага на Craigslist, ти си веројатно нема да сакаат некој начин да, ако ќе видите нешто што ве интересира, се вратиш на овој сајт. Па вие само сакате да ги чувате URL-то за доброто референци. Ова е само во суштина друг синтакса за за телефонска линија. Само можам да ја направам paths.each наместо за на патека во патеки со индекс. И оваа синтакса е Ruby for-- Патеката е она што го правевме до тука, прогласување на променлива за секоја ставка. И индекс се однесува како Јас во C за петелки. За да можете да ги пратите на она што индексот е. Значи тука е само малку удобен работа за кога сте водење на раб. Ако сте стружење на стотици страници, да бидете сигурни дека тоа не е бесење, таа сака излез, Јас сум пристап до оваа страница, и што си сигурен дека тоа е се уште во тек. Но за нашите цели, бидејќи има стотина предмети, Одам да се пристапи само три од нив така што ние не се работи надвор од времето тука. Но, пред да се дојде до тоа, јас сум само ќе сака да покаже што навистина брзо, Јас ќе бидам Ставање на титулата, цена, опис, и URL-то на секој од линковите што сум ги добиеше. И тогаш ова е само синтакса за библиотеката CSV. Ќе се отвори CSV. Тоа е она што јас ќе одам да го наречеме. Отворете го со пишување задачи. А потоа ќе бидат во CSV датотека што сте внесување сè во. Ова е само еден разумност провери за мене да се знае дека тоа е водење. И ова е мојата разумност провери да се знае дека тоа е завршена. Па јас сум ставање титула во ред во на CSV, цена, URL, опис, во сите редови во CSV. Значи, ако ние одиме и да се кандидира оваа now-- и јас само бидете сигурни дека јас сум it-- спасени наместо само да го Ставање до терминалот, ние треба да имаат CSV датотека која е произведена. Па тука може да се види на CSV датотека и тоа е се произведени. Ова е излез на Стебло дека јас само истрча. Како што можете да видите тука, пристапува страница 0, 1, 2, 3. Ова се насловите, цените, описи. А ако се погледне на овој CSV датотека што ние сме се создава, може да се види своите outputted тука. Ова не е Excel, па тоа не е форматирана во редови и колони. Но, можете да замислите колку тоа би можело да биде форматирана. CSV залага за одвоени со запирки вредности. Па можете да замислите ова може да биде по ред. И секоја запирка би покажуваат посебна колона. Само еден збор на caution-- понекогаш сте стружење работите со многу запирки. Значи, ако сте Ставање тоа да CSV датотека, Тоа не може да излез начин што мислат. Па тоа е во суштина сите таму е да се стружење основен HTML страници со Nokogiri. Па на интернет е иновативни како што дојде со повеќе автоматизирано и GUI верзија, иако помалку стабилна верзија на стружење различни веб страници. И за нашите цели Ќе се демонстрира продолжување Хром наречен кимоно. И сè што треба да направите е да се движите на страница која сакате да се изгребе. Ќе кликнете на поле на интерес. Ви го калибрираат полиња, бидејќи тоа автоматски ќе откривање на она што го мисли сакате да се стружење, и можеш само да се создаде API. Значи, ако ние требаше да го покаже на Craigslist, тоа всушност не сака да работи. И тоа е она што ми беше да се вратам велејќи дека за тоа да не биде како стабилна. Тоа има проблеми со создавањето на API. Но како демонстрација од она што би го направил, ако го инсталирате Хром продолжување, сите да направите е да кликнете на неа. Тоа Kimonofies страницата, а потоа ќе кликнете на нешто што сакате да скрипта. Значи, ако јас се да кликнете на тоа, тоа ќе се потенцира она што го мисли сакам да биде стружење исклучите оваа страница. Па можеби и јас ова го нарекуваат огласи. Ова е како многу ставки што сте ги избрале. И јас само може да ја потврди или негира некои на други предложени огласи да се добие тоа да го додадете што ќе се добиеше. Па сега може да се види, има избрани стотина предмети. Ако сакам да имаме уште едно поле што можам исто така, се изгребе кои се поврзани со ова, каже сакам да се изгребе цената како и, тогаш можам да го стори истото. Значи тука е демонстрација на тоа како тоа е многу помалку стабилна, бидејќи сега е подигање на градот, наместо на само цената што сакам. И сега тоа е зедов 200 работи. Може да се вратиш и да го избришете. Може да се обидете повторно. Но нема гаранции. Ова е како тоа функционира понекогаш. Како што гледате тука, сега се вели 96 до тука. Тоа е подигнат темпото на линкови што сакате да се изгребе, но не нужно сите од нив. Друга корисна алатка на Кимоно иако е што можете да одат за да се напредни опции тука, одете на напредни, и тоа ќе ви покаже распаѓањето на уникатен начин за пристап на web тагови кои сакате да се изгребе. Така и за листите, ако го погледнете овде, ако го гледате div стр распон опфаќаат, што всушност може да се само користење ова во вашиот Nokogiri код, каде што, пред да ја span.txt за пристап до секој од огласи. Ако само сакате текстот во рамките на огласи, Можев внесување div простор стр простор распон простор распон простор, и тоа ќе се постигне истиот ефект. И за оние од вас кои се заинтересирани со користење на регуларни изрази, тоа се случува да се, исто така, ви даде редовни изразување вид на стринг за да го внесете да се најде она што сте се обидува да се најде. Значи има уште една кул особина на кимоно каде што можете да paginate, која не е само можам да се изгребе резултатите на оваа страница, Јас може да кликнете на ова мало копчето тука, бројот на страници, наведете го копчето што ќе одведи ме на следната страница, и потоа тоа само ќе знаат дека тоа може да iterate на следната страница, а потоа одвај сите the-- додека како што тоа е ист формат на разбира Стебло сите тие врски, како и. Кимоно па затоа не сака да работат со Craigslist, што направивме е Сум Kimonofied Харвард Кримсон. Сум го извади некои од вид на Топ избрани статии, потврди тука. Велат дека сите овие. Јас сум пишување на API за вас пред време. Но инаку што ќе направиш е едноставно ќе кликнете Done. Внесете ги Вашите податоци во API. Поставете го на било кој автоматизирани или рачни лази. Па може да се ажурира вашиот податоци на секои 15 минути, неделно, дневно, што сакаш. Именува вашиот API. Создаде API. За вас, јас сум создаден Crimson насловната страница на API веќе. Така да треба само да се создаде сметка на кимоно, и тоа ќе ги чува сите ваши API-јата за вас. Значи во суштина тоа е сите ваши одделни различни гребење. Па ако гледаме тука, ова е мислења линкови што сте ги собрале. Овие се вклучени линкови што сте ги собрале. И овие се најчитани линкови кои собрав од овој најновите API Стебло. Па ако може да се види тука, тие ќе бидат вклучени, тие ќе бидат мислења, кој во овој пример, Сум ги комбинираат сите во една збирка. Но ако сте само се позанимавам со неа малку, можете да го разделуваат и го поделат сепак сакате да се додека како форматирање е малку поинаква. Само да се позанимавам со ова, ползи постави, еден од downsides е што само може да ползи нагоре до 25 страници во еден момент. Тоа е еден од ограничувачките фактори. Но, еве, ако го поставите во прирачникот индексирање, ова е како можете да го кажам за да обновите вашите податоци. И тука можете да ја видите вашата историја ползи на сето она што сте го запиша. А вие момци можат да се вратат, се регистрирате, позанимавам со сите на различни начини дека можете да менувате и да ги користат вашите податоци. Кимоно може да се постави за да се одвај врски во рамките на линкови. И ќе го стори тоа од страна на првите стружење листа на линкови, а потоа со помош на тој API како скокаат исклучување точка за уште API што ќе се создаде на сценариото. Но, тоа е многу покомплицирано отколку она што ние ќе треба да се влезе во денес. Значи тоа е кимоно. Ние ќе разговараме за добрите и лошите страни на Nokogiri и кимоно. Nokogiri, тоа е навистина брзо. Тоа е лесно да се тестираат. Вие само може да се става ништо конзола, лесно да ги конфигурирате. Можете да одлучите што точно сакате да се изгребе и продавница. Не постојат граници страница. Јас всушност го користи за да се изгребе како 1800 Јужна Африка училишен веб-сајт за пораки за стажирање што ја добив. Значи тоа е можно, иако најдобра практика ќе биде да се подели на сценариото. Бидејќи ако тоа не успее, тогаш да не добие ништо. Но, ако не сто, можеби 200 страници во еден момент, тогаш може да има некои шанси за најмалку добивање на тоа парче, а особено ако имате лоша интернет. За жал тоа може да се изгребе само HTML. Значи, ако имате динамички вчитани pages-- и јас ќе ви покажам еден пример како кајак во second-- Nokogiri жал не може да се изгребе тоа. Кимоно но исто така е лесен за употреба. Како што видовте, тоа е во суштина точка и клик. Тоа може да се изгребе JavaScript. За жал, постои максимум до колку страници може да се изгребе. Понекогаш тоа е малку тешко да го конфигурирате. Го збунува. Но тоа е дефинитивно нешто да се разгледа ако не се обидуваат да имаат супер робустен одржлив одвај. Ако само сакате да се добие се исклучени од страницата брзо, Кимоно тогаш е навистина добра алатка за користење. И како што веќе напоменав претходно, има на напредна функција на кимоно кои ви покажува како да се пристап до единствена HTML елемент, кој е супер корисни дури и ако се работи во Nokogiri. Значи, ако ние отидете на сајтот кајак, за На пример, можете да видите има is-- Или можеби не може да се види. Но, ако јас ви покаже на URL за кајак, ова всушност е само URL на изворот. Ова е URL пред да бидат модифициран со што и го вклучите Javascript-скрипти дека тие се случува. И тоа се случува да се погледне на различни од увидот во елемент. Значи, ако ви се оди преку и вие одговара на Увид Елемент кодот на изворниот код, тоа е всушност ќе биде поинаква. И тоа е во суштина зошто Nokogiri не може да се изгребе динамички вчитани сајтови. Бидејќи Nokogiri е стружење URL на изворот, со оглед на тоа што е, всушност кимоно стружење што си суштина гледање во Одберете Елемент. Па ако одам преку и јас се обиде и Kimonofy кајак, Јас всушност може да оди преку и одберете цената. Тоа е малку потешко, и во овој случај, тоа е всушност гледаат оваа цена за разлика од овие. Па со оглед на тоа што можете да configure-- или ако ова не се динамички вчитани, можете да го конфигурирате Nokogiri да ги добиете сите од овие. Затоа што е малку форматирање различни за овој оглас како што е во споредба со остатокот од нив, и можете да ги видите тука тоа е всушност нема и избрани сите цени на летот. Можеби сакам да го изберете времето на летање, како и. И јас може да оди преку и вид на конфигурирате тоа. Не сакам тоа. Јас само сакам време на следниот лет е. А потоа по неколку од овие минува низ, тоа добива сликата. Кимоно така е прилично паметни. Тоа е само не е толку силна. Постојат некои други алтернативи кои можете да го користите. И јас ќе ви покажам нив тука. Ако се чувствуваат поудобно во Пајтон наместо Руби можеби, постои библиотека наречена Красна супа. Можете да го користите. Тоа е многу сличен на Nokogiri. Таа има уште неколку карактеристики. Можете да најдете и HTML таг тогаш се движат нагоре или се движи накосо. Има PyQt. Ова всушност може да се изгребе динамичен сајтови, бидејќи тоа е вид на е WebKit која претендира да биде прелистувачот без таму се всушност да се биде пребарувач. Па тоа ќе чекаат за сите Го вклучите Javascript-се вчита, а потоа оди и да се обиде и да се изгребе страницата. Ако сакате да се држиме со Руби, ќе може да оди едно ниво нагоре од Nokogiri. Можете да го користите со Capybara a poltergeist обвивка. И ова всушност може да во суштина прават истото како PyQt, што е тоа е WebKit. Тоа го чека Го вклучите Javascript-се вчита во прв план. Ако тинтири околу со тоа доволно, Можете дури и може да се добие тоа да кликнете на работите. Па ако има линк што не е класичен href каде патот е лесно достапен, и тоа е некој да вклучите нешто што детектира еден клик, всушност можете да го направите тоа. Повеќе популарна библиотека да се симулираат корисник е во JavaScript, која е PhantomJS. Ова очигледно може да се изгребе динамичен сајтови, бидејќи тоа е во суштина преправајќи се дека Хром без корисничкиот интерфејс. А потоа, се разбира најмногу робустен, но најспоро опција, Селенот е автоматизација на прелистувачот. И, за жал, вие нема да биде во можност да го направите тоа во рамките на вашиот CS50 ИРО. Затоа што во суштина она што не е тоа подигне во вашиот Хром, Firefox, без оглед на прелистувачот што сакате да го користите, и го песни можеби вашиот глушец движење, што и да напишеш во, и тоа е само вид на автоматизира овој процес. Па тоа беше развиен како еден вид на веб алатка за тестирање автоматизација. Но, многу луѓе го користат Селен за стругање на веб-сајтови кои инаку имаат многу тешкотии стружење со некои од овие другите, побрзо алатки. Па тоа е се што имам за веб стружење. Забавувај се. ПУБЛИКАТА: Прашање. РОБЕРТ KRABEK: Да. ПУБЛИКАТА: Дали постои механизам да хаш на веб-сајтот за да можете во основа може да одат преку него подоцна. РОБЕРТ KRABEK: Да. Значи ние се стави на, во нашата На пример, за двете од нив, ние се стави на целиот веб-сајт во док. И така може да всушност само се променлива doc и напишете го во датотека. Значи, ако сакав, можев тоа се напише како HTML датотека, а потоа, наместо користење OpenURI и барање навивам, тогаш јас само може да се отвори doc HTML и потоа за пребарување за тоа. ПУБЛИКАТА: Но, може да се зачува вид на онлајн искуство додека го правите офлајн. На пример. кога сте лета за неколку часа, Сакам да се основа архива целиот веб-сајт. [Беззвучен] РОБЕРТ KRABEK: Да, тоа е exactly-- па буквално она што ова е тоа е тоа е преземање се што ќе биде на оваа адреса. Значи, ако ние се стрча навивам, тоа е преземање на сите на овој HTML, и тоа е чување во внатрешноста на променлива док. Па потоа можете да правите што што сакате да направите со док. Можете да го излез на датотека. ПУБЛИКАТА: Но, тоа не се поврзал. Тоа не е динамичен. Тоа не е рекурзивен, нели? Гледаш што мислам? Се обидувам да се основа еден вид на хаш целиот веб-сајт на мојот хард диск така што би можел да го направи тоа во основа за неколку часа без интернет. РОБЕРТ KRABEK: Добро. Значи, ако јас had-- па каде е мојата датотека I / O? Значи ова е јас датотека / О. Така, наместо да се каже на ова, јас ова го нарекуваат craigslist.html. Би се отвори дека до. Би става doc во неа. Ги затворам датотеката. А потоа само затоа на CS50 ИРО е на облак, тоа е сеедно. Јас може да оди тука. Можам да ја преземете датотеката. И тогаш тоа ќе биде на мојот хард диск. За да можете да го прават тоа на тој начин. Или ако сте дома, а не со помош на CS50 ИРО, како Високата или нешто, ова е уште полесно, затоа што ова е се достапни на локално ниво, не се врзани со интернет. ПУБЛИКАТА: гледам. Ова е за еден посебен проблем. Можете ли да го прават тоа така што ќе рекурзивно одат неколку слоеви длабоко вид на работа? РОБЕРТ KRABEK: Јас можам да ја преземете папки како и, ако тоа е она што го бараме. ПУБЛИКАТА: Да. РОБЕРТ KRABEK: Кул.