>> [Гуляе музыка]
Роберт KRABEK: Добры дзень, хлопцы.
Мяне завуць Роберт Krabek, і Я буду вучыць вас, хлопцы
як ачысціць Інтэрнэт з Nokogiri, які з'яўляецца бібліятэкай Рубі,
і кімано, якое з'яўляецца працягам Chrome.
>> Такім чынам, спачатку ёсць пара рэчаў, якія вам
можна зрабіць, калі магчыма, вы былі рабіць усё psets гэтага часу
і ваша працоўная прастора гэта становіцца трохі поўны.
Мы можам на самай справе проста пайсці і стварыць новае працоўнае прастору для вас
проста зрабіць новы праект у.
Так што, калі вы хочаце, каб працягнуць працуе ў шаблоне CS50 ID
што вы ў цяперашні час маюць, не саромейцеся, і вы можаце проста
ўсталяваць Nokogiri з CFLAGS equals-- камень ўсталяваць nokogiri.
Але ў адваротным выпадку я пакажу вам, як усталяваць новы адзін.
І тады гэта, па сутнасці зніжаецца больш навучальных колы.
І вы кадавання, як калі б вы былі проста кадавання ў Sublime ці нешта.
Так што, калі мы зварухнем яго.
>> Так бы мовіць, што гэта ваш бягучы CS 50 ID.
Вы можаце проста пайсці ў Cloud9 тут.
Вы можаце перайсці на прыборнай панэлі.
Варта выхоўваць ўкладку рабочых прастор.
І тады вы можаце проста націснуць тут, стварыць новую працоўную.
Назавіце новую працоўную, можа быць, тэст, або выскрабанне.
І затым націсніце гэтую ўкладку карыстацкага тут, замест ўкладкі шаблонаў CS50.
І тады вы можаце проста пайсці і стварыць новае працоўнае прастору.
>> Я ўжо стварыў працоўную вобласць тут.
Такім чынам, мы будзем працаваць з гэтым.
І калі вы стварылі новы Працоўная прастора так з ўкладцы Налада,
Вы можаце проста ўвесці камень ўсталяваць nokogiri, якая не збіраецца тут.
ОК, гэта крыху замарожаныя.
Але вы можаце ўвесці камень ўсталяваць nokogiri.
І гэта павінна быць усё, што там да ўсталёўкі.
>> Як я ўжо казаў раней, калі вы ўсё яшчэ працуе ў вашай CS50 шаблону ID,
Вам проста трэба ўвесці CFLAGS роўная камень ўсталяваць nokogiri.
І я ўжо ўсталяваны гэта тут, так што я не буду рабіць гэтага.
Але для тых, хто сочыць нароўні, не саромейцеся рабіць так.
>> Таму, як толькі вы атрымалі ваш Nokogiri Працоўнае прастору або бібліятэка ўсталяваная,
Я збіраюся даць вам крыху з паскораны курс сінтаксісу Ruby,
таму Nokogiri бібліятэка Рубі.
Такім чынам, вы павінны будзеце ведаць некаторыя асноўныя Сінтаксіс Рубін для працы з Nokogiri.
Такім чынам, некаторыя асноўныя адрозненні ад таго, што вы прывыклі да
можа быць, калі вы працуеце да гэтага часу ўсё C і PHP,
Вы аб'яўляеце зменныя, ня тыпу.
Вы не можаце выкарыстоўваць кропку з коскі, якая з'яўляецца своеасаблівай рэльефу.
Там няма дужкі Зараз вакол Для або падчас цыклаў, напрыклад.
Вы проста ёсць блок кода, і то вы рысу ў канцы гэтага.
Там няма плюс плюс мінус мінус, так што проста
ведаю, што, калі Вы робіце для завес,
ўсяго плюс і мінус роўна роўных.
І замест таго, хэш ўключаюць, вы будзеце выкарыстоўваць, а затым патрабуюць
любой бібліятэцы, спрабуючы загрузіць у праграму.
>> Лал ня кампіляваная мову.
Так што яшчэ адзін рэльеф.
Гэта больш падобна на PHP дзе гэта інтэрпрэтаваная мова.
Вы можаце запусціць любы сцэнар на Ruby, што Вы пішаце з наступным Рубін
па імя вашага скрыпту або праграмы.
Каб паказаць, што гэта праграма Рубі, Вы толькі што ў канчатковым яго з .rb замест .c.
І ёсць пераменная памеру масіваў у Ruby,
што супер зручна, калі вы выскрабанне і, магчыма, хочаце дадаць
Дадзеныя, якія вы Драпіны ў масіў.
Вы не павінны Таноса новы масіў і скапіяваць стары масіў у новы масіў.
Вы можаце проста дадаць з два стрэлка знакаў.
І няма сімвалы, ёсць усяго адзінкавыя радкі ліст.
Так што павінна быць крыху лягчэй.
>> Такім чынам, мы проста даць вам некаторыя прыклады некаторых асноўных сінтаксісу Ruby.
Таму тут можна ўбачыць, што замест таго, слэш слэш, каб каментаваць Ruby,
вы проста карыстаецеся знак рашоткі.
І аб'яву зменнай, вы проста ўвядзіце зменных роўных
што вы хочаце пераменная будзе.
Яны могуць быць радкамі.
Вы можаце мець масіў, які Вы запоўніць значэннямі.
ставіць друк і падобныя.
Для нашых мэтаў Розніца толькі ў сапраўды
што ставіць, які стаіць за ставіць, проста ставіць новую лінію
характар ​​у усё, што вы друку.
>> Так што, калі мы даем невялікі Дэманстрацыя тут,
мы можам запусціць гэты with-- адкрыць новы тэрмінал.
Вы можаце ўбачыць ўсе з іх файлы, якія знаходзяцца ў маім тэрмінале.
І калі я проста запусціце Рубі, Рубі intro.rb, яго
выдае пяць Прывітанне Мазер, Кўінсі, перавозчык.
Адамс.
Так што ўсё, што ёсць дэклараванню масіваў.
АЎДЫТОРЫЯ: Роберт, вы можаце зрабіць Ваш шрыфт крыху больш?
Роберт KRABEK: Так.
І я магу павялічыць, таму што вы не можаце павялічыць у тэрмінальных шрыфтоў па-відаць.
>> Дык вось, як вы друкуеце зменныя ў вашым тэрмінале.
Вы таксама можаце выкарыстоўваць зменныя ўнутры радка.
Так нядаўна ў PHP, Вы маглі б даведаліся
што ёсць радок інтэрпаляцыі.
Так што, калі вы паглядзіце тут, калі я аб'явіць тры зменных, імя, бібліятэка,
і мова, і я ставіць, я напісаць радок, прывітанне мяне завуць.
І тады замест PHP версія інтэрпаляцыі радкоў
які выглядае крыху больш, як гэта, ў вас ёсць знак фунта, а затым
фігурнай дужкі, а затым імя зменнай.
І гэта, як вы б друкаваць, скажам, усе імя зменнай.
>> І тады вы таксама можаце канкатэнацыі радкоў.
Лал робіць яго супер проста са знакам плюс.
Вы проста павінны адзін радок злева плюс зменнай
ці іншы радкі плюс радок.
Так што, калі я друкую гэта, ён павінен проста сказаць Прывітанне, мяне завуць Роберт.
Я буду вучыць вас nokogiri ў Ruby.
>> І давайце проста пацвердзіць, што гэта сапраўды case-- лал інтра.
Добры дзень, мяне завуць Роберт.
Я буду вучыць вас nokogiri ў Ruby.
>> Рухаючыся далей, калі небудзь яшчэ заявы, гэта крыху адрозніваецца
ад таго, што вы маглі б быць выкарыстаны для калі вы працуеце ў С.
Вам не трэба дужкі.
Вам не трэба фігурныя дужкі.
І замест таго, яшчэ, калі, гэта счэпленых ELSIF.
Такім чынам, у дадзеным выпадку, калі я абвясціў х да тут, як мы бачым, па-ранейшаму х 5.
Так што, калі х менш 3, дык накладу мала.
Калі гэта менш, чым 7, сярэдні, вялікі яшчэ.
Так 5 сярэдніх нумар.
І я ў канчатковым гэты блок кода з канца.
>> Вось мой цыкл.
І гэты сінтаксіс таксама трохі адрозніваецца.
З 0 на пяць разоў па сутнасці ў аб'яве масіваў ад 0 да 5.
Так што пяць слотаў ў масіве.
І тады для кожнага слота у тым, што Масіў, я буду павялічваючы I.
Такім чынам, гэта павінен друкаваць ад 0 да 5, або ад 0 да 4.
І гэта павінна друкаваным носьбіце.
>> І я проста пракласці праз.
Вы, хлопцы, будзеце мець доступ з гэтым кодам пазней.
Дык вы, хлопцы, можаце запусціць гэты сябе.
>> Так што гэта ваша асноўная пятля-той час.
Гэта будзе проста друкаваць J, павялічваецца на 1, пакуль мы не ўдарыў 5.
>> Супер хуткі Рубін паскораны курс аб тым, як напісаць функцыю.
Замест таго, каб, дапусцім, INT фактарыяла Колькасць, мы проста павінны выразнасці.
І па сутнасці, вы вызначэння функцыі тут.
Гэта збіраецца быць імя функцыі,
і гэта любыя зменныя, якія вы хачу перадаць у функцыю.
Вы можаце мець, калі заявы ў межах.
Вы можаце вярнуцца.
У гэтым выпадку, мы вызначэнне рэкурсіўна
рэалізаваны фактарыяла.
Так што мы проста называем функцыі у Рубі, як гэта.
>> Так што, калі я вызначыў гэта, я можна назваць фактарыяла, праходзяць у 3,
а затым 3 будзе пераменная нумар што я магу выкарыстоўваць у функцыі.
І гэта to_s проста паварочваючы вяртаць значэнне фактарыяла ў радок.
У адваротным выпадку гэта выкліча памылка кажучы пра, я
не можа надрукаваць string-- таму што, як вы памятаеце,
ставіць ставіцца string--, таму што гэта факторный вярнуўся нумар.
Такім чынам, мы можам пераўтварыць, што ў радок, як такой.
І наадварот, вы таксама можаце канвертаваць радок у цэлае з to_i.
>> Так што робіць усё супер проста, калі я проста каментаваць гэта, захаваць
і запусціць функцыю фактарыяла.
Мы павінны быць у стане бачыць што фактарыяла 6 сакавіка.
І гэта сапраўды так.
>> Так што гэта ваш паскораны курс Ruby.
І цяпер вы ведаеце, Рубі, мы можам пайсці на да базавай Nokogiri выскрабанне наладзіць.
Па сутнасці ўсё, што вам трэба зрабіць, гэта, у Ruby, патрабуюць бібліятэк.
І для нашых мэтаў мы будзем выкарыстоўваць Бібліятэка OpenURI а таксама Nokogiri.
І тады тое, што вы do-- і гэта даць вам сінтаксіс this--
гэта вы адкрываеце URL, колькі вы б у ротара запыт, які выступае за C URL.
>> Дык вы бераце Адрас сайт у пытанні.
Вы захоўваеце яго ў зменнай.
І тады вы можаце шукаць праз гэта Пераменная унікальных тэгаў, выкарыстоўваючы HTML
.css каманда.
І тады вы можаце вывесці Змест туды, дзе вы хочаце.
Вы можаце пачаць у базе дадзеных.
Вы можаце вывесці ў файл, або нават проста раздрукаваць яго на экран.
>> Такім чынам, мы пакажам вам асноўныя скрабок.
Так тут вы можаце ўбачыць у нас ёсць патрабуючы nokogiri, патрабуе адкрытага URI.
Ваш базавы набор, давайце называюць яго дакумент або дакумент,
роўная Nokogiri :: HTML адкрыты, які з'яўляецца Каманда прадастаўляюцца нам у OpenURI
Бібліятэка.
І мы будзем шукаць для тых з Вы, якія маглі б жыць у квад,
для ровараў, якія пералічаны ў Бостане на веласіпедзе раздзеле Бостан Craigslist
Сайт.
>> Так што, калі вы не знаёмыя з Curl, я проста
паказаць вам вельмі хутка, што завітак будзе рабіць.
Калі б я хацеў, каб атрымаць усе URL з сайт Craigslist, калі я тыпу завітак,
ён проста скідае ўсе URL з сайта Craigslist ровара
на маім тэрмінале.
Гэта не асабліва карысна, таму што я не
хочаце ўручную прайсці і знайсці рэч, якую я шукаю.
Але толькі так можна бачыць, што я на самой справе
выкарыстоўваючы правільны код, калі вы паглядзіце у URL для Craigslist ў bikes--
чамусьці не знайшоў.
Калі вы паглядзіце на гэтай старонцы і вы паглядзіце на URL,
гэта павінна быць ідэнтычным Curl запыт, што я проста адправіць.
І на самай справе, гэта тое, што будучы захоўваецца ў зменнай док.
>> Так што, калі вы вернецеся на наш код, мы то можа працаваць на гэтай зменнай док
з дапамогай .css.
Так бы мовіць, што я хацеў, каб усе тэгі, якія span.txt,
і ўсё тэгаў ў межах гэтага тэга.
І чаму, магчыма, мы хочам, каб зрабіць гэта, я чую вас плакаць?
>> Калі мы Агледзіце элемент, гэта дае вам Аналіз таго, як URL структураваная.
Калі я пракруціць Тут вы можаце ўбачыць
што кожны з іх адрозніваецца Элементы ўяўляе.
Так, можа быць, я хачу, каб атрымаць доступ менавіта гэты элемент.
Так што я з дапамогай распрацоўніка Chrome інструменты для праверкі элемент.
Я бачу тут, што гэта з'яўляецца тэг у прамежак
пазначыць з класам 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.
І тады мы можам захоўваць што ў апісанні.
>> Так што цяпер у нас ёсць апісанне зменнай,
мы маглі б быць у стане зрабіць, скажам, Файлавы ўвод / выснова. Так файлавы ўвод / выснова ў Рубі
вельмі падобны на файлавы ўвод / выснова у З, дзе мы адкрываем файл.
Мы маглі б напісаць яму.
І тады мы будзем зачыняць гэты файл.
>> Дык вось, мы проста называючы падаць, некаторы адвольны зменную.
Мы маглі б таксама проста пакласці гэта тут.
У нас ёсць пераменная, што мы, Які захоўвае адкрыты файл, як з File.open.
І мы пішам у гэты файл, таму мы адкрыць яго з ж аператара.
І тады мы ставім радок у файл з аператарам .puts.
І тады мы ставім зменную, што мы хочаце запісаць у файл у гэтым.
А потым мы проста зачыніце файл.
>> Так што, калі мы ідзем наперад і працаваць на гэта, гэта павінна прад'явіць дакумент,
з description.txt які будзе ёсць гэта апісанне ў ёй.
Так што, калі я бягу it-- няма.
Яна вырабляецца тэкставы файл з, Будзем спадзявацца, што тое ж самае.
Так што, магчыма, быў новы праводка што прыйшоў у той час як я казаў.
І на самай справе, падобна, мела.
Так што, калі мы ідзем да гэтай класічнай ровары, 1962 па 1966, які, здаецца, каб адпавядаць.
І там вы ідзяце.
>> Дык вось самае асноўнае Функцыянальнасць выскрабанне.
Мы маглі б замест таго, проста пісаць у гэты файл,
мы можам дадаць рэчы ў масіў.
Так што, калі я абвяшчаю тры масіва, Назва, кошт і апісанне.
І мы дзейнічаем па пункце док ў цяперашні час.
Мы можам прайсці і знайсці ўсе span.txt.
І памятайце, што гэта вяртае масіў усіх прадметаў, якія ён знаходзіць.
І тады ў Ruby, вы можаце проста выкарыстоўваць .each для перабору кожнага элемента
масіва.
І тады для кожнага элемента, Я проста хачу, каб назваць гэта
сувязь, таму што гэта па сутнасці, што гэта такое.
>> Так што, калі я паклаў кожны link.css кропка a.hdrlnk, гэта на самай справе адбываецца ў сувязі
і знайсці ў гэтай спасылцы іншага HTML-элемент і адпаведны клас.
Так што, калі мы памятаем, што гэта было, span.txt,
Вы можаце See- дазвольце мне вярнуцца рэальны quick-- ў span.txt
у нас ёсць шмат іншых класаў.
Так ўнутры span.txt, мы шукаем для тэга з класам hdrlnk.
Такім чынам, дазвольце мне проста знайсці, што для вас, хлопцы сапраўды хутка.
>> Такім чынам, вы можаце бачыць тут, гэта тэг гэта ў прамежак класа TXT
што мае клас hdrlnk.
І гэта сапраўды тое, што мы спрабуем атрымаць.
>> Такім чынам, мы зараз спрабуем захоўваць усе гэтых сувязяў ўнутры назве.
А потым мы збіраемся друкаваць з кожнай з гэтых спасылак.
Не, прабачце.
Мы збіраемся, каб раздрукаваць кошт кожнага з іх.
Так што давайце працаваць гэта сапраўды хутка і паглядзець, што ён робіць.
>> Так што гэта проста ў асноўным пайшлі праз кожны з каналаў
у сваю чаргу, звярталіся тэг ў пытанні, а затым выцягнуў цану.
І гэта зрабіў, таму што пасля, што ў вас ёсць усё, што ў назве,
мы толькі захавалі тытул там.
Мы толькі захоўваць спасылку у назве масіва.
І ў гэтым для працы цыклу, дзе замест таго, каб a.hdrlnk,
мы шукаем span.price.
Так што, калі я магу проста вельмі хутка знайсці цана, калі вы агледзіце элемент,
Вы ўбачыце, што гэта прамежак з класам цане.
І гэта, па сутнасці, як мы атрымліваем цану там.
>> Так што гэта сапраўды Асноўны выпадак выскрабанне.
Вось як вы атрымаеце ўсе элементы на старонцы
што, скажам, вы ўжо ведаеце URL ст.
>> Так што, калі мы хочам, каб атрымаць трохі больш у глыбіню,
мы можам ачысціць старонкі ў старонках.
А для гэтага, напрыклад, я буду быць выснову ў файл CSV.
Так што я патрабуючы CSV тут таму што Рубі не ўнутры сябе,
мець функцыянальнасць проста выходных CSV файлаў.
Дык вось супер проста.
Дазвольце мне перайсці да наступнай.
Мы разгледзелі файлавы ўвод / выснова. Так што гэта падобна таму, як гэта ў З
І перш, чым мы пяройдзем да кімано, Я проста пакажу вам, як вельмі хутка
каб ачысціць ўчасткі ў межах славутасцяў.
>> Такім чынам, мы ўжо навучыліся аб'яўляць масівы ў Ruby.
Так што я проста магчымасць аб'явы куча адвольных масівах
што я буду захоўваць дадзеныя на працягу.
док працуе так жа як гэта было ў папярэднім файле.
Мы збіраемся ў, знаходзячы кожны з span.txt х.
Мы ўжо ведаем, што.
Гэта значыць кантэйнер, усярэдзіне якога кожны спасылка мае ўсе дадзеныя, якія мы хочам.
>> Дык вось тое, што мы робім, для кожнага звяно чысціні класа TXT, мы збіраемся ў
і мы знайсці тэг, знайсці першы элемент, што.
Памятаеце, .css вяртае масіў, так што вы не можаце проста адкрыць яго, як ёсць.
Мы збіраемся, каб знайсці першы элемент.
Нават калі гэта масіў аднаго Пункт, вы павінны выкарыстоўваць гэты сінтаксіс,
а затым выцягнуць HREF атрыбуту.
>> Такім чынам, мы зрабілі гэта раней.
Такім чынам, гэта павінна выглядаць знаёмым.
І так зараз у нас ёсць масіў званыя шляху ўсіх нашых спасылках
што мы збіраемся хочаце выкарыстаць.
Так што, калі ў нас ёсць гэты масіў ўсіх са шляхоў, якія мы хочам выкарыстаць,
мы можам стварыць элемент для кожнага з гэтых старонак, калі мы адкрываем гэтую старонку.
Так як мы таксама бачылі на сінтаксіс раней, дзе
робіць радок інтэрпаляцыі з шляху тут, так што сінтаксіс толькі для шляху.
І я мог бы назваць гэта Пераменная адвольнае імя.
>> Гэта важны.
Гэта масіў, які вы будзеце быць доступ да кожнага элементу.
Але калі вы кажаце, для шляху ў шляхах, гэта азначае, для кожнага элемента ў шляхоў,
называюць яго шлях, і выкарыстоўваць яго.
Гэта, па сутнасці, калі вы зрабіць цыкл, і вы карыстаецеся INT I.
Такім чынам, вы можаце звяртацца шлях у якасці Пераменная, якая павялічваючы.
>> І тое для кожнага з іх, перайсці ў кожны з гэтых сувязяў.
Таму што мы захоўваць яго ў пункт старонцы, так мы ствараем новую старонку кожны раз,
мы да яго доступ.
І затым на працягу новую старонку, знайсці span.postingtitletext, span.price,
а затым раздзел # postingbody.
Мы ўжо разгледзелі раздзел # postingbody калі мы глядзелі на апісанні.
>> Такім чынам, мы можам пайсці паглядзець на пасадзе Craigslist, калі вы проста гледзячы на ​​назву,
Вы можаце ўбачыць яго тут, працягласць postingtitletext.
І вось чаму ён там.
І тады па цане, вы можаце доступ да яго з дыяпазону класа цане.
>> Такім чынам, мы, магчыма, маглі б таксама хочаце захаваць URL.
Такім чынам, мы проста запусціце гэты зноў, захоўваць яго ў масіў,
таму што, калі вы шукаеце на Craigslist, вы
верагодна, хочаце шлях да, калі Вы бачыце што-то, што вас цікавіць,
вярнуцца на гэты сайт.
Такім чынам, вы толькі хочаце захаваць URL-адрас дзеля спасылкі.
>> Гэта проста, па сутнасці іншы сінтаксіс для цыклу.
Я мог бы проста paths.each замест не дзеля шляху ў шляху з індэксам.
І гэты сінтаксіс Рубі for-- шлях, што мы зрабілі тут,
абвясціўшы зменную для кожнага элемента.
І паводзіць сябе як індэкс я ў C для завес.
Такім чынам, вы можаце адсочваць што індэкс.
>> Дык вось толькі трохі зручная рэч
калі вы працуеце скрабок.
Калі вы выскрабанне сотні старонак, каб пераканацца, што гэта не вісіць,
Гэта будзе проста выхад, Я да гэтай старонцы,
і пераканаўшыся, што яна па-ранейшаму працягваецца.
Але для нашых мэтаў, таму што ёсць сто пунктаў,
Я збіраюся адкрыць толькі тры з іх так, што мы не хопіць часу тут.
>> Але перш чым мы пяройдзем да гэтага, я проста збіраюся паказаць Вам, сапраўды хутка,
Я буду выводзіць назву, цана, апісанне і URL
кожнага з спасылак, якія я Драпіны.
І то гэта толькі Сінтаксіс для бібліятэкі CSV.
Вы адкрываеце CSV.
Гэта тое, што я буду называць яго.
Адкрыйце яго з запісу спраў.
А потым CSV будзе файл, які Вы ўводу ўсе ст.
Гэта проста здаровы сэнс для праверкі мне вядома, што ён працуе.
І гэта мой розум праверка каб ведаць, што яна завершаная.
Так што я стаўлю назву ў радку CSV-, цана, гіперспасылка, апісанне,
Усё ў шэрагах у CSV.
>> Так што, калі мы ідзем і запусціць гэта now--, і я проста
пераканайцеся, што я выратаваў it-- замест проста выводзіць яго на тэрмінал,
мы павінны мець CSV файл, які вырабіў.
Дык вось, мы можам убачыць CSV файла, які быў выраблены.
Гэта выхад з пейзаж, што я проста бег.
Як вы можаце бачыць тут, доступе да старонкі 0, 1, 2, 3.
Гэтыя назвы, Цэны, апісання.
І калі мы паглядзім на гэты CSV файл, які мы генеруецца,
Вы можаце ўбачыць яго выводзяць тут.
Гэта не Excel, так што гэта не адфарматаваны ў радках і слупках.
Але вы можаце сабе ўявіць, як гэта можа быць адфарматаваны.
>> CSV азначае коску значэнняў.
Такім чынам, вы можаце сабе ўявіць, што гэта можа быць радок.
І кожны будзе коскі паказваюць на асобны слупок.
Проста слова caution-- часам вы
выскрабанне рэчы з вялікай колькасцю косак.
Так што, калі вы выводзьце гэта файл CSV,
ён не можа вывесці як вы маглі б падумаць.
>> Так што па сутнасці ўсе ёсць у выскрабанне асноўны HTML
старонкі з Nokogiri.
>> Так інтэрнэт-быцця Інавацыйная, як ён прыйшоў
з больш аўтаматызаваны і графічны інтэрфейс версія, хоць і менш надзейны
версія чысцячы розныя вэб-сайты.
І для нашых мэтаў Я буду дэманстраваць
пашырэнне Chrome называецца кімано.
І ўсё, што вы павінны зрабіць, гэта вам арыентавацца на старонку, якую вы хочаце, каб ачысціць.
Вы націскаеце на полі інтарэсаў.
Вы каліброўкі поля, таму што гэта аўтаматычна
выявіць, што ён думае Вы хочаце, каб быць выскрабанне,
а затым вы проста стварыць API.
>> Так што, калі мы павінны былі прадэманстраваць яго на Craigslist, гэта на самай справе не будзе працаваць.
І гэта тое, што я збіраюся вярнуцца да кажучы пра гэта, не будучы, як надзейны.
Ён мае праблемы пры стварэнні API.
Але, як дэманстрацыі што ён будзе рабіць,
калі вы ўсталюеце пашырэнне Chrome, усё, што вам зрабіць, гэта націснуць кнопку на ім.
Гэта Kimonofies старонку, а затым вам націсніце на рэчы вы хочаце сцэнар.
>> Так што, калі б я быў, каб націснуць на што было б вылучыць
што ён мяркуе, што я хачу быць соскабливания гэтую старонку.
Так, можа быць, я называю гэта спісы.
Гэта колькі пунктаў я выбраў.
І я магу толькі пацвердзіць або абвергнуць некаторыя з іншых прапанаваных спісаў
каб атрымаць яго, каб дадаць да што будзе саскрабаюць.
>> Так што цяпер мы можам бачыць, што ёсць сто пунктаў абраны.
Калі я хачу, каб мець яшчэ адно поле, што я Таксама ачысціць, якая звязаная з гэтым,
Я хачу сказаць, каб ачысціць цану а таксама, то я магу зрабіць тое ж самае.
>> Дык вось дэманстрацыя таго, як гэта значна менш надзейны, таму што цяпер гэта
падымаючы горад, а не проста цана, якую я хачу.
І зараз гэта ўзяў 200 рэчаў.
Вы можаце вярнуцца назад і выдаліць.
Вы можаце паспрабаваць яшчэ раз.
Але ніхто не гарантуе.
Гэта як гэта працуе часам.
Як вы бачыце тут, зараз ён кажа, 96 тут.
Гэта ўзяў большасць спасылак што вы хочаце, каб ачысціць, але не
абавязкова ўсе з іх.
>> Яшчэ адзін карысны інструмент кімано, хоць што вы можаце перайсці да дадатковых функцый
тут, каб перайсці Advanced, і ён пакажа вам,
пробай унікальны спосаб атрымаць доступ да HTML
пазнакі, якія вы хочаце, каб ачысціць.
Такім чынам, для пералічэння, калі вы паглядзіце на тут, калі доступ да DIV чысціні р ахопліваюць,
Вы можаце на самой справе проста выкарыстоўваць гэта ў кодзе Nokogiri,
дзе раней мы span.txt доступ да кожнага з прапаноў.
Калі я проста хачу тэкст у спісы,
Я мог ўваход DIV прастору р прастору чысціні прасторы чысціні прасторы а,
і было б дасягнуць таго ж эфекту.
А для тых з вас, хто зацікаўлены пры дапамозе рэгулярных выразаў,
гэта адбываецца таксама даць вам рэгулярны выраз сартавання радкі для ўводу
каб знайсці рэчы Вы спрабуеце знайсці.
>> Так што яшчэ адзін круты асаблівасць кімано, дзе вы можаце разбіваць на старонкі,
які з'яўляецца не толькі я магу ачысціць вынікі гэтай старонцы
Я магу націснуць на гэты маленькі Кнопка тут, нумарацыя старонак,
пазначыць, што б кнопку ўзяць мяне на наступную старонку,
і тады гэта будзе проста ведаю, што ён можа паўтараць на наступную старонку,
а затым ачысціць ўсе the-- тых часоў, а гэта тое ж самае Фармат course--
пейзаж ўсе гэтыя спасылкі, а таксама.
>> Так з-за кімано не жадае працаваць з Craigslist, што мы зрабілі
з'яўляецца Я Kimonofied ў Harvard Crimson.
Я выцягнуў некаторыя з роду топ прыкметах артыкула, пацвердзіць тут.
Скажыце ўсё гэта.
Я сабраў гэтую API для вас раней часу.
Але ў адваротным выпадку, што вы маглі б зрабіць гэта вы проста націсніце кнопку Гатова.
Калі ласка, увядзіце вашыя дадзеныя API.
Усталюйце яго альбо аўтаматычнае або ручное сканаванне.
Такім чынам, можна абнавіць ваш Дадзеныя кожныя 15 хвілін,
штотыдзень, штодня, што вы хочаце.
Назавіце API.
Стварэнне API.
Для вашага зручнасці, я стварыў Малінавы галоўнай старонцы API ўжо.
>> Такім чынам, вы проста стварыць зарэгістраваныя на кімано, і гэта
будзе захоўваць усе вашыя інтэрфейсы для вас.
Так па сутнасці, гэта ўсё вашыя асобныя розныя драпіны.
>> Так што, калі мы паглядзім тут, гэта думкі спасылкі, якія я сабраў.
Яны з'яўляюцца прыкметах спасылкі, якія я сабраў.
І яны найбольш чытаных спасылкі, якія я сабраў
з гэтага апошняга вусікаў API.
>> Так што, калі вы можаце паглядзець тут, гэта будзе прыкметах,
гэта будуць думкі, які ў гэтым прыкладзе,
Я аб'яднаў іх усіх у адной калекцыі.
Але калі вы проста пагуляць з ім трохі, вы можаце разбіць яго
і падзяліць яго, аднак Вы хочаце, каб да таго часу,
як фарматаванне трохі адрозніваецца.
>> Проста гуляць вакол з гэтым, поўзаць наладзіць адзін з мінусаў
гэта вы можаце толькі сканаваць да 25 старонак за адзін раз.
Гэта адна з абмежаваннямі фактараў.
Але тут, калі вы ўсталюеце яго ручной поўзаць, гэта
як вы можаце сказаць гэта абнавіць вашыя дадзеныя.
І тут вы можаце ўбачыць гісторыю абыходу усё, што вы поўзалі.
І вы, хлопцы, можаце вярнуцца, зарэгістравацца, пагуляць з усімі рознымі спосабамі
што вы можаце змяняць і выкарыстоўваць вашы дадзеныя.
>> Кімано можа быць ўстаноўлена да ачысціць спасылкі ў спасылкі.
І вы маглі б зрабіць так, спачатку выскрабанне спіс спасылак,
а затым з дапамогай API, што ў выглядзе саскочыць кропка для іншага API
што вы ствараеце сцэнар.
Але гэта складаней, чым тое, што мы збіраемся, каб патрапіць у сённяшні дзень.
>> Дык вось кімано.
Мы пагаворым пра плюсы і мінусы Nokogiri і кімано.
>> Nokogiri, гэта сапраўды хутка.
Гэта лёгка праверыць.
Вы можаце проста ставіць нічога Кансоль, просты ў наладзе.
Вы можаце вырашыць, што менавіта Вы хочаце, каб ачысціць і магазін.
Там няма абмежавання на колькасць старонак.
Я на самой справе выкарыстоўвалі яго, каб ачысціць як 1800 паўднёваафрыканскіх школ сайты
для лістоў на стажыроўку, што я і зрабіў.
>> Так, што гэта магчыма, хоць лепшай практыкі будзе падзяліць сцэнар.
Таму што, калі гэта не атрымоўваецца, то вы нічога не атрымаеце.
Але калі вы на сто, можа быць, 200 старонак у той час,
то ў вас ёсць нейкі шанец, па меншай меры атрымліваць яго па частках, асабліва
калі ў вас дрэнны Інтэрнэт.
>> На жаль, гэта можа толькі ачысціць HTML.
Так што, калі ў вас ёсць дынамічна загружаецца pages--
і я пакажу вам прыклад як Kayak ў second--
Nokogiri жаль не можа ачысціць гэта.
>> Але кімано таксама лёгка выкарыстоўваць.
Як вы бачылі, гэта па сутнасці пункт і націсніце.
Гэта можа ачысціць JavaScript.
На жаль, ёсць максімум колькі старонак вы можаце ачысціць.
Часам гэта трохі цяжка наладзіць.
Гэта блытаецца.
Але гэта, безумоўна, тое, каб разгледзець
калі вы не спрабуеце, каб мець супер трывалы суправаджэнні лом.
Калі вы проста хочаце атрымаць усё, што ад старонкі хутка,
Затым кімано сапраўды добры інструмент, каб выкарыстоўваць.
І, як я ўжо казаў, ёсць пашыраны асаблівасцю кімано
які паказвае вам, як доступ да ўнікальных HTML
элемент, які з'яўляецца супер карысна нават калі вы працуеце ў Nokogiri.
>> Так што, калі мы ідзем на сайт Kayak, для Напрыклад, вы можаце ўбачыць там is--
ці, можа быць, вы не можаце бачыць.
Але калі я пакажу вам URL для Kayak, гэта на самай справе проста крыніца URL.
Гэта URL, каб быць да зменены любымі скрыптамі JavaScript
што ў іх адбываецца.
І гэта будзе выглядаць па-іншаму ад праверкі элемент.
>> Так што, калі вы ідзяце праз, і вы Матч да Агледзіце элемент
код зыходны код, гэта на самай справе адбываецца па-іншаму.
І гэта, па сутнасці, чаму Nokogiri не можа ачысціць дынамічна загружаных сайтаў.
Таму што гэта Nokogiri выскрабанне зыходны URL,
у той час як на самой справе кімано выскрабанне, што вы, па сутнасці
бачачы ў Select Element.
>> Так што, калі я прайсці і я паспрабаваць Kimonofy Байдарка,
Я магу на самой справе прайсці праз і абярыце цану.
Гэта крыху больш складана, і ў гэтым выпадку, гэта
на самай справе бачым гэтую цану у адрозненне ад іх.
Так у той час як вы можаце configure-- або калі б гэта было не загружаецца дынамічна,
можна наладзіць Nokogiri каб атрымаць усе з іх.
>> Паколькі фарматаванне трохі адрозніваецца для гэтага пералічэння
як гэта ў параўнанні з астатняй з іх, і вы можаце паглядзець тут
гэта на самай справе сышоў, і Выбраныя усе цэны палёту.
Можа быць, я хачу, каб выбраць Час палёту, а таксама.
І я магу прайсці і накшталт налады, што.
Я не хачу гэтага.
Я проста хачу, падчас наступнага рэйса.
А потым праз пару з іх перажывае, ён атрымлівае карціну.
Так кімано вельмі разумны.
Гэта проста не так трывалы.
>> Ёсць некаторыя іншыя альтэрнатывы, якія вы можаце выкарыстоўваць.
І я пакажу вам іх тут.
Калі вам зручней у Python замест Рубі можа быць,
ёсць бібліятэка называецца Прыгожая Суп.
Вы можаце выкарыстоўваць гэта.
Гэта вельмі падобна на Nokogiri.
Яна мае некалькі больш магчымасцяў.
Вы можаце знайсці HTML тэгі і затым рухацца ўверх або рухацца ў бок.
>> Там гэта PyQt.
Гэта сапраўды можа ачысціць дынамічны сайты, таму што гэта свайго роду
з'яўляецца WebKit, што прэтэндуе быць браўзэр без там на самой справе
быўшы браўзэр.
Так што будзе чакаць усіх JavaScript, каб спачатку загрузіць, а затым
пайсці і паспрабаваць ачысціць сайт.
>> Калі вы хочаце, каб прытрымлівацца Ruby, вы можа пайсці на адзін узровень уверх ад Nokogiri.
Вы можаце выкарыстоўваць Capybara з палтэргейст абалонкай.
І гэта сапраўды можа па сутнасці, рабіць тое ж самае
а PyQt, які гэта WebKit.
Ён чакае для JavaScript, каб спачатку загрузіць.
Калі вы важдацца з ім досыць, Вы можаце нават атрымаць яго, каб націснуць на рэчы.
>> Так што, калі ёсць спасылка, што гэта не класічны HREF, дзе
шлях лёгка даступныя, і гэта нейкая рэч, якая JavaScript выяўляе
пстрычка, вы можаце зрабіць гэта.
Чым папулярней бібліятэка імітаваць карыстальніка
у JavaScript, які PhantomJS.
Гэта, відавочна, ачысціць дынамічны сайты, таму што гэта, па сутнасці
робячы выгляд, што Chrome без карыстацкага інтэрфейсу.
>> А потым, вядома, найбольш надзейны, але павольны варыянт,
з'яўляецца аўтаматызацыя Селен-браўзэр.
І, на жаль, вы не збіраецеся быць
ў стане зрабіць гэта ў межах вашага CS50 IDE.
Таму што па сутнасці тое, што ён робіць гэта загружаецца ваш Chrome,
Firefox, незалежна браўзэра што вы хочаце выкарыстоўваць,
і, можа быць, ён адсочвае мыш Рух, што вы ўводзіце ў,
і гэта толькі свайго роду аўтаматызуе гэты працэс.
Так ён быў распрацаваны як свайго роду Сайт аўтаматызацыі тэставання інструмент.
Але шмат людзей выкарыстоўваюць Селен, каб ачысціць сайты
што ў адваротным выпадку яны маюць Шмат цяжкасцяў выскрабанне
з некаторымі з гэтых іншых, больш хуткіх інструментаў.
>> Так што ўсё ў мяне для вэб выскрабанне.
Весяліцца.
>> АЎДЫТОРЫЯ: Пытанне.
>> Роберт KRABEK: Так.
>> АЎДЫТОРЫЯ: Ці ёсць механізм, каб растлумачыць сайт, так што вы маглі ў асноўным
прайсці праз гэта пазней.
Роберт KRABEK: Так.
Такім чынам, мы пакласці, у нашым Напрыклад, для іх абодвух,
пакласці ўвесь сайт у дакумент.
І, каб вы маглі на самай справе проста ўзяць Пераменная док і запісаць яго ў файл.
Так што, калі б я захацеў, я мог напісаць яго ў якасці HTML-файла,
і затым замест OpenURI і запыт завітак,
то я мог бы проста адкрыць дакумент HTML, а затым шукаць для гэтага.
>> АЎДЫТОРЫЯ: Але вы можаце захаваць свайго роду вопыт онлайн
у той час як вы робіце ў аўтаномным рэжыме.
Напрыклад. калі вы лётаць на працягу некалькіх гадзін,
Я хачу, каб у асноўным Архіў ўся сайт. [Неразборліва]
>> Роберт KRABEK: Так, гэта exactly-- так літаральна, што гэта робіць
гэта бярэ ўсё які быў бы па гэтай спасылцы.
Так што, калі мы пабеглі Curl, гэта прымаючы ўсё гэта HTML,
і гэта яе захоўвання ўнутры зменнай док.
Тады вы можаце рабіць усё, што Вы хочаце зрабіць з мастакоў.
Вы можаце вывесці яго ў файл.
АЎДЫТОРЫЯ: Але гэта не звязана.
Гэта не дынамічны.
Гэта не рэкурсіўны, праўда?
Вы бачыце, што я маю на ўвазе?
Я спрабую ў асноўным свайго роду хэш ўся сайт на маім цвёрдым дыску
так што я мог бы зрабіць гэта ў асноўным на працягу некалькіх гадзін без Інтэрнэту.
>> Роберт KRABEK: Дакладна.
Так што, калі я had-- так дзе мой файл уводу / высновы?
Так што гэта файл уводу / высновы. Так бы мовіць, замест таго, каб гэта я называю гэта craigslist.html.
Я адкрыць, што да.
Я б ставіць дакумент у яго.
Я заплюшчваю файл.
А потым проста таму, што CS50 IDE на воблаку, які што-небудзь.
Я магу пайсці тут.
Я магу загрузіць файл.
А потым, што было б на маім цвёрдым дыску.
Такім чынам, вы можаце зрабіць гэта такім чынам.
Ці, калі вы ў сябе дома, а не з дапамогай CS50 IDE, як Sublime ці нешта,
гэта нават лягчэй, таму што гэта ўсё даступна лакальна,
не прывязаны да Інтэрнэту.
>> АЎДЫТОРЫЯ: Я бачу.
Гэта для адной канкрэтнай праблемы.
Вы можаце зрабіць гэта рэкурсіўна, так што вы перайсці некалькіх слаёў глыбокую выгляд рэчы?
>> Роберт KRABEK: я магу спампаваць тэчкі а таксама, калі гэта тое, што вы просіце.
АЎДЫТОРЫЯ: Так.
>> Роберт KRABEK: Прахладны.