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 6. 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 Просто предупреждение-- иногда вы 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 Я на самом деле использовали его, чтобы очистить как 1800 южноафриканских школ сайты 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