1 00:00:00,000 --> 00:00:03,234 >> [Грає музика] 2 00:00:03,234 --> 00:00:05,275 3 00:00:05,275 --> 00:00:06,400 РОБЕРТ KRABEK: Здравствуйте, хлопці. 4 00:00:06,400 --> 00:00:09,980 Мене звуть Роберт Krabek, і Я буду вчити вас, хлопці 5 00:00:09,980 --> 00:00:15,470 як очистити Інтернет з Nokogiri, який є бібліотекою Рубі, 6 00:00:15,470 --> 00:00:17,566 і кімоно, яке є продовженням Chrome. 7 00:00:17,566 --> 00:00:20,940 8 00:00:20,940 --> 00:00:25,010 >> Отже, спочатку є пара речей, які вам 9 00:00:25,010 --> 00:00:28,790 можна зробити, якщо можливо, ви були робити все psets досі 10 00:00:28,790 --> 00:00:31,170 і ваш робочий простір це стає трохи повний. 11 00:00:31,170 --> 00:00:37,060 Ми можемо насправді просто піти і створити нове робоче простір для вас 12 00:00:37,060 --> 00:00:41,220 просто зробити новий проект в. 13 00:00:41,220 --> 00:00:46,160 Так що, якщо ви хочете, щоб продовжити працює в шаблоні CS50 ID 14 00:00:46,160 --> 00:00:49,080 що ви в даний час мають, не соромтеся, і ви можете просто 15 00:00:49,080 --> 00:00:54,700 встановити Nokogiri з CFLAGS equals-- камінь встановити nokogiri. 16 00:00:54,700 --> 00:00:56,930 Але в іншому випадку я покажу вам, як встановити новий один. 17 00:00:56,930 --> 00:01:01,210 І тоді це, по суті знижується більше навчальних колеса. 18 00:01:01,210 --> 00:01:07,120 І ви кодування, як якщо б ви були просто кодування в Sublime або щось. 19 00:01:07,120 --> 00:01:12,365 Так що, якщо ми зрушимо його. 20 00:01:12,365 --> 00:01:14,930 21 00:01:14,930 --> 00:01:18,690 >> Так сказати, що це ваш поточний CS 50 ID. 22 00:01:18,690 --> 00:01:21,490 Ви можете просто піти в Cloud9 тут. 23 00:01:21,490 --> 00:01:22,725 Ви можете перейти на приладовій панелі. 24 00:01:22,725 --> 00:01:26,720 25 00:01:26,720 --> 00:01:29,950 Слід виховувати вкладку робочих просторів. 26 00:01:29,950 --> 00:01:32,980 І тоді ви можете просто натиснути тут, створити нову робочу. 27 00:01:32,980 --> 00:01:37,600 Назвіть нову робочу, може бути, тест, або вискоблювання. 28 00:01:37,600 --> 00:01:42,700 І потім натисніть на цю вкладку користувальницького тут, замість вкладки шаблонів CS50. 29 00:01:42,700 --> 00:01:45,155 І тоді ви можете просто піти і створити нове робоче простір. 30 00:01:45,155 --> 00:01:48,280 >> Я вже створив робочу область тут. 31 00:01:48,280 --> 00:01:50,640 Таким чином, ми будемо працювати з цим. 32 00:01:50,640 --> 00:01:55,380 І якщо ви створили новий Робочий простір так з вкладці Настройка, 33 00:01:55,380 --> 00:02:04,560 Ви можете просто ввести камінь встановити nokogiri, яка не збирається тут. 34 00:02:04,560 --> 00:02:06,230 ОК, це трохи заморожені. 35 00:02:06,230 --> 00:02:08,979 Але ви можете ввести камінь встановити nokogiri. 36 00:02:08,979 --> 00:02:15,970 І це має бути все, що там до установки. 37 00:02:15,970 --> 00:02:20,590 >> Як я вже говорив раніше, якщо ви все ще працює у вашій CS50 шаблону ID, 38 00:02:20,590 --> 00:02:30,270 Вам просто потрібно ввести CFLAGS дорівнює камінь встановити nokogiri. 39 00:02:30,270 --> 00:02:33,130 І я вже встановлений це тут, так що я не буду робити цього. 40 00:02:33,130 --> 00:02:38,500 Але для тих, хто стежить поряд, не соромтеся робити так. 41 00:02:38,500 --> 00:02:46,000 >> Тому, як тільки ви отримали ваш Nokogiri Робочий простір або бібліотека встановлена, 42 00:02:46,000 --> 00:02:49,500 Я збираюся дати вам трохи з прискорений курс синтаксису Ruby, 43 00:02:49,500 --> 00:02:53,380 тому Nokogiri бібліотека Рубі. 44 00:02:53,380 --> 00:03:03,710 Таким чином, ви повинні будете знати деякі основні Синтаксис Рубін для роботи з Nokogiri. 45 00:03:03,710 --> 00:03:08,750 Таким чином, деякі основні відмінності від того, що ви звикли до 46 00:03:08,750 --> 00:03:13,370 може бути, якщо ви працюєте дотепер усього C і PHP, 47 00:03:13,370 --> 00:03:16,010 Ви оголошуєте змінні, що не типу. 48 00:03:16,010 --> 00:03:19,720 Ви не можете використовувати крапку з комою, яка є своєрідною рельєфу. 49 00:03:19,720 --> 00:03:25,480 Там немає дужки Зараз навколо Для або під час циклів, наприклад. 50 00:03:25,480 --> 00:03:29,460 Ви просто є блок коду, і то ви риску в кінці цього. 51 00:03:29,460 --> 00:03:32,380 Там немає плюс плюс мінус мінус, так що просто 52 00:03:32,380 --> 00:03:36,180 знаю, що, коли Ви робите для петель, 53 00:03:36,180 --> 00:03:38,620 всього плюс і мінус одно рівних. 54 00:03:38,620 --> 00:03:43,310 І замість того, хеш включають, ви будете використовувати, а потім вимагають 55 00:03:43,310 --> 00:03:47,755 будь-якій бібліотеці, намагаючись завантажити в програму. 56 00:03:47,755 --> 00:03:51,610 57 00:03:51,610 --> 00:03:53,430 >> Рубін НЕ компільований мову. 58 00:03:53,430 --> 00:03:55,550 Так що ще один рельєф. 59 00:03:55,550 --> 00:03:59,350 Це більше схоже на PHP де це інтерпретована мова. 60 00:03:59,350 --> 00:04:03,570 Ви можете запустити будь-який сценарій на Ruby, що Ви пишете з подальшим Рубін 61 00:04:03,570 --> 00:04:07,380 по імені вашого скрипта або програми. 62 00:04:07,380 --> 00:04:13,000 Щоб показати, що це програма Рубі, Ви тільки що в кінцевому його з .rb замість .c. 63 00:04:13,000 --> 00:04:17,440 І є змінна розміру масивів у Ruby, 64 00:04:17,440 --> 00:04:23,200 що супер зручно, коли ви вишкрібання і, можливо, хочете додати 65 00:04:23,200 --> 00:04:26,090 Дані, які ви Подряпини в масив. 66 00:04:26,090 --> 00:04:31,960 Ви не повинні Танос новий масив і скопіювати старий масив в новий масив. 67 00:04:31,960 --> 00:04:36,150 Ви можете просто додати з два стрільці знаків. 68 00:04:36,150 --> 00:04:39,820 І немає символи, є всього поодинокі рядки лист. 69 00:04:39,820 --> 00:04:44,760 Так що повинно бути трохи легше. 70 00:04:44,760 --> 00:04:50,130 >> Таким чином, ми просто дати вам деякі приклади деяких основних синтаксису Ruby. 71 00:04:50,130 --> 00:04:57,100 Тому тут можна побачити, що замість того, слеш слеш, щоб коментувати Ruby, 72 00:04:57,100 --> 00:04:58,740 ви просто використовуєте знак решітки. 73 00:04:58,740 --> 00:05:04,990 І оголошення змінної, ви просто введіть змінних рівних 74 00:05:04,990 --> 00:05:07,971 що ви хочете змінна буде. 75 00:05:07,971 --> 00:05:09,220 Вони можуть бути рядками. 76 00:05:09,220 --> 00:05:14,120 Ви можете мати масив, який Ви заповнити значеннями. 77 00:05:14,120 --> 00:05:17,240 ставить печатку і схожі. 78 00:05:17,240 --> 00:05:20,110 Для наших цілей Різниця лише в дійсно 79 00:05:20,110 --> 00:05:25,500 що ставить, який стоїть за ставить, просто ставить нову лінію 80 00:05:25,500 --> 00:05:27,440 характер у все, що ви друку. 81 00:05:27,440 --> 00:05:30,980 >> Так що, якщо ми даємо невеликої Демонстрація тут, 82 00:05:30,980 --> 00:05:41,800 ми можемо запустити цей with-- відкрити новий термінал. 83 00:05:41,800 --> 00:05:46,020 Ви можете побачити всі з них файли, які знаходяться в моєму терміналі. 84 00:05:46,020 --> 00:05:50,960 І якщо я просто запустіть Рубі, Рубі intro.rb, його 85 00:05:50,960 --> 00:05:53,530 видає п`ять Привіт Мазер, Квінсі, перевізник. 86 00:05:53,530 --> 00:05:54,410 Адамс. 87 00:05:54,410 --> 00:05:59,295 Так що все, що є декларуванню масивів. 88 00:05:59,295 --> 00:06:01,670 АУДИТОРІЯ: Роберт, ви можете зробити Ваш шрифт трохи більше? 89 00:06:01,670 --> 00:06:02,461 РОБЕРТ KRABEK: Так. 90 00:06:02,461 --> 00:06:05,370 91 00:06:05,370 --> 00:06:12,280 І я можу збільшити, тому що ви не можете збільшити в термінальних шрифтів мабуть. 92 00:06:12,280 --> 00:06:18,790 93 00:06:18,790 --> 00:06:24,630 >> Так от, як ви друкуєте змінні у вашому терміналі. 94 00:06:24,630 --> 00:06:28,820 Ви також можете використовувати змінні всередині рядка. 95 00:06:28,820 --> 00:06:33,720 Так нещодавно в PHP, Ви могли б дізналися 96 00:06:33,720 --> 00:06:37,340 що є рядок інтерполяції. 97 00:06:37,340 --> 00:06:43,830 Так що, якщо ви подивіться тут, якщо я оголосити трьох змінних, ім'я, бібліотека, 98 00:06:43,830 --> 00:06:49,700 і мова, і я ставить, я написати рядок, привіт мене звати. 99 00:06:49,700 --> 00:06:54,190 І тоді замість PHP версія інтерполяції рядків 100 00:06:54,190 --> 00:06:58,960 який виглядає трохи більше, як це, у вас є знак фунта, а потім 101 00:06:58,960 --> 00:07:01,220 фігурної дужки, а потім ім'я змінної. 102 00:07:01,220 --> 00:07:07,350 І це, як ви б друкувати, скажімо, всі ім'я змінної. 103 00:07:07,350 --> 00:07:10,140 >> І тоді ви також можете конкатенації рядків. 104 00:07:10,140 --> 00:07:12,890 Рубін робить його супер просто зі знаком плюс. 105 00:07:12,890 --> 00:07:16,110 Ви просто повинні один рядок зліва плюс змінної 106 00:07:16,110 --> 00:07:18,860 або іншого рядка плюс рядок. 107 00:07:18,860 --> 00:07:23,500 Так що, якщо я друкую це, він повинен просто сказати Привіт, мене звуть Роберт. 108 00:07:23,500 --> 00:07:27,340 Я буду вчити вас nokogiri в Ruby. 109 00:07:27,340 --> 00:07:35,370 >> І давайте просто підтвердити, що це дійсно case-- рубін інтро. 110 00:07:35,370 --> 00:07:36,480 Здравствуйте, меня зовут Роберт. 111 00:07:36,480 --> 00:07:40,160 Я буду вчити вас nokogiri в Ruby. 112 00:07:40,160 --> 00:07:45,600 >> Рухаючись далі, якщо небудь ще заяви, це трохи відрізняється 113 00:07:45,600 --> 00:07:49,800 від того, що ви могли б бути використані для якщо ви працюєте в С. 114 00:07:49,800 --> 00:07:53,200 Вам не потрібно дужки. 115 00:07:53,200 --> 00:07:55,220 Вам не потрібно фігурні дужки. 116 00:07:55,220 --> 00:08:00,170 І замість того, ще, якщо, це зчеплених ELSIF. 117 00:08:00,170 --> 00:08:07,260 Таким чином, в даному випадку, якщо я оголосив х до тут, як ми бачимо, як і раніше х 5. 118 00:08:07,260 --> 00:08:11,100 Так що, якщо х менше 3, то покладу мало. 119 00:08:11,100 --> 00:08:14,030 Якщо це менше, ніж 7, середній, великий ще. 120 00:08:14,030 --> 00:08:17,340 Так 5 середніх номер. 121 00:08:17,340 --> 00:08:22,270 І я в кінцевому цей блок коду з кінця. 122 00:08:22,270 --> 00:08:24,920 >> Ось мій цикл. 123 00:08:24,920 --> 00:08:28,240 І цей синтаксис також трохи інший. 124 00:08:28,240 --> 00:08:33,500 З 0 на п'ять разів по суті в оголошенні масивів від 0 до 5. 125 00:08:33,500 --> 00:08:36,120 Так що п'ять слотів в масиві. 126 00:08:36,120 --> 00:08:40,500 І тоді для кожного слота в тому, що Масив, я буду збільшуючи I. 127 00:08:40,500 --> 00:08:46,080 Таким чином, це повинен друкувати від 0 до 5, або від 0 до 4. 128 00:08:46,080 --> 00:08:49,630 І це повинно друкованому носії. 129 00:08:49,630 --> 00:08:51,370 >> І я просто прокласти через. 130 00:08:51,370 --> 00:08:54,466 Ви, хлопці, будете мати доступ з цим кодом пізніше. 131 00:08:54,466 --> 00:08:55,965 Так ви, хлопці, можете запустити цей себе. 132 00:08:55,965 --> 00:09:02,090 133 00:09:02,090 --> 00:09:06,620 >> Так що це ваша основна петля-то час. 134 00:09:06,620 --> 00:09:12,230 Це буде просто друкувати J, збільшується на 1, поки ми не вдарив 5. 135 00:09:12,230 --> 00:09:18,320 >> Супер швидкий Рубін прискорений курс про те, як написати функцію. 136 00:09:18,320 --> 00:09:24,460 Замість того, щоб, припустимо, INT факторіала Кількість, ми просто повинні чіткості. 137 00:09:24,460 --> 00:09:28,450 І по суті, ви визначення функції тут. 138 00:09:28,450 --> 00:09:30,600 Це збирається бути ім'я функції, 139 00:09:30,600 --> 00:09:34,280 і це будь змінні, які ви хочу передати у функцію. 140 00:09:34,280 --> 00:09:36,760 Ви можете мати, якщо заяви в межах. 141 00:09:36,760 --> 00:09:38,030 Ви можете повернутися. 142 00:09:38,030 --> 00:09:42,620 У цьому випадку, ми визначення рекурсивно 143 00:09:42,620 --> 00:09:45,000 реалізовані факторіала. 144 00:09:45,000 --> 00:09:48,660 Так що ми просто називаємо функції в Рубі, як це. 145 00:09:48,660 --> 00:09:54,700 >> Так що, якщо я визначив це, я можна назвати факторіала, проходять в 3, 146 00:09:54,700 --> 00:09:59,700 а потім 3 буде мінлива номер що я можу використовувати у функції. 147 00:09:59,700 --> 00:10:08,010 І це to_s просто повертаючи повертати значення факторіала в рядок. 148 00:10:08,010 --> 00:10:10,760 В іншому випадку це викличе помилка говорячи про, я 149 00:10:10,760 --> 00:10:13,230 не може надрукувати string-- тому що, як ви пам'ятаєте, 150 00:10:13,230 --> 00:10:18,230 ставить ставиться string--, бо це факторний повернувся номер. 151 00:10:18,230 --> 00:10:21,850 Таким чином, ми можемо перетворити, що в рядок, як такої. 152 00:10:21,850 --> 00:10:27,856 І навпаки, ви також можете конвертувати рядок в ціле з to_i. 153 00:10:27,856 --> 00:10:32,650 >> Так що робить все супер просто, якщо я просто коментувати це, зберегти 154 00:10:32,650 --> 00:10:36,250 і запустити функцію факторіала. 155 00:10:36,250 --> 00:10:39,850 Ми повинні бути в змозі бачити що факторіал 3 червня. 156 00:10:39,850 --> 00:10:42,790 І це дійсно так. 157 00:10:42,790 --> 00:10:46,160 >> Так що це ваш прискорений курс Ruby. 158 00:10:46,160 --> 00:10:53,550 І тепер ви знаєте, Рубі, ми можемо піти на до базової Nokogiri вишкрібання налаштувати. 159 00:10:53,550 --> 00:10:58,190 По суті все, що вам потрібно зробити, це, в Ruby, вимагають бібліотек. 160 00:10:58,190 --> 00:11:04,390 І для наших цілей ми будемо використовувати Бібліотека OpenURI а також Nokogiri. 161 00:11:04,390 --> 00:11:07,870 І тоді те, що ви do-- і це дати вам синтаксис this-- 162 00:11:07,870 --> 00:11:16,010 це ви відкриваєте URL, скільки ви б у ротора запит, який виступає за C URL. 163 00:11:16,010 --> 00:11:20,330 >> Так ви берете Адреса сайт в питанні. 164 00:11:20,330 --> 00:11:22,030 Ви зберігаєте його в змінної. 165 00:11:22,030 --> 00:11:27,400 І тоді ви можете шукати через це Мінлива унікальних тегів, використовуючи HTML 166 00:11:27,400 --> 00:11:30,590 .css команда. 167 00:11:30,590 --> 00:11:34,360 І тоді ви можете вивести Зміст туди, де ви хочете. 168 00:11:34,360 --> 00:11:35,720 Ви можете почати в базі даних. 169 00:11:35,720 --> 00:11:42,040 Ви можете вивести у файл, або навіть просто роздрукувати його на екран. 170 00:11:42,040 --> 00:11:47,290 >> Таким чином, ми покажемо вам основні скребок. 171 00:11:47,290 --> 00:11:52,570 Так тут ви можете побачити у нас є вимагаючи nokogiri, вимагає відкритого URI. 172 00:11:52,570 --> 00:11:57,150 Ваш базовий набір, давайте називають його документ або документ, 173 00:11:57,150 --> 00:12:07,780 дорівнює Nokogiri :: HTML відкритий, який є Команда надаються нам у OpenURI 174 00:12:07,780 --> 00:12:08,920 Бібліотека. 175 00:12:08,920 --> 00:12:14,000 І ми будемо шукати для тих з Ви, які могли б жити в квад, 176 00:12:14,000 --> 00:12:21,270 для велосипедів, які перераховані в Бостоні на велосипеді розділі Бостон Craigslist 177 00:12:21,270 --> 00:12:22,020 Сайт. 178 00:12:22,020 --> 00:12:26,460 >> Так що, якщо ви не знайомі з Curl, я просто 179 00:12:26,460 --> 00:12:28,930 показати вам дуже швидко, що локон буде робити. 180 00:12:28,930 --> 00:12:38,350 Якби я хотів, щоб отримати всі URL з сайт Craigslist, якщо я типу локон, 181 00:12:38,350 --> 00:12:44,950 він просто скидає всі URL з сайту Craigslist велосипеда 182 00:12:44,950 --> 00:12:46,720 на моєму терміналі. 183 00:12:46,720 --> 00:12:49,130 Це не особливо корисно, тому що я не 184 00:12:49,130 --> 00:12:53,330 хочете вручну пройти і знайти річ, яку я шукаю. 185 00:12:53,330 --> 00:13:01,590 Але тільки так можна бачити, що я насправді 186 00:13:01,590 --> 00:13:13,966 використовуючи правильний код, якщо ви подивіться в URL для Craigslist в bikes-- 187 00:13:13,966 --> 00:13:17,460 чомусь не знайшов. 188 00:13:17,460 --> 00:13:20,340 Якщо ви подивитеся на цій сторінці і ви подивіться на URL, 189 00:13:20,340 --> 00:13:23,970 це повинно бути ідентичним Curl запит, що я просто відправити. 190 00:13:23,970 --> 00:13:27,700 І справді, це те, що будучи зберігається у змінній док. 191 00:13:27,700 --> 00:13:36,540 >> Так що, коли ви повернетеся на наш код, ми то може працювати на цій змінній док 192 00:13:36,540 --> 00:13:40,660 за допомогою .css. 193 00:13:40,660 --> 00:13:49,240 Так сказати, що я хотів, щоб всі теги, які span.txt, 194 00:13:49,240 --> 00:13:51,740 і всі тегів в межах цього тега. 195 00:13:51,740 --> 00:13:56,150 І чому, можливо, ми хочемо, щоб зробити це, я чую вас плакати? 196 00:13:56,150 --> 00:14:02,920 >> Якщо ми Огляньте елемент, це дає вам Аналіз того, як URL структурована. 197 00:14:02,920 --> 00:14:06,200 Якщо я прокрутити Тут ви можете побачити 198 00:14:06,200 --> 00:14:08,770 що кожен з них відрізняється Елементи представляє. 199 00:14:08,770 --> 00:14:13,410 Так, може бути, я хочу, щоб отримати доступ саме цей елемент. 200 00:14:13,410 --> 00:14:16,820 Так що я за допомогою розробника Chrome інструменти для перевірки елемент. 201 00:14:16,820 --> 00:14:22,970 Я бачу тут, що це є тег в проміжок 202 00:14:22,970 --> 00:14:26,230 помітити з класом TXT. 203 00:14:26,230 --> 00:14:29,610 >> Таким чином, це стає нашим Перша операція, яка 204 00:14:29,610 --> 00:14:37,330 є тривалість doc.css, який є тег, який Я шукаю в цьому всьому URL. 205 00:14:37,330 --> 00:14:43,650 А потім .txt працює так само, як CSS робить, коли ви просто писати CSS 206 00:14:43,650 --> 00:14:49,630 у ваших HTML файлів по вказавши клас. 207 00:14:49,630 --> 00:14:57,980 Таким чином, це буде особливо оператор вкажіть тег діапазону з класом TXT. 208 00:14:57,980 --> 00:15:02,800 І потім, якщо я залишаю простір, це буде йти в те, що тег 209 00:15:02,800 --> 00:15:05,170 а потім знайти таке а тег в це. 210 00:15:05,170 --> 00:15:10,750 >> Так що, якщо я просто поклав це термінал, я повинен 211 00:15:10,750 --> 00:15:21,630 зможуть побачити всі по суті що знаходиться в межах цього проміжку класу TXT. 212 00:15:21,630 --> 00:15:22,890 Таким чином, ми дамо, що в ходу. 213 00:15:22,890 --> 00:15:25,870 214 00:15:25,870 --> 00:15:27,756 рубін Craigslist-скребок. 215 00:15:27,756 --> 00:15:31,850 216 00:15:31,850 --> 00:15:37,250 І справді, що дає нам всі ці теги різних записів, які 217 00:15:37,250 --> 00:15:40,400 перебуваєте на сторінці Craigslist. 218 00:15:40,400 --> 00:15:45,670 >> Так що, якщо ми повернемося, ми можемо перетворити це в чомусь трохи більш корисним. 219 00:15:45,670 --> 00:15:51,050 Може бути, ми хочемо тільки посилання. 220 00:15:51,050 --> 00:15:58,790 Тому що в рамках цієї мітці, я буду також є гіперпосилання на шляху 221 00:15:58,790 --> 00:16:00,590 що ця сторінка йде. 222 00:16:00,590 --> 00:16:09,100 Так що, якщо ви подивитеся на цей код тут, що я буду робити це замість того, .css, 223 00:16:09,100 --> 00:16:12,380 Я можу піти at_css. 224 00:16:12,380 --> 00:16:16,820 І це буде просто одержати перший елемент всіх цих речей. 225 00:16:16,820 --> 00:16:20,890 Так що, якщо б я зробити, що до в Код я просто раніше продемонстрували, 226 00:16:20,890 --> 00:16:23,800 замість повернення все це, вона б просто 227 00:16:23,800 --> 00:16:26,850 поверне перший з них. 228 00:16:26,850 --> 00:16:31,310 Так от, як працює оператор at_css. 229 00:16:31,310 --> 00:16:39,460 >> Тому ми хочемо, щоб зберігати Шлях весь перший тег. 230 00:16:39,460 --> 00:16:47,430 І тому, що дасть нам a-- так що ми як і раніше будемо використовувати .css. 231 00:16:47,430 --> 00:16:53,830 Але так як це даватиме нам назад весь масив тегів, 232 00:16:53,830 --> 00:16:55,710 ми збираємося доступу перший елемент. 233 00:16:55,710 --> 00:17:01,700 Так що це ще один спосіб, що ви можете доступ до будь-який конкретний елемент, якщо ви 234 00:17:01,700 --> 00:17:04,810 є масив елементів що повертається, 235 00:17:04,810 --> 00:17:11,930 тому що ви можете все, що ставитися до .css повертається як масив, по суті. 236 00:17:11,930 --> 00:17:16,880 А потім ми збираємося отримати доступ до гіпертекстове посилання атрибут цього. 237 00:17:16,880 --> 00:17:24,810 >> Так що, якщо ви подивіться, якщо Ви дивилися дуже близько тут, 238 00:17:24,810 --> 00:17:28,270 Якщо ви просто істотно шукати в барі URL, 239 00:17:28,270 --> 00:17:33,880 це шлях, який Ви будете вискоблювання. 240 00:17:33,880 --> 00:17:41,565 Так що, якщо ми просто запустити це знову, і переконайтеся, що ми врятували його. 241 00:17:41,565 --> 00:17:47,040 242 00:17:47,040 --> 00:17:48,300 Ви можете перевірити у себе вдома. 243 00:17:48,300 --> 00:17:51,430 Це насправді збігається з цим посиланням. 244 00:17:51,430 --> 00:17:55,950 >> То чому ми могли б хотіти використовувати це? 245 00:17:55,950 --> 00:17:57,870 Якщо ви хочете, щоб очистити сторінка і вона має 246 00:17:57,870 --> 00:18:00,270 сторінка посилань, як Craigslist робить, ви 247 00:18:00,270 --> 00:18:03,210 можливо, захочете піти, в кожному з цих ланок 248 00:18:03,210 --> 00:18:05,120 а потім шкребти Зміст тієї, яка 249 00:18:05,120 --> 00:18:08,520 саме те, що ми збираємося робити. 250 00:18:08,520 --> 00:18:11,660 >> Тому, як тільки у вас є шлях, як не зміню, я більше не дійсно 251 00:18:11,660 --> 00:18:13,200 піклуватися про виведення на друк. 252 00:18:13,200 --> 00:18:15,420 Мені просто потрібно, щоб зберігати його в якості змінної. 253 00:18:15,420 --> 00:18:20,980 І тоді я можу отримати доступ до інших сторінка так само отримати доступ до 254 00:18:20,980 --> 00:18:22,260 Doc в першу чергу. 255 00:18:22,260 --> 00:18:25,920 За винятком на URL, ми збираємося використовувати рядок інтерполяції 256 00:18:25,920 --> 00:18:29,180 як я описував у Рубі раніше, щоб додати 257 00:18:29,180 --> 00:18:32,010 шлях до кінця кореня. 258 00:18:32,010 --> 00:18:38,970 >> Так що це буде зробити, це це збирається поставити на шляху 259 00:18:38,970 --> 00:18:42,360 що я Подряпини раніше а потім перетворити це 260 00:18:42,360 --> 00:18:49,580 в новий пункт, що ви хочете, щоб зателефонувати it-- first_listing, наприклад. 261 00:18:49,580 --> 00:18:52,900 Але я йду це по пункту зараз, 262 00:18:52,900 --> 00:18:55,420 тому що це те, що я використовую тут. 263 00:18:55,420 --> 00:19:02,900 >> Так сказати, що я хотів, щоб отримати опис першого розміщення в Craigslist. 264 00:19:02,900 --> 00:19:04,740 Так що я б сюди. 265 00:19:04,740 --> 00:19:10,660 Я б натисніть на елемент Огляньте знову, тому що цей опис. 266 00:19:10,660 --> 00:19:14,350 Я б сюди і подивитися, якщо я можу знайти, як я міг би 267 00:19:14,350 --> 00:19:16,530 можливість пошуку за цією унікальною міткою. 268 00:19:16,530 --> 00:19:19,530 І в цьому випадку, він має ідентифікатор, який веде нас 269 00:19:19,530 --> 00:19:26,810 до нашого наступного шляху пошуку теги, що з хештегом. 270 00:19:26,810 --> 00:19:30,670 >> Таким чином, для класів, ви можете використовувати оператор крапка. 271 00:19:30,670 --> 00:19:38,610 Так .txt уточнює клас TXT, в той час як хеш визначає ідентифікатор. 272 00:19:38,610 --> 00:19:43,720 Таким чином, в цьому випадку, тег розділ, і ідентифікатор postingbody. 273 00:19:43,720 --> 00:19:47,780 >> Так що це йде і знаходить first--, тому що ми 274 00:19:47,780 --> 00:19:51,200 використовуючи at_css-- це йде і знаходить перший елемент, який 275 00:19:51,200 --> 00:19:57,180 приходить з тегом розділі і ідентифікатор postingbody. 276 00:19:57,180 --> 00:20:02,636 І тоді ви можете отримати доступ до текстової елемент цього пункту повернувся з .text. 277 00:20:02,636 --> 00:20:06,230 І тоді ми можемо зберігати що в описі. 278 00:20:06,230 --> 00:20:09,370 >> Так що тепер у нас є опис змінної, 279 00:20:09,370 --> 00:20:14,850 ми могли б бути в змозі зробити, скажімо, Файловий ввід / вивід. Так файловий ввід / вивід в Рубі 280 00:20:14,850 --> 00:20:21,310 дуже схожий на файловий ввід / вивід в С, де ми відкриваємо файл. 281 00:20:21,310 --> 00:20:23,260 Ми могли б написати йому. 282 00:20:23,260 --> 00:20:25,060 І тоді ми будемо закривати цей файл. 283 00:20:25,060 --> 00:20:29,660 >> Так от, ми просто називаючи подати, деякий довільний змінну. 284 00:20:29,660 --> 00:20:33,120 Ми могли б також просто покласти це тут. 285 00:20:33,120 --> 00:20:39,630 У нас є змінна, що ми, який зберігає відкритий файл, як з File.open. 286 00:20:39,630 --> 00:20:46,370 І ми пишемо в цей файл, тому ми відкрити його з ж оператора. 287 00:20:46,370 --> 00:20:54,280 І тоді ми ставимо рядок у файл з оператором .puts. 288 00:20:54,280 --> 00:20:58,310 І тоді ми ставимо змінну, що ми хочете записати у файл в цьому. 289 00:20:58,310 --> 00:21:00,200 А потім ми просто закрийте файл. 290 00:21:00,200 --> 00:21:04,000 >> Так що, якщо ми йдемо вперед і працювати на це, це повинна пред'явити документ, 291 00:21:04,000 --> 00:21:10,840 з description.txt який буде Тобто це опис в ній. 292 00:21:10,840 --> 00:21:14,015 Так що, якщо я біжу it-- немає. 293 00:21:14,015 --> 00:21:17,520 294 00:21:17,520 --> 00:21:23,330 Вона виробляється текстовий файл с, Будемо сподіватися, що те ж саме. 295 00:21:23,330 --> 00:21:25,850 296 00:21:25,850 --> 00:21:33,290 Так що, можливо, був новий проводка що прийшов у той час як я говорив. 297 00:21:33,290 --> 00:21:36,580 І справді, схоже, мало. 298 00:21:36,580 --> 00:21:43,380 Так що, якщо ми йдемо до цієї класичної велосипеді, 1962 по 1966, який, здається, щоб відповідати. 299 00:21:43,380 --> 00:21:45,620 І там ви йдете. 300 00:21:45,620 --> 00:21:51,250 >> Так от саме основне Функціональність вискоблювання. 301 00:21:51,250 --> 00:21:57,510 Ми могли б замість того, просто писати в цей файл, 302 00:21:57,510 --> 00:21:59,930 ми можемо додати речі в масив. 303 00:21:59,930 --> 00:22:03,770 Так що, якщо я оголошую три масиви, Назва, ціна і опис. 304 00:22:03,770 --> 00:22:06,310 305 00:22:06,310 --> 00:22:13,790 І ми діємо по пункту док в даний час. 306 00:22:13,790 --> 00:22:16,940 Ми можемо пройти і знайти всі span.txt. 307 00:22:16,940 --> 00:22:21,710 І пам'ятайте, що це повертає масив всіх предметів, які він знаходить. 308 00:22:21,710 --> 00:22:27,300 І тоді в Ruby, ви можете просто використовувати .each для перебору кожного елемента 309 00:22:27,300 --> 00:22:28,410 масиву. 310 00:22:28,410 --> 00:22:31,330 І тоді для кожного елемента, Я просто хочу, щоб назвати це 311 00:22:31,330 --> 00:22:34,620 зв'язок, тому що це по суті, що це таке. 312 00:22:34,620 --> 00:22:46,830 >> Так що, якщо я поклав кожен link.css точка a.hdrlnk, це насправді відбувається у зв'язку 313 00:22:46,830 --> 00:22:58,280 і знайти в цій посиланню іншого HTML-елемент і відповідний клас. 314 00:22:58,280 --> 00:23:04,990 Так що, якщо ми пам'ятаємо, що це було, span.txt, 315 00:23:04,990 --> 00:23:13,160 Ви можете See- дозвольте мені повернутися реальний quick-- в span.txt 316 00:23:13,160 --> 00:23:17,490 у нас є багато інших класів. 317 00:23:17,490 --> 00:23:27,180 Так всередині span.txt, ми шукаємо для тега з класом hdrlnk. 318 00:23:27,180 --> 00:23:29,890 Отже, дозвольте мені просто знайти, що для вас, хлопці дійсно швидко. 319 00:23:29,890 --> 00:23:37,390 320 00:23:37,390 --> 00:23:42,850 >> Таким чином, ви можете бачити тут, це тег це в проміжок класу TXT 321 00:23:42,850 --> 00:23:44,920 що має клас hdrlnk. 322 00:23:44,920 --> 00:23:47,610 І це дійсно те, що ми намагаємося отримати. 323 00:23:47,610 --> 00:23:54,680 >> Таким чином, ми зараз намагаємося зберігати всі цих зв'язків всередині назві. 324 00:23:54,680 --> 00:23:59,545 А потім ми збираємося друкувати з кожної з цих посилань. 325 00:23:59,545 --> 00:24:00,360 Ні вибач. 326 00:24:00,360 --> 00:24:04,530 Ми збираємося, щоб роздрукувати ціна кожного з них. 327 00:24:04,530 --> 00:24:09,350 Так що давайте працювати це дійсно швидко і подивитися, що він робить. 328 00:24:09,350 --> 00:24:14,680 329 00:24:14,680 --> 00:24:17,720 >> Так що це просто в основному пішли через кожен з каналів 330 00:24:17,720 --> 00:24:27,310 у свою чергу, зверталися тег в питанні, а потім витягнув ціну. 331 00:24:27,310 --> 00:24:33,910 І це зробив, тому що після, що у вас є все, що в назві, 332 00:24:33,910 --> 00:24:37,260 ми тільки зберегли титул там. 333 00:24:37,260 --> 00:24:40,180 Ми тільки зберігати посилання у назві масиву. 334 00:24:40,180 --> 00:24:47,720 І в цьому для роботи циклу, де замість того, щоб a.hdrlnk, 335 00:24:47,720 --> 00:24:50,490 ми шукаємо span.price. 336 00:24:50,490 --> 00:24:56,500 Так що, якщо я можу просто дуже швидко знайти ціна, якщо ви оглянете елемент, 337 00:24:56,500 --> 00:25:00,610 Ви побачите, що це проміжок з класом ціною. 338 00:25:00,610 --> 00:25:04,670 І це, по суті, як ми отримуємо ціну там. 339 00:25:04,670 --> 00:25:10,040 >> Так що це дійсно Основний випадок вискоблювання. 340 00:25:10,040 --> 00:25:13,550 Ось як ви отримаєте всі елементи на сторінці 341 00:25:13,550 --> 00:25:16,510 що, скажімо, ви вже знаєте URL в. 342 00:25:16,510 --> 00:25:21,050 >> Так що, якщо ми хочемо, щоб отримати трохи більше в глибину, 343 00:25:21,050 --> 00:25:23,950 ми можемо очистити сторінки в сторінках. 344 00:25:23,950 --> 00:25:28,480 А для цього, наприклад, я буду бути висновок у файл CSV. 345 00:25:28,480 --> 00:25:39,510 Так що я вимагаючи CSV тут бо Рубі не всередині себе, 346 00:25:39,510 --> 00:25:42,350 мати функціональність просто вихідних CSV файлів. 347 00:25:42,350 --> 00:25:45,030 Так от супер просто. 348 00:25:45,030 --> 00:25:48,710 Дозвольте мені перейти до наступної. 349 00:25:48,710 --> 00:25:51,640 350 00:25:51,640 --> 00:25:57,170 Ми розглянули файловий ввід / вивід. Так що це подібно до того, як це в С 351 00:25:57,170 --> 00:26:00,870 І перш, ніж ми перейдемо до кімоно, Я просто покажу вам, як дуже швидко 352 00:26:00,870 --> 00:26:02,790 щоб очистити ділянки в межах пам'яток. 353 00:26:02,790 --> 00:26:10,040 >> Таким чином, ми вже навчилися оголошувати масиви в Ruby. 354 00:26:10,040 --> 00:26:13,280 Так що я просто можливість оголошення купа довільних масивах 355 00:26:13,280 --> 00:26:16,310 що я буду зберігати дані протягом. 356 00:26:16,310 --> 00:26:20,680 док працює так само як це було в попередньому файлі. 357 00:26:20,680 --> 00:26:23,580 Ми збираємося в, знаходячи кожен з span.txt х. 358 00:26:23,580 --> 00:26:25,040 Ми вже знаємо, що. 359 00:26:25,040 --> 00:26:32,130 Тобто контейнер, усередині якого кожен посилання має всі дані, які ми хочемо. 360 00:26:32,130 --> 00:26:40,800 >> Так ось те, що ми робимо, для кожного ланка чистоті класу TXT, ми збираємося в 361 00:26:40,800 --> 00:26:45,720 і ми знайти тег, знайти перший елемент, що. 362 00:26:45,720 --> 00:26:49,937 Пам'ятайте, .css повертає масив, так що ви не можете просто відкрити його, як є. 363 00:26:49,937 --> 00:26:51,520 Ми збираємося, щоб знайти перший елемент. 364 00:26:51,520 --> 00:26:56,430 Навіть якщо це масив одного Пункт, ви повинні використовувати цей синтаксис, 365 00:26:56,430 --> 00:26:58,800 а потім витягнути HREF атрибута. 366 00:26:58,800 --> 00:27:01,800 >> Таким чином, ми зробили це раніше. 367 00:27:01,800 --> 00:27:04,440 Таким чином, це має виглядати знайомим. 368 00:27:04,440 --> 00:27:14,330 І так тепер у нас є масив звані шляху всіх наших посиланнях 369 00:27:14,330 --> 00:27:16,590 що ми збираємося хочете використовувати. 370 00:27:16,590 --> 00:27:21,350 Так що, якщо у нас є цей масив всіх із шляхів, які ми хочемо використовувати, 371 00:27:21,350 --> 00:27:26,840 ми можемо створити елемент для кожного з цих сторінок, коли ми відкриваємо цю сторінку. 372 00:27:26,840 --> 00:27:31,150 Так як ми також бачили на синтаксис раніше, десь 373 00:27:31,150 --> 00:27:37,450 робить рядок інтерполяції зі шляху тут, так що синтаксис тільки для шляху. 374 00:27:37,450 --> 00:27:41,450 І я міг би назвати це Мінлива довільне ім'я. 375 00:27:41,450 --> 00:27:43,070 >> Це важливий. 376 00:27:43,070 --> 00:27:46,650 Це масив, який ви будете бути доступ до кожного елементу. 377 00:27:46,650 --> 00:27:52,400 Але коли ви говорите, для шляху в шляхах, це означає, для кожного елемента в шляхів, 378 00:27:52,400 --> 00:27:55,150 називають його шлях, і використовувати його. 379 00:27:55,150 --> 00:27:59,266 Це, по суті, коли ви зробити цикл, і ви використовуєте INT I. 380 00:27:59,266 --> 00:28:04,000 Таким чином, ви можете звертатися шлях у якості Змінна, яка збільшуючи. 381 00:28:04,000 --> 00:28:07,820 >> І то для кожного з них, перейти в кожен з цих зв'язків. 382 00:28:07,820 --> 00:28:11,710 Тому що ми зберігати його в пункт сторінці, так ми створюємо нову сторінку кожен раз, 383 00:28:11,710 --> 00:28:13,330 ми до нього доступ. 384 00:28:13,330 --> 00:28:20,560 І потім протягом нову сторінку, знайти span.postingtitletext, span.price, 385 00:28:20,560 --> 00:28:22,240 а потім розділ # postingbody. 386 00:28:22,240 --> 00:28:28,430 Ми вже розглянули розділ # postingbody коли ми дивилися на описі. 387 00:28:28,430 --> 00:28:34,890 >> Таким чином, ми можемо піти подивитися на посту Craigslist, якщо ви просто дивлячись на назву, 388 00:28:34,890 --> 00:28:38,810 Ви можете побачити його тут, тривалість postingtitletext. 389 00:28:38,810 --> 00:28:41,390 І ось чому він там. 390 00:28:41,390 --> 00:28:49,120 І тоді за ціною, ви можете доступ до нього з діапазону класу ціною. 391 00:28:49,120 --> 00:28:54,480 >> Таким чином, ми, можливо, могли б також хочете зберегти URL. 392 00:28:54,480 --> 00:28:58,580 Таким чином, ми просто запустіть цей знову, зберігати його в масив, 393 00:28:58,580 --> 00:29:01,150 тому що, якщо ви шукаєте на Craigslist, ви 394 00:29:01,150 --> 00:29:05,290 ймовірно, хочете шлях до, якщо Ви бачите щось, що вас цікавить, 395 00:29:05,290 --> 00:29:06,620 повернутися на цей сайт. 396 00:29:06,620 --> 00:29:10,480 Отже, ви тільки хочете зберегти URL-адреса заради посилання. 397 00:29:10,480 --> 00:29:13,840 398 00:29:13,840 --> 00:29:19,630 >> Це просто, по суті другий синтаксис для циклу. 399 00:29:19,630 --> 00:29:26,360 Я міг би просто paths.each замість не для шляху в дорозі з індексом. 400 00:29:26,360 --> 00:29:31,280 І цей синтаксис Рубі for-- шлях, що ми зробили тут, 401 00:29:31,280 --> 00:29:33,920 оголосивши змінну для кожного елемента. 402 00:29:33,920 --> 00:29:38,540 І поводиться як індекс я в C для петель. 403 00:29:38,540 --> 00:29:41,280 Таким чином, ви можете відстежувати що індекс. 404 00:29:41,280 --> 00:29:45,200 >> Так от тільки трохи зручна річ 405 00:29:45,200 --> 00:29:46,950 коли ви працюєте скребок. 406 00:29:46,950 --> 00:29:50,580 Якщо ви вишкрібання сотні сторінок, щоб переконатися, що це не висить, 407 00:29:50,580 --> 00:29:53,320 Це буде просто вихід, Я до цієї сторінки, 408 00:29:53,320 --> 00:29:55,960 і переконавшись, що вона як і раніше триває. 409 00:29:55,960 --> 00:29:59,250 Але для наших цілей, тому що є сто пунктів, 410 00:29:59,250 --> 00:30:08,000 Я збираюся відкрити тільки три з них так, що ми не вистачить часу тут. 411 00:30:08,000 --> 00:30:13,040 >> Але перш ніж ми перейдемо до цього, я просто збираюся показати Вам, дійсно швидко, 412 00:30:13,040 --> 00:30:16,940 Я буду виводити назву, ціна, опис та URL 413 00:30:16,940 --> 00:30:19,600 кожного з посилань, які я Подряпини. 414 00:30:19,600 --> 00:30:23,720 І то це тільки Синтаксис для бібліотеки CSV. 415 00:30:23,720 --> 00:30:25,240 Ви відкриваєте CSV. 416 00:30:25,240 --> 00:30:27,070 Це те, що я буду називати його. 417 00:30:27,070 --> 00:30:29,430 Відкрийте його за записи справ. 418 00:30:29,430 --> 00:30:33,830 А потім CSV буде файл, який Ви введення все в. 419 00:30:33,830 --> 00:30:37,800 Це просто здоровий глузд для перевірки мені відомо, що він працює. 420 00:30:37,800 --> 00:30:41,240 І це мій розум перевірка щоб знати, що вона завершена. 421 00:30:41,240 --> 00:30:46,670 Так що я ставлю назву в рядку CSV-, ціна, гіперпосилання, опис, 422 00:30:46,670 --> 00:30:49,420 Все в рядах в CSV. 423 00:30:49,420 --> 00:30:53,410 >> Так що, якщо ми йдемо і запустити це now--, і я просто 424 00:30:53,410 --> 00:31:04,710 переконайтеся, що я врятував it-- замість просто виводить його на термінал, 425 00:31:04,710 --> 00:31:09,750 ми повинні мати CSV файл, який справив. 426 00:31:09,750 --> 00:31:13,500 Так от, ми можемо побачити CSV файлу, який був проведений. 427 00:31:13,500 --> 00:31:19,330 Це вихід з краєвид, що я просто втік. 428 00:31:19,330 --> 00:31:23,030 Як ви можете бачити тут, доступі до сторінці 0, 1, 2, 3. 429 00:31:23,030 --> 00:31:27,400 Ці назви, Ціни, описи. 430 00:31:27,400 --> 00:31:31,710 І якщо ми подивимося на цей CSV файл, який ми генерується, 431 00:31:31,710 --> 00:31:35,700 Ви можете побачити його виводять тут. 432 00:31:35,700 --> 00:31:40,350 Це не Excel, так що це не відформатований в рядках і стовпцях. 433 00:31:40,350 --> 00:31:45,140 Але ви можете собі уявити, як це може бути відформатований. 434 00:31:45,140 --> 00:31:47,740 >> CSV означає кому значень. 435 00:31:47,740 --> 00:31:50,090 Таким чином, ви можете собі уявити, що це може бути рядок. 436 00:31:50,090 --> 00:31:54,700 І кожен буде коми вказують на окремий стовпець. 437 00:31:54,700 --> 00:32:00,010 Просто слово caution-- іноді ви 438 00:32:00,010 --> 00:32:02,260 вишкрібання речі з великою кількістю запитах. 439 00:32:02,260 --> 00:32:05,100 Так що, якщо ви виводите це файл CSV, 440 00:32:05,100 --> 00:32:10,340 він не може вивести як ви могли б подумати. 441 00:32:10,340 --> 00:32:16,770 >> Так що по суті всі є в вишкрібання основний HTML 442 00:32:16,770 --> 00:32:20,110 сторінки з Nokogiri. 443 00:32:20,110 --> 00:32:26,000 >> Так інтернет-буття Інноваційна, як він прийшов 444 00:32:26,000 --> 00:32:33,220 з більш автоматизований і графічний інтерфейс версія, хоча і менш надійний 445 00:32:33,220 --> 00:32:35,540 версія очищаючи різні веб-сайти. 446 00:32:35,540 --> 00:32:39,060 І для наших цілей Я буду демонструвати 447 00:32:39,060 --> 00:32:42,920 розширення Chrome називається кімоно. 448 00:32:42,920 --> 00:32:46,690 І все, що ви повинні зробити, це вам орієнтуватися на сторінку, яку ви хочете, щоб очистити. 449 00:32:46,690 --> 00:32:48,590 Ви натискаєте на поле інтересів. 450 00:32:48,590 --> 00:32:51,510 Ви калібрування поля, бо це автоматично 451 00:32:51,510 --> 00:32:54,360 виявити, що він думає Ви хочете, щоб бути вишкрібання, 452 00:32:54,360 --> 00:32:56,280 а потім ви просто створити API. 453 00:32:56,280 --> 00:33:03,700 >> Так що, якщо ми повинні були продемонструвати його на Craigslist, це насправді не працюватиме. 454 00:33:03,700 --> 00:33:08,290 І це те, що я збираюся повернутися до говорячи про це, не будучи, як надійний. 455 00:33:08,290 --> 00:33:10,320 Він має проблеми при створенні API. 456 00:33:10,320 --> 00:33:13,400 Але, як демонстрації що він буде робити, 457 00:33:13,400 --> 00:33:17,460 якщо ви встановите розширення Chrome, все, що вам зробити, це натиснути кнопку на ньому. 458 00:33:17,460 --> 00:33:21,750 Це Kimonofies сторінку, а потім вам натисніть на речі ви хочете сценарій. 459 00:33:21,750 --> 00:33:24,480 >> Так що, якщо б я був, щоб натиснути на що було б виділити 460 00:33:24,480 --> 00:33:28,130 що він думає я хочу бути зіскоблювання цю сторінку. 461 00:33:28,130 --> 00:33:33,660 Так, може бути, я називаю це списки. 462 00:33:33,660 --> 00:33:36,430 Це скільки пунктів я вибрав. 463 00:33:36,430 --> 00:33:43,810 І я можу тільки підтвердити або спростувати деякі з інших запропонованих списків 464 00:33:43,810 --> 00:33:49,600 щоб отримати його, щоб додати до що буде соскабливают. 465 00:33:49,600 --> 00:33:52,330 >> Так що тепер ми можемо бачити, що є сто пунктів вибраний. 466 00:33:52,330 --> 00:33:58,060 Якщо я хочу, щоб мати ще одне поле, що я Також очистити, яка пов'язана з цим, 467 00:33:58,060 --> 00:34:02,540 Я хочу сказати, щоб очистити ціну а також, то я можу зробити те ж саме. 468 00:34:02,540 --> 00:34:06,190 469 00:34:06,190 --> 00:34:11,550 >> Так от демонстрація того, як це набагато менше надійний, тому що тепер це 470 00:34:11,550 --> 00:34:15,050 піднімаючи місто, а не просто ціна, яку я хочу. 471 00:34:15,050 --> 00:34:16,989 І тепер це взяв 200 речей. 472 00:34:16,989 --> 00:34:19,880 Ви можете повернутися назад і видалити. 473 00:34:19,880 --> 00:34:21,449 Ви можете спробувати ще раз. 474 00:34:21,449 --> 00:34:24,250 Але ніхто не гарантує. 475 00:34:24,250 --> 00:34:29,909 Це як це працює іноді. 476 00:34:29,909 --> 00:34:32,969 Як ви бачите тут, зараз він говорить, 96 тут. 477 00:34:32,969 --> 00:34:37,000 Це взяв більшість посилань що ви хочете, щоб очистити, але не 478 00:34:37,000 --> 00:34:39,280 обов'язково всі з них. 479 00:34:39,280 --> 00:34:43,909 >> Ще один корисний інструмент кімоно, хоча що ви можете перейти до додаткових функцій 480 00:34:43,909 --> 00:34:47,980 тут, щоб перейти Advanced, і він покаже вам, 481 00:34:47,980 --> 00:34:53,139 пробою унікальний спосіб отримати доступ до HTML 482 00:34:53,139 --> 00:34:54,909 мітки, які ви хочете, щоб очистити. 483 00:34:54,909 --> 00:35:01,450 Таким чином, для перерахування, якщо ви подивитеся на тут, якщо доступ до DIV чистоті р охоплюють, 484 00:35:01,450 --> 00:35:06,030 Ви можете насправді просто використовувати це в коді Nokogiri, 485 00:35:06,030 --> 00:35:10,780 де раніше ми span.txt доступ до кожного з пропозицій. 486 00:35:10,780 --> 00:35:13,270 Якщо я просто хочу текст в списки, 487 00:35:13,270 --> 00:35:18,950 Я міг вхід DIV простір р простір чистоті простору чистоті простору а, 488 00:35:18,950 --> 00:35:21,570 і було б досягти того ж ефекту. 489 00:35:21,570 --> 00:35:26,320 А для тих з вас, хто зацікавлений за допомогою регулярних виразів, 490 00:35:26,320 --> 00:35:31,670 це відбувається також дати вам регулярний вираз сортування рядка для введення 491 00:35:31,670 --> 00:35:34,900 щоб знайти речі Ви намагаєтеся знайти. 492 00:35:34,900 --> 00:35:44,130 >> Так що ще один крутий особливість кімоно, де ви можете розбивати на сторінки, 493 00:35:44,130 --> 00:35:47,780 який є не тільки я можу очистити результати цій сторінці 494 00:35:47,780 --> 00:35:50,890 Я можу натиснути на цей маленький Кнопка тут, нумерація сторінок, 495 00:35:50,890 --> 00:35:55,580 вказати, що б кнопку взяти мене на наступну сторінку, 496 00:35:55,580 --> 00:35:59,500 і тоді це буде просто знаю, що він може повторювати на наступну сторінку, 497 00:35:59,500 --> 00:36:04,120 а потім очистити всі the-- тих пір, а це те ж саме Формат course-- 498 00:36:04,120 --> 00:36:06,110 краєвид всі ці посилання, а також. 499 00:36:06,110 --> 00:36:15,230 >> Так через кімоно не хоче працювати з Craigslist, що ми зробили 500 00:36:15,230 --> 00:36:19,790 є Я Kimonofied в Harvard Crimson. 501 00:36:19,790 --> 00:36:29,380 Я витягнув деякі з роду топ ознаками статті, підтвердити тут. 502 00:36:29,380 --> 00:36:33,090 Скажіть все це. 503 00:36:33,090 --> 00:36:35,830 Я зібрав цю API для вас завчасно. 504 00:36:35,830 --> 00:36:38,990 Але в іншому випадку, що ви могли б зробити це ви просто натисніть кнопку Готово. 505 00:36:38,990 --> 00:36:40,940 Введіть ваші дані API. 506 00:36:40,940 --> 00:36:45,260 Встановіть його або автоматичне або ручне сканування. 507 00:36:45,260 --> 00:36:48,460 Таким чином, можна оновити ваш Дані кожні 15 хвилин, 508 00:36:48,460 --> 00:36:50,330 щотижня, щодня, що ви хочете. 509 00:36:50,330 --> 00:36:51,160 Назвіть API. 510 00:36:51,160 --> 00:36:52,790 Створення API. 511 00:36:52,790 --> 00:36:58,460 Для вашої зручності, я створив Малиновий головній сторінці API вже. 512 00:36:58,460 --> 00:37:02,480 >> Таким чином, ви просто створити зареєстровані на кімоно, і це 513 00:37:02,480 --> 00:37:06,240 буде зберігати всі ваші інтерфейси для вас. 514 00:37:06,240 --> 00:37:10,330 Так по суті, це все ваші окремі різні подряпини. 515 00:37:10,330 --> 00:37:18,250 >> Так що, якщо ми подивимося тут, це думки посилання, які я зібрав. 516 00:37:18,250 --> 00:37:21,290 Вони є ознаками посилання, які я зібрав. 517 00:37:21,290 --> 00:37:24,090 І вони найбільш читаних посилання, які я зібрав 518 00:37:24,090 --> 00:37:27,120 з цього останнього вусиків API. 519 00:37:27,120 --> 00:37:30,790 >> Так що, якщо ви можете подивитися тут, це буде ознаками, 520 00:37:30,790 --> 00:37:34,130 це будуть думки, який в цьому прикладі, 521 00:37:34,130 --> 00:37:38,150 Я об'єднав їх усіх в одній колекції. 522 00:37:38,150 --> 00:37:42,780 Але якщо ви просто пограти з ним небагато, ви можете розбити його 523 00:37:42,780 --> 00:37:45,090 і розділити його, проте Ви хочете, щоб до тих пір, 524 00:37:45,090 --> 00:37:47,520 як форматування трохи відрізняється. 525 00:37:47,520 --> 00:37:51,320 >> Просто грати навколо з цим, повзати налаштувати один з мінусів 526 00:37:51,320 --> 00:37:58,120 це ви можете тільки сканувати до 25 сторінок за один раз. 527 00:37:58,120 --> 00:38:00,430 Це одна з обмежуючих факторів. 528 00:38:00,430 --> 00:38:03,060 Але тут, якщо ви встановите його ручної повзати, це 529 00:38:03,060 --> 00:38:06,100 як ви можете сказати це оновити ваші дані. 530 00:38:06,100 --> 00:38:11,010 І тут ви можете побачити історію обходу все, що ви повзали. 531 00:38:11,010 --> 00:38:16,000 І ви, хлопці, можете повернутися, зареєструватися, пограти з усіма різними способами 532 00:38:16,000 --> 00:38:20,340 що ви можете змінювати і використовувати ваші дані. 533 00:38:20,340 --> 00:38:24,580 >> Кімоно може бути встановлено до очистити посилання у посилання. 534 00:38:24,580 --> 00:38:29,700 І ви могли б зробити так, спочатку вишкрібання список посилань, 535 00:38:29,700 --> 00:38:35,390 а потім за допомогою API, що у вигляді зістрибнути точка для іншого API 536 00:38:35,390 --> 00:38:36,710 що ви створюєте сценарій. 537 00:38:36,710 --> 00:38:42,040 Але це складніше, ніж те, що ми збираємося, щоб потрапити в сьогоднішній день. 538 00:38:42,040 --> 00:38:44,270 >> Так от кімоно. 539 00:38:44,270 --> 00:38:46,980 Ми поговоримо про плюси і мінуси Nokogiri і кімоно. 540 00:38:46,980 --> 00:38:50,380 >> Nokogiri, це дійсно швидко. 541 00:38:50,380 --> 00:38:51,640 Це легко перевірити. 542 00:38:51,640 --> 00:38:55,910 Ви можете просто ставить нічого Консоль, простий в налаштуванні. 543 00:38:55,910 --> 00:39:00,400 Ви можете вирішити, що саме Ви хочете, щоб очистити і магазин. 544 00:39:00,400 --> 00:39:02,060 Там немає обмеження на число сторінок. 545 00:39:02,060 --> 00:39:08,010 Я насправді використовували його, щоб очистити як 1 800 південноафриканських шкіл сайти 546 00:39:08,010 --> 00:39:10,870 для листів на стажування, що я і зробив. 547 00:39:10,870 --> 00:39:16,060 >> Так, що це можливо, хоча кращої практики буде розділити сценарій. 548 00:39:16,060 --> 00:39:19,310 Тому що, якщо це не вдається, то ви нічого не отримаєте. 549 00:39:19,310 --> 00:39:22,790 Але якщо ви на сто, може бути, 200 сторінок в той час, 550 00:39:22,790 --> 00:39:27,840 то у вас є якийсь шанс, принаймні отримувати його по частинах, особливо 551 00:39:27,840 --> 00:39:30,280 якщо у вас поганий Інтернет. 552 00:39:30,280 --> 00:39:32,720 >> На жаль, це може тільки очистити HTML. 553 00:39:32,720 --> 00:39:35,190 Так що, якщо у вас є динамічно завантажується pages-- 554 00:39:35,190 --> 00:39:39,480 і я покажу вам приклад як Kayak в second-- 555 00:39:39,480 --> 00:39:42,270 Nokogiri жаль не може очистити це. 556 00:39:42,270 --> 00:39:45,700 >> Але кімоно також легко використовувати. 557 00:39:45,700 --> 00:39:48,330 Як ви бачили, це по суті точку та натисніть. 558 00:39:48,330 --> 00:39:50,260 Це може очистити JavaScript. 559 00:39:50,260 --> 00:39:53,790 На жаль, є максимум скільки сторінок ви можете очистити. 560 00:39:53,790 --> 00:39:55,710 Іноді це трохи важко налаштувати. 561 00:39:55,710 --> 00:39:57,240 Це плутається. 562 00:39:57,240 --> 00:40:00,920 Але це, безумовно, те, щоб розглянути 563 00:40:00,920 --> 00:40:05,930 якщо ви не намагаєтеся, щоб мати супер міцний супроводі лом. 564 00:40:05,930 --> 00:40:09,010 Якщо ви просто хочете отримати все від сторінки швидко, 565 00:40:09,010 --> 00:40:10,970 Потім кімоно дійсно хороший інструмент, щоб використовувати. 566 00:40:10,970 --> 00:40:16,490 І, як я вже казав, є розширений особливістю кімоно 567 00:40:16,490 --> 00:40:19,260 який показує вам, як доступ до унікальних HTML 568 00:40:19,260 --> 00:40:24,210 елемент, який є супер корисно навіть якщо ви працюєте в Nokogiri. 569 00:40:24,210 --> 00:40:30,370 >> Так що, якщо ми йдемо на сайт Kayak, для Наприклад, ви можете побачити там is-- 570 00:40:30,370 --> 00:40:31,750 або, може бути, ви не можете бачити. 571 00:40:31,750 --> 00:40:38,910 Але якщо я покажу вам URL для Kayak, це насправді просто джерело URL. 572 00:40:38,910 --> 00:40:43,800 Це URL, щоб бути до змінений будь-якими скриптами JavaScript 573 00:40:43,800 --> 00:40:45,350 що у них відбувається. 574 00:40:45,350 --> 00:40:52,420 І це буде виглядати по-іншому від перевірки елемент. 575 00:40:52,420 --> 00:40:55,940 >> Так що, якщо ви йдете через, і ви Матч до Огляньте елемент 576 00:40:55,940 --> 00:41:00,340 код вихідний код, це насправді відбувається по-іншому. 577 00:41:00,340 --> 00:41:05,640 І це, по суті, чому Nokogiri не може очистити динамічно завантажуваних сайтів. 578 00:41:05,640 --> 00:41:08,810 Тому що це Nokogiri вишкрібання вихідний URL, 579 00:41:08,810 --> 00:41:16,310 в той час як насправді кімоно вишкрібання, що ви, по суті 580 00:41:16,310 --> 00:41:18,260 вбачаючи в Select Element. 581 00:41:18,260 --> 00:41:23,880 >> Так що, якщо я пройти і я спробувати Kimonofy Байдарка, 582 00:41:23,880 --> 00:41:26,600 Я можу насправді пройти через і виберіть ціну. 583 00:41:26,600 --> 00:41:32,360 Це трохи складніше, і в цьому випадку, це 584 00:41:32,360 --> 00:41:36,600 насправді бачимо цю ціну на відміну від них. 585 00:41:36,600 --> 00:41:41,110 Так в той час як ви можете configure-- або якби це було не завантажується динамічно, 586 00:41:41,110 --> 00:41:43,620 можна налаштувати Nokogiri щоб отримати всі з них. 587 00:41:43,620 --> 00:41:48,230 >> Оскільки форматування жорсткого трохи відрізняється для цього перерахування 588 00:41:48,230 --> 00:41:51,280 як це в порівнянні з рештою з них, і ви можете подивитися тут 589 00:41:51,280 --> 00:41:54,830 це насправді пішов, і Вибрані всі ціни польоту. 590 00:41:54,830 --> 00:42:01,200 Може бути, я хочу, щоб вибрати Час польоту, а також. 591 00:42:01,200 --> 00:42:04,700 І я можу пройти і зразок настройки, що. 592 00:42:04,700 --> 00:42:06,950 Я не хочу цього. 593 00:42:06,950 --> 00:42:10,200 Я просто хочу, час наступного рейсу. 594 00:42:10,200 --> 00:42:17,030 А потім через пару з них переживає, він отримує картину. 595 00:42:17,030 --> 00:42:19,080 Так кімоно дуже розумний. 596 00:42:19,080 --> 00:42:21,900 Це просто не так міцний. 597 00:42:21,900 --> 00:42:26,710 >> Є деякі інші альтернативи, які ви можете використовувати. 598 00:42:26,710 --> 00:42:31,600 І я покажу вам їх тут. 599 00:42:31,600 --> 00:42:35,790 Якщо вам зручніше в Python замість Рубі може бути, 600 00:42:35,790 --> 00:42:39,290 є бібліотека називається Красива Суп. 601 00:42:39,290 --> 00:42:40,430 Ви можете використовувати це. 602 00:42:40,430 --> 00:42:42,270 Це дуже схоже на Nokogiri. 603 00:42:42,270 --> 00:42:44,620 Вона має трохи більше можливостей. 604 00:42:44,620 --> 00:42:52,160 Ви можете знайти HTML теги і потім рухатися вгору або рухатися в бік. 605 00:42:52,160 --> 00:42:54,690 >> Там це PyQt. 606 00:42:54,690 --> 00:42:57,820 Це дійсно може очистити динамічний сайти, тому що це свого роду 607 00:42:57,820 --> 00:43:02,540 є WebKit, що претендує бути браузер без там насправді 608 00:43:02,540 --> 00:43:03,670 будучи браузер. 609 00:43:03,670 --> 00:43:07,490 Так що чекатиме всіх JavaScript, щоб спочатку завантажити, а потім 610 00:43:07,490 --> 00:43:09,560 піти і спробувати очистити сайт. 611 00:43:09,560 --> 00:43:13,560 >> Якщо ви хочете, щоб дотримуватися Ruby, ви може піти на один рівень вгору від Nokogiri. 612 00:43:13,560 --> 00:43:17,650 Ви можете використовувати Capybara з полтергейст оболонкою. 613 00:43:17,650 --> 00:43:22,910 І це дійсно може по суті, робити те ж саме 614 00:43:22,910 --> 00:43:26,610 а PyQt, який це WebKit. 615 00:43:26,610 --> 00:43:29,610 Він чекає для JavaScript, щоб спочатку завантажити. 616 00:43:29,610 --> 00:43:33,340 Якщо ви возитися з ним достатньо, Ви можете навіть отримати його, щоб натиснути на речі. 617 00:43:33,340 --> 00:43:42,780 >> Так що, якщо є посилання, що це не класичний HREF, де 618 00:43:42,780 --> 00:43:46,350 шлях легко доступні, і це якась річ, яка JavaScript виявляє 619 00:43:46,350 --> 00:43:49,490 клацання, ви можете зробити це. 620 00:43:49,490 --> 00:43:53,430 Чим популярніший бібліотека імітувати користувача 621 00:43:53,430 --> 00:43:56,390 в JavaScript, який PhantomJS. 622 00:43:56,390 --> 00:44:01,010 Це, очевидно, очистити динамічний сайти, тому що це, по суті 623 00:44:01,010 --> 00:44:04,270 роблячи вигляд, що Chrome без користувальницького інтерфейсу. 624 00:44:04,270 --> 00:44:09,970 >> А потім, звичайно, найбільш надійний, але повільний варіант, 625 00:44:09,970 --> 00:44:13,260 є автоматизація Селен-браузер. 626 00:44:13,260 --> 00:44:15,550 І, на жаль, ви не збираєтеся бути 627 00:44:15,550 --> 00:44:19,770 в змозі зробити це в межах вашого CS50 IDE. 628 00:44:19,770 --> 00:44:24,140 Тому що по суті те, що він робить це завантажується ваш Chrome, 629 00:44:24,140 --> 00:44:27,090 Firefox, незалежно браузера що ви хочете використовувати, 630 00:44:27,090 --> 00:44:32,570 і, може бути, він відстежує миша Рух, що ви вводите в, 631 00:44:32,570 --> 00:44:35,170 і це тільки свого роду автоматизує цей процес. 632 00:44:35,170 --> 00:44:42,070 Так він був розроблений як свого роду Сайт автоматизації тестування інструмент. 633 00:44:42,070 --> 00:44:45,910 Але багато людей використовують Селен, щоб очистити сайти 634 00:44:45,910 --> 00:44:49,990 що в іншому випадку вони мають Багато труднощів вишкрібання 635 00:44:49,990 --> 00:44:53,700 з деякими з цих інших, більш швидких інструментів. 636 00:44:53,700 --> 00:44:57,530 >> Так що все у мене для веб вишкрібання. 637 00:44:57,530 --> 00:44:58,090 Удачі. 638 00:44:58,090 --> 00:45:01,762 639 00:45:01,762 --> 00:45:02,680 >> АУДИТОРІЯ: Питання. 640 00:45:02,680 --> 00:45:04,016 >> РОБЕРТ KRABEK: Так. 641 00:45:04,016 --> 00:45:12,840 >> АУДИТОРІЯ: Чи є механізм, щоб прояснити сайт, так що ви могли в основному 642 00:45:12,840 --> 00:45:14,207 пройти через це пізніше. 643 00:45:14,207 --> 00:45:15,040 РОБЕРТ KRABEK: Так. 644 00:45:15,040 --> 00:45:21,530 Таким чином, ми покласти, в нашому Наприклад, для них обох, 645 00:45:21,530 --> 00:45:24,980 покласти весь сайт в документ. 646 00:45:24,980 --> 00:45:31,260 І, щоб ви могли насправді просто взяти Мінлива док і записати його у файл. 647 00:45:31,260 --> 00:45:35,490 Так що, якщо б я захотів, я міг написати його в якості HTML-файлу, 648 00:45:35,490 --> 00:45:39,280 і потім замість OpenURI і запит локон, 649 00:45:39,280 --> 00:45:43,520 то я міг би просто відкрити документ HTML, а потім шукати для цього. 650 00:45:43,520 --> 00:45:47,960 >> АУДИТОРІЯ: Але ви можете зберегти свого роду досвід онлайн 651 00:45:47,960 --> 00:45:48,930 в той час як ви робите в автономному режимі. 652 00:45:48,930 --> 00:45:51,013 Наприклад. коли ви літати протягом декількох годин, 653 00:45:51,013 --> 00:45:54,070 Я хочу, щоб в основному Архів вся сайт. [Нерозбірливо] 654 00:45:54,070 --> 00:45:58,780 >> РОБЕРТ KRABEK: Так, це exactly-- так буквально, що це робить 655 00:45:58,780 --> 00:46:03,010 це бере всі який був би за цим посиланням. 656 00:46:03,010 --> 00:46:11,280 Так що, якщо ми побігли Curl, це приймаючи все це HTML, 657 00:46:11,280 --> 00:46:14,590 і це її зберігання всередині змінної док. 658 00:46:14,590 --> 00:46:17,290 Тоді ви можете робити все, що Ви хочете зробити з док. 659 00:46:17,290 --> 00:46:18,575 Ви можете вивести його у файл. 660 00:46:18,575 --> 00:46:19,950 АУДИТОРІЯ: Але це не пов'язана. 661 00:46:19,950 --> 00:46:20,780 Це не динамічний. 662 00:46:20,780 --> 00:46:22,770 Це не рекурсивний, вірно? 663 00:46:22,770 --> 00:46:24,016 Ви бачите, що я маю на увазі? 664 00:46:24,016 --> 00:46:28,359 Я намагаюся в основному свого роду хеш вся сайт на моєму жорсткому диску 665 00:46:28,359 --> 00:46:31,150 так що я міг би зробити це в основному протягом декількох годин без Інтернету. 666 00:46:31,150 --> 00:46:32,025 >> РОБЕРТ KRABEK: Вірно. 667 00:46:32,025 --> 00:46:37,140 Так що, якщо я had-- так де мій файл вводу / виводу? 668 00:46:37,140 --> 00:46:47,766 Так що це файл вводу / виводу. Так би мовити, замість того, щоб це я називаю це craigslist.html. 669 00:46:47,766 --> 00:46:52,620 670 00:46:52,620 --> 00:46:53,940 Я відкрити, що до. 671 00:46:53,940 --> 00:46:59,020 Я б ставить документ в нього. 672 00:46:59,020 --> 00:47:00,470 Я закриваю файл. 673 00:47:00,470 --> 00:47:05,410 А потім просто тому, що CS50 IDE на хмарі, який що-небудь. 674 00:47:05,410 --> 00:47:07,710 Я можу піти тут. 675 00:47:07,710 --> 00:47:09,320 Я можу завантажити файл. 676 00:47:09,320 --> 00:47:11,830 А потім, що було б на моєму жорсткому диску. 677 00:47:11,830 --> 00:47:13,930 Таким чином, ви можете зробити це таким чином. 678 00:47:13,930 --> 00:47:18,830 Або, якщо ви у себе вдома, а не за допомогою CS50 IDE, як Sublime або щось, 679 00:47:18,830 --> 00:47:21,900 це навіть легше, тому що це все доступно локально, 680 00:47:21,900 --> 00:47:23,020 не прив'язані до Інтернету. 681 00:47:23,020 --> 00:47:24,720 >> АУДИТОРІЯ: Я бачу. 682 00:47:24,720 --> 00:47:26,580 Це для однієї конкретної проблеми. 683 00:47:26,580 --> 00:47:30,410 Ви можете зробити це рекурсивно, так що ви перейти декількох шарів глибоку вигляд речі? 684 00:47:30,410 --> 00:47:33,801 >> РОБЕРТ KRABEK: я можу завантажити папки а також, якщо це те, що ви просите. 685 00:47:33,801 --> 00:47:34,426 АУДИТОРІЯ: Так. 686 00:47:34,426 --> 00:47:39,890 687 00:47:39,890 --> 00:47:41,440 >> РОБЕРТ KRABEK: Прохолодний. 688 00:47:41,440 --> 00:47:43,182