>> [Грає музика]
РОБЕРТ 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 червня.
І це дійсно так.
>> Так що це ваш прискорений курс 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, це дійсно швидко.
Це легко перевірити.
Ви можете просто ставить нічого Консоль, простий в налаштуванні.
Ви можете вирішити, що саме Ви хочете, щоб очистити і магазин.
Там немає обмеження на число сторінок.
Я насправді використовували його, щоб очистити як 1 800 південноафриканських шкіл сайти
для листів на стажування, що я і зробив.
>> Так, що це можливо, хоча кращої практики буде розділити сценарій.
Тому що, якщо це не вдається, то ви нічого не отримаєте.
Але якщо ви на сто, може бути, 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: Прохолодний.