[Играет музыка] РОБЕРТ 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. Так что делает все супер просто, если я просто комментировать это, сохранить и запустить функцию факториала. Мы должны быть в состоянии видеть что факториал 3 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 означает запятую значений. Таким образом, вы можете себе представить, что это может быть строка. И каждый будет запятой указывают на отдельный столбец. Просто предупреждение-- иногда вы выскабливание вещи с большим количеством запятых. Так что, если вы выводите это файл 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: Прохладный.