1 00:00:00,000 --> 00:00:03,234 >> [Jouer de la musique] 2 00:00:03,234 --> 00:00:05,275 3 00:00:05,275 --> 00:00:06,400 ROBERT KRABEK: Bonjour, les gars. 4 00:00:06,400 --> 00:00:09,980 Mon nom est Robert Krabek, et Je vais vous enseigner les gars 5 00:00:09,980 --> 00:00:15,470 comment gratter le Web avec Nokogiri, qui est une bibliothèque Ruby, 6 00:00:15,470 --> 00:00:17,566 et Kimono, qui est une extension Chrome. 7 00:00:17,566 --> 00:00:20,940 8 00:00:20,940 --> 00:00:25,010 >> Alors d'abord il ya une quelques choses que vous 9 00:00:25,010 --> 00:00:28,790 peut faire si peut-être vous avez été faire toutes les psets jusqu'ici 10 00:00:28,790 --> 00:00:31,170 et votre espace de travail est obtenir un peu complète. 11 00:00:31,170 --> 00:00:37,060 Nous pouvons en fait juste aller créer un nouvel espace de travail pour vous 12 00:00:37,060 --> 00:00:41,220 faire juste un tout nouveau projet en. 13 00:00:41,220 --> 00:00:46,160 Donc, si vous ne voulez continuer travaillant dans l'ID du modèle de CS50 14 00:00:46,160 --> 00:00:49,080 que vous avez actuellement, sentir libre, et vous pouvez juste 15 00:00:49,080 --> 00:00:54,700 installer Nokogiri avec CFLAGS joyau equals-- installer nokogiri. 16 00:00:54,700 --> 00:00:56,930 Mais sinon, je vais vous montrer comment définir un nouveau en place. 17 00:00:56,930 --> 00:01:01,210 Et puis, cela est essentiellement l'abandon de plusieurs roues de formation. 18 00:01:01,210 --> 00:01:07,120 Et vous codez comme si vous étiez juste codage Sublime ou quelque chose. 19 00:01:07,120 --> 00:01:12,365 Donc, si nous passons au-dessus. 20 00:01:12,365 --> 00:01:14,930 21 00:01:14,930 --> 00:01:18,690 >> Donc, dire cela est votre actuelle CS 50 ID. 22 00:01:18,690 --> 00:01:21,490 Vous pouvez simplement aller à Cloud9 ici. 23 00:01:21,490 --> 00:01:22,725 Vous pouvez aller à votre tableau de bord. 24 00:01:22,725 --> 00:01:26,720 25 00:01:26,720 --> 00:01:29,950 Il devrait faire apparaître onglet Espaces de travail. 26 00:01:29,950 --> 00:01:32,980 Et puis, vous pouvez simplement cliquer sur ici, de créer un nouvel espace de travail. 27 00:01:32,980 --> 00:01:37,600 Nommez votre nouvel espace de travail, peut-test, ou grattage. 28 00:01:37,600 --> 00:01:42,700 Et puis cliquez sur cet onglet personnalisé ici, au lieu de l'onglet des modèles de CS50. 29 00:01:42,700 --> 00:01:45,155 Et puis vous pouvez simplement aller et de créer un nouvel espace de travail. 30 00:01:45,155 --> 00:01:48,280 >> Je l'ai déjà créé un espace de travail ici. 31 00:01:48,280 --> 00:01:50,640 Donc, nous allons travailler avec cela. 32 00:01:50,640 --> 00:01:55,380 Et si vous avez créé un nouveau espace de travail de manière à l'onglet Personnaliser, 33 00:01:55,380 --> 00:02:04,560 vous pouvez simplement taper gem install nokogiri, qui ne va pas ici. 34 00:02:04,560 --> 00:02:06,230 OK, il est un peu gelé. 35 00:02:06,230 --> 00:02:08,979 Mais vous pouvez taper gem install nokogiri. 36 00:02:08,979 --> 00:02:15,970 Et cela devrait être tout ce qui il y a de l'installation. 37 00:02:15,970 --> 00:02:20,590 >> Comme je l'ai déjà dit, si vous êtes encore travailler dans votre CS50 ID de modèle, 38 00:02:20,590 --> 00:02:30,270 il vous suffit de taper CFLAGS égale gem install nokogiri. 39 00:02:30,270 --> 00:02:33,130 Et je l'ai déjà installé ici donc je ne le ferai pas. 40 00:02:33,130 --> 00:02:38,500 Mais pour ceux qui suivent long, se sentir libre de le faire. 41 00:02:38,500 --> 00:02:46,000 >> Donc, une fois que vous avez votre Nokogiri espace de travail ou d'une bibliothèque installée, 42 00:02:46,000 --> 00:02:49,500 Je vais vous donner un peu d'un cours intensif sur la syntaxe Ruby 43 00:02:49,500 --> 00:02:53,380 parce Nokogiri est une bibliothèque Ruby. 44 00:02:53,380 --> 00:03:03,710 Ainsi, vous aurez besoin de connaître certaines de base Ruby syntaxe pour travailler avec Nokogiri. 45 00:03:03,710 --> 00:03:08,750 Ainsi, certaines différences fondamentales de ce que vous êtes habitué à 46 00:03:08,750 --> 00:03:13,370 peut-être si vous avez travaillé jusqu'ici en seulement C et PHP, 47 00:03:13,370 --> 00:03:16,010 vous déclarez les variables sans type. 48 00:03:16,010 --> 00:03:19,720 Vous ne utilisez des points-virgules, qui est une sorte de soulagement. 49 00:03:19,720 --> 00:03:25,480 Il n'y a pas parenthèses maintenant autour de pour tout ou boucles, par exemple. 50 00:03:25,480 --> 00:03:29,460 Vous avez juste un bloc de code, et puis vous mettez fin à la fin de cela. 51 00:03:29,460 --> 00:03:32,380 Il n'y a pas plus plus ou moins en moins, si juste 52 00:03:32,380 --> 00:03:36,180 savoir que lorsque vous faites pour les boucles, 53 00:03:36,180 --> 00:03:38,620 seulement égaux plus et moins égaux. 54 00:03:38,620 --> 00:03:43,310 Et au lieu de hachage comprennent, vous utilisez require puis 55 00:03:43,310 --> 00:03:47,755 quelle que soit la bibliothèque essayer à charger dans votre programme. 56 00:03:47,755 --> 00:03:51,610 57 00:03:51,610 --> 00:03:53,430 >> Ruby est pas un langage compilé. 58 00:03:53,430 --> 00:03:55,550 Voilà donc un autre relief. 59 00:03:55,550 --> 00:03:59,350 Il est plus similaire à PHP où il est un langage interprété. 60 00:03:59,350 --> 00:04:03,570 Vous pouvez exécuter un script Ruby qui vous écrivez avec Ruby suivi 61 00:04:03,570 --> 00:04:07,380 par le nom de votre script ou un programme. 62 00:04:07,380 --> 00:04:13,000 Pour signifier qu'il est un programme Ruby, vous venez de finir avec .rb lieu de .c. 63 00:04:13,000 --> 00:04:17,440 Et il ya des variables tableaux de taille en Ruby, 64 00:04:17,440 --> 00:04:23,200 qui est super pratique quand vous êtes grattage et peut-être voulez ajouter 65 00:04:23,200 --> 00:04:26,090 les données que vous avez gratté dans un tableau. 66 00:04:26,090 --> 00:04:31,960 Vous ne devez pas malloc un nouveau tableau et copier l'ancien tableau dans le nouveau tableau. 67 00:04:31,960 --> 00:04:36,150 Vous pouvez ajoutez juste avec les deux signes de flèche. 68 00:04:36,150 --> 00:04:39,820 Et il n'y a pas de caractères, il seulement chaînes de lettres simples. 69 00:04:39,820 --> 00:04:44,760 Alors que cela devrait être un peu plus facile. 70 00:04:44,760 --> 00:04:50,130 >> Nous allons donc vous donner quelques des exemples de certaines syntaxe Ruby base. 71 00:04:50,130 --> 00:04:57,100 Donc, ici vous pouvez voir que la place de le slash slash, de commenter en Ruby, 72 00:04:57,100 --> 00:04:58,740 il suffit d'utiliser le signe dièse. 73 00:04:58,740 --> 00:05:04,990 Et déclaration de variable, vous il suffit de taper les égaux variables 74 00:05:04,990 --> 00:05:07,971 ce que vous voulez que la variable soit. 75 00:05:07,971 --> 00:05:09,220 Ils peuvent être des chaînes. 76 00:05:09,220 --> 00:05:14,120 Vous pouvez avoir tableau, ce qui vous remplissez avec des valeurs. 77 00:05:14,120 --> 00:05:17,240 puts et gravures sont similaires. 78 00:05:17,240 --> 00:05:20,110 Pour nos fins, la seule différence est vraiment 79 00:05:20,110 --> 00:05:25,500 qui met, qui signifie puts, met juste une nouvelle ligne 80 00:05:25,500 --> 00:05:27,440 caractère à ce que vous imprimez. 81 00:05:27,440 --> 00:05:30,980 >> Donc, si nous donnons un petit démonstration ici, 82 00:05:30,980 --> 00:05:41,800 nous pouvons exécuter ce avec-- ouvrir un nouveau terminal. 83 00:05:41,800 --> 00:05:46,020 Vous pouvez voir tous ces fichiers qui sont dans mon terminal. 84 00:05:46,020 --> 00:05:50,960 Et si je cours juste Ruby, intro.rb rubis, il 85 00:05:50,960 --> 00:05:53,530 met sur cinq Bonjour Mather, Quincy, Carrier. 86 00:05:53,530 --> 00:05:54,410 Adams. 87 00:05:54,410 --> 00:05:59,295 Voilà donc tout ce qu'il ya à des tableaux déclarant. 88 00:05:59,295 --> 00:06:01,670 PUBLIC: Robert, pouvez-vous faire votre police un peu plus grand? 89 00:06:01,670 --> 00:06:02,461 ROBERT KRABEK: Oui. 90 00:06:02,461 --> 00:06:05,370 91 00:06:05,370 --> 00:06:12,280 Et je peux agrandir, car vous ne pouvez pas zoomer pour des polices du terminal apparemment. 92 00:06:12,280 --> 00:06:18,790 93 00:06:18,790 --> 00:06:24,630 >> Voilà donc comment vous imprimez les variables à votre terminal. 94 00:06:24,630 --> 00:06:28,820 Vous pouvez également utiliser variables à l'intérieur d'une chaîne. 95 00:06:28,820 --> 00:06:33,720 Ainsi récemment, en PHP, vous avez appris 96 00:06:33,720 --> 00:06:37,340 qu'il y est une chaîne interpolation. 97 00:06:37,340 --> 00:06:43,830 Donc, si vous jetez un oeil ici, si je déclarer trois variables, le nom, la bibliothèque, 98 00:06:43,830 --> 00:06:49,700 et langue, et je met, je écrire une chaîne, bonjour mon nom est. 99 00:06:49,700 --> 00:06:54,190 Et puis, au lieu de la PHP version de chaîne interpolation 100 00:06:54,190 --> 00:06:58,960 qui ressemble un peu plus comme ça, vous avez un signe dièse, puis 101 00:06:58,960 --> 00:07:01,220 une accolade, puis le nom de la variable. 102 00:07:01,220 --> 00:07:07,350 Et voilà comment vous souhaitez imprimer, dites, quel que soit le nom de la variable est. 103 00:07:07,350 --> 00:07:10,140 >> Et puis, vous pouvez aussi concaténer les chaînes. 104 00:07:10,140 --> 00:07:12,890 Ruby rend super facile avec le signe plus. 105 00:07:12,890 --> 00:07:16,110 Vous avez juste une corde sur la gauche, plus une variable 106 00:07:16,110 --> 00:07:18,860 ou une autre chaîne, plus une chaîne. 107 00:07:18,860 --> 00:07:23,500 Donc, si je imprimer ceci, il se doit juste dire Bonjour, mon nom est Robert. 108 00:07:23,500 --> 00:07:27,340 Je vais vous apprends nokogiri en Ruby. 109 00:07:27,340 --> 00:07:35,370 >> Et nous allons simplement confirmer que ce est en effet l'intro rubis case--. 110 00:07:35,370 --> 00:07:36,480 Bonjour, mon nom est Robert. 111 00:07:36,480 --> 00:07:40,160 Je vais vous apprends nokogiri en Ruby. 112 00:07:40,160 --> 00:07:45,600 >> Sur la route, si else, il est un peu différent 113 00:07:45,600 --> 00:07:49,800 de ce que vous pourriez être utilisé pour si vous avez travaillé en C. 114 00:07:49,800 --> 00:07:53,200 Vous ne devez pas les parenthèses. 115 00:07:53,200 --> 00:07:55,220 Vous ne devez pas les accolades. 116 00:07:55,220 --> 00:08:00,170 Et au lieu d'autre si, il est un elsif enchaîné. 117 00:08:00,170 --> 00:08:07,260 Donc, ici, si je l'ai déclaré X Jusqu'à ici, comme nous pouvons le voir, x est toujours 5. 118 00:08:07,260 --> 00:08:11,100 Donc, si x est inférieur à 3, il va mettre petite. 119 00:08:11,100 --> 00:08:14,030 Si elle est inférieure à 7, moyen, autre grande. 120 00:08:14,030 --> 00:08:17,340 Donc 5 est un nombre moyen. 121 00:08:17,340 --> 00:08:22,270 Et je finis ce bloc de code avec la fin. 122 00:08:22,270 --> 00:08:24,920 >> Voici ma boucle for. 123 00:08:24,920 --> 00:08:28,240 Et cette syntaxe est également légèrement différente. 124 00:08:28,240 --> 00:08:33,500 Le 0 à cinq vient essentiellement est la déclaration d'un des tableaux de 0 à 5. 125 00:08:33,500 --> 00:08:36,120 Donc, il ya cinq fentes dans le tableau. 126 00:08:36,120 --> 00:08:40,500 Ensuite, pour chaque intervalle en ce que tableau, je serai incrémenter i. 127 00:08:40,500 --> 00:08:46,080 Donc, cela devrait imprimer 0 à 5 ou 0 à 4. 128 00:08:46,080 --> 00:08:49,630 Et cela devrait imprimer moyen. 129 00:08:49,630 --> 00:08:51,370 >> Et je vais Just Blaze travers. 130 00:08:51,370 --> 00:08:54,466 Les gars, vous aurez accès à ce code plus tard. 131 00:08:54,466 --> 00:08:55,965 Alors vous les gars vous pouvez exécuter cette. 132 00:08:55,965 --> 00:09:02,090 133 00:09:02,090 --> 00:09:06,620 >> Donc ceci est votre boucle de base de tout. 134 00:09:06,620 --> 00:09:12,230 Ce sera juste l'impression j, incrémentation de 1 jusqu'à nous avons atteint 5. 135 00:09:12,230 --> 00:09:18,320 >> Cours super rapide crash Ruby sur la façon d'écrire une fonction. 136 00:09:18,320 --> 00:09:24,460 Au lieu de, disons, int factorielle nombre, nous avons juste def. 137 00:09:24,460 --> 00:09:28,450 Et vous êtes essentiellement définir une fonction ici. 138 00:09:28,450 --> 00:09:30,600 Cela va être le nom de la fonction, 139 00:09:30,600 --> 00:09:34,280 et cela est toutes les variables que vous vouloir passer dans la fonction. 140 00:09:34,280 --> 00:09:36,760 Vous pouvez avoir si des énoncés prospectifs au. 141 00:09:36,760 --> 00:09:38,030 Vous pouvez retourner. 142 00:09:38,030 --> 00:09:42,620 Dans ce cas, nous sommes la définition d'une manière récursive 143 00:09:42,620 --> 00:09:45,000 fonction factorielle en œuvre. 144 00:09:45,000 --> 00:09:48,660 Donc, nous appelons simplement fonctions Ruby comme ça. 145 00:09:48,660 --> 00:09:54,700 >> Donc, si je l'ai défini, je peut appeler factorielle, passer 3, 146 00:09:54,700 --> 00:09:59,700 puis 3 sera la variable du numéro que je peux utiliser dans la fonction. 147 00:09:59,700 --> 00:10:08,010 Et cela est juste to_s tourne la retourner valeur de factorielle dans une chaîne. 148 00:10:08,010 --> 00:10:10,760 Sinon, cela jettera une erreur en disant oh, je 149 00:10:10,760 --> 00:10:13,230 ne peut pas imprimer un string-- parce que vous vous souvenez, 150 00:10:13,230 --> 00:10:18,230 puts est mis string-- parce que ce factorielle a renvoyé un certain nombre. 151 00:10:18,230 --> 00:10:21,850 Donc, nous pouvons convertir cette à une chaîne comme tels. 152 00:10:21,850 --> 00:10:27,856 Et à l'inverse, vous pouvez également convertir une chaîne en entier avec to_i. 153 00:10:27,856 --> 00:10:32,650 >> Donc, faire tout ce super simple, si je viens de commenter ceci, enregistrez 154 00:10:32,650 --> 00:10:36,250 et exécuter la fonction factorielle. 155 00:10:36,250 --> 00:10:39,850 Nous devrions être en mesure de voir que factorielle de 3 est de 6. 156 00:10:39,850 --> 00:10:42,790 Et cela est bien vrai. 157 00:10:42,790 --> 00:10:46,160 >> Voilà donc notre cours intensif en Ruby. 158 00:10:46,160 --> 00:10:53,550 Et maintenant que vous savez Ruby, nous pouvons aller sur à la base Nokogiri grattage mis en place. 159 00:10:53,550 --> 00:10:58,190 Essentiellement tout ce que vous avez à faire est, en Ruby, nécessitent que les bibliothèques. 160 00:10:58,190 --> 00:11:04,390 Et pour nos fins, nous allons utiliser la bibliothèque openURI ainsi que Nokogiri. 161 00:11:04,390 --> 00:11:07,870 Et puis ce que vous do-- et il va vous donner la syntaxe pour this-- 162 00:11:07,870 --> 00:11:16,010 est que vous ouvrez l'URL comme vous le feriez dans une demande cURL, qui signifie C URL. 163 00:11:16,010 --> 00:11:20,330 >> Donc, vous prenez l'URL le site en question. 164 00:11:20,330 --> 00:11:22,030 Vous stockez dans une variable. 165 00:11:22,030 --> 00:11:27,400 Et puis, vous pouvez rechercher à travers ce que variable pour les balises HTML uniques à l'aide 166 00:11:27,400 --> 00:11:30,590 la commande Css. 167 00:11:30,590 --> 00:11:34,360 Et puis, vous pouvez émettre le contenu à l'endroit où vous voulez. 168 00:11:34,360 --> 00:11:35,720 Vous pouvez commencer dans une base de données. 169 00:11:35,720 --> 00:11:42,040 Vous pouvez imprimer dans un fichier, ou même simplement l'imprimer à l'écran. 170 00:11:42,040 --> 00:11:47,290 >> Donc, nous allons vous montrer un grattoir de base. 171 00:11:47,290 --> 00:11:52,570 Donc, ici vous pouvez voir que nous avons exigeant nokogiri, exiger open-uri. 172 00:11:52,570 --> 00:11:57,150 Votre configuration de base, nous allons appeler document ou doc, 173 00:11:57,150 --> 00:12:07,780 est égal à Nokogiri :: HTML ouvert, qui est le commande qui nous sont fournis par le openURI 174 00:12:07,780 --> 00:12:08,920 bibliothèque. 175 00:12:08,920 --> 00:12:14,000 Et nous allons être à la recherche, pour ceux d'entre vous qui pourraient vivre dans le quad, 176 00:12:14,000 --> 00:12:21,270 pour les vélos qui sont énumérés à Boston sur la section de vélo Boston Craigslist 177 00:12:21,270 --> 00:12:22,020 site. 178 00:12:22,020 --> 00:12:26,460 >> Donc, si vous n'êtes pas familier avec cURL, je vais juste 179 00:12:26,460 --> 00:12:28,930 vous montrer très rapide ce cURL fera. 180 00:12:28,930 --> 00:12:38,350 Si je voulais obtenir toutes les URL à partir de le site Craigslist, si je tape boucle, 181 00:12:38,350 --> 00:12:44,950 il vide tout simplement de l'URL à partir du site bicyclette Craigslist 182 00:12:44,950 --> 00:12:46,720 sur mon terminal. 183 00:12:46,720 --> 00:12:49,130 Cela ne veut pas particulièrement utile, car je ne fais pas 184 00:12:49,130 --> 00:12:53,330 vouloir aller manuellement à travers et trouver la chose que je cherche. 185 00:12:53,330 --> 00:13:01,590 Mais juste pour que vous le pouvez vois que je suis en fait 186 00:13:01,590 --> 00:13:13,966 en utilisant le bon code, si vous regardez à l'adresse de Craigslist bikes-- 187 00:13:13,966 --> 00:13:17,460 pour quelque raison il ne le trouve pas. 188 00:13:17,460 --> 00:13:20,340 Si vous regardez cette page et vous regardez l'URL, 189 00:13:20,340 --> 00:13:23,970 ceci devrait être identique à la cURL demande que je viens envoie. 190 00:13:23,970 --> 00:13:27,700 Et en effet, voilà ce qui se stockée dans la variable doc. 191 00:13:27,700 --> 00:13:36,540 >> Donc, quand vous allez revenir à notre code, nous peut alors fonctionner sur cette variable doc 192 00:13:36,540 --> 00:13:40,660 en utilisant Css. 193 00:13:40,660 --> 00:13:49,240 Alors dis que je voulais obtenir tous les balises qui sont span.txt, 194 00:13:49,240 --> 00:13:51,740 et toutes les balises dans un ce tag. 195 00:13:51,740 --> 00:13:56,150 Et pourquoi pourrions nous voulons ce faire, je vous entends pleurer? 196 00:13:56,150 --> 00:14:02,920 >> Si nous Inspecter l'élément, il vous donne un répartition de la façon dont l'URL est structuré. 197 00:14:02,920 --> 00:14:06,200 Si je défiler vers le bas Ici, vous pouvez voir 198 00:14:06,200 --> 00:14:08,770 que chacun de ces différents éléments représente. 199 00:14:08,770 --> 00:14:13,410 Alors peut-être que je veux accéder cet élément particulier. 200 00:14:13,410 --> 00:14:16,820 Donc, je suis en utilisant Chrome développeur des outils pour inspecter Element. 201 00:14:16,820 --> 00:14:22,970 Je vois ici que cette est une une étiquette dans un laps 202 00:14:22,970 --> 00:14:26,230 tag avec une classe de txt. 203 00:14:26,230 --> 00:14:29,610 >> Donc, cela devient à notre première opération qui 204 00:14:29,610 --> 00:14:37,330 est doc.css durée, qui est la balise qui Je suis à la recherche au sein de toute cette URL. 205 00:14:37,330 --> 00:14:43,650 Et puis .txt fonctionne largement comme CSS fait lorsque vous êtes en train d'écrire CSS 206 00:14:43,650 --> 00:14:49,630 dans vos fichiers HTML par spécifiant une classe. 207 00:14:49,630 --> 00:14:57,980 Donc, cet opérateur volonté particulière spécifier une balise span avec la classe de txt. 208 00:14:57,980 --> 00:15:02,800 Et puis, si je laisse un espace, ce sera ensuite au sein de cette balise 209 00:15:02,800 --> 00:15:05,170 et de trouver ensuite un une étiquette au sein de cette. 210 00:15:05,170 --> 00:15:10,750 >> Donc, si je viens de mettre cela à le terminal, je devrais 211 00:15:10,750 --> 00:15:21,630 être capable de voir l'essentiel tout qui est dans ce laps de txt de classe. 212 00:15:21,630 --> 00:15:22,890 Donc, nous allons donner ce un aller. 213 00:15:22,890 --> 00:15:25,870 214 00:15:25,870 --> 00:15:27,756 Ruby Craigslist-grattoir. 215 00:15:27,756 --> 00:15:31,850 216 00:15:31,850 --> 00:15:37,250 Et en effet, ce qui nous donne tous ces étiquettes des diverses annonces qui 217 00:15:37,250 --> 00:15:40,400 sont sur la page Craigslist. 218 00:15:40,400 --> 00:15:45,670 >> Donc, si nous revenons, nous pouvons transformer cette dans quelque chose d'un peu plus utile. 219 00:15:45,670 --> 00:15:51,050 Peut-être que nous voulons seulement les liens. 220 00:15:51,050 --> 00:15:58,790 Parce que dans ce tag, je vais aussi avoir le lien hypertexte du chemin 221 00:15:58,790 --> 00:16:00,590 que cette page va. 222 00:16:00,590 --> 00:16:09,100 Donc, si vous regardez ce code ici, ce que je vais faire est lieu de Css, 223 00:16:09,100 --> 00:16:12,380 Je peux aller at_css. 224 00:16:12,380 --> 00:16:16,820 Et ce sera juste obtenir le premier élément de toutes ces choses. 225 00:16:16,820 --> 00:16:20,890 Donc, si je devais le faire dans le Code Je viens démontré précédemment, 226 00:16:20,890 --> 00:16:23,800 au lieu de retourner tous De ce fait, il serait tout simplement 227 00:16:23,800 --> 00:16:26,850 renverra le premier de ceux-ci. 228 00:16:26,850 --> 00:16:31,310 Voilà donc comment l'opérateur de at_css fonctionne. 229 00:16:31,310 --> 00:16:39,460 >> Donc, nous voulons stocker le chemin totalité de la première d'une balise. 230 00:16:39,460 --> 00:16:47,430 Et parce que nous donnera a-- donc nous allons encore utiliser Css. 231 00:16:47,430 --> 00:16:53,830 Mais parce que cela va donner nous ramène un tableau entier de balises, 232 00:16:53,830 --> 00:16:55,710 nous allons accès le premier élément. 233 00:16:55,710 --> 00:17:01,700 Donc, c'est une autre façon que vous pouvez accéder à un élément particulier si vous 234 00:17:01,700 --> 00:17:04,810 disposer une matrice d'éléments qui est retourné, 235 00:17:04,810 --> 00:17:11,930 parce que vous pouvez traiter tout ce qui retours .css comme un tableau, essentiellement. 236 00:17:11,930 --> 00:17:16,880 Et puis nous allons accéder à la attribut de référence de cette hypertexte. 237 00:17:16,880 --> 00:17:24,810 >> Donc, si vous jetez un oeil, si vous avez regardé vraiment proche ici, 238 00:17:24,810 --> 00:17:28,270 si vous venez de l'essentiel regardez la barre d'URL, 239 00:17:28,270 --> 00:17:33,880 ce qui est le chemin vous allez être grattage. 240 00:17:33,880 --> 00:17:41,565 Donc, si nous ne courons ce nouveau, et assurez-vous que nous avons économisé. 241 00:17:41,565 --> 00:17:47,040 242 00:17:47,040 --> 00:17:48,300 Vous pouvez vérifier à la maison. 243 00:17:48,300 --> 00:17:51,430 Cela correspond en fait avec ce lien. 244 00:17:51,430 --> 00:17:55,950 >> Alors pourquoi nous pourrions vouloir utiliser cette? 245 00:17:55,950 --> 00:17:57,870 Si vous voulez gratter la page et il a 246 00:17:57,870 --> 00:18:00,270 une page de liens comme Craigslist fait, vous 247 00:18:00,270 --> 00:18:03,210 peut-être envie d'aller ensuite dans chacune de ces liens 248 00:18:03,210 --> 00:18:05,120 puis gratter le contenu de ce qui 249 00:18:05,120 --> 00:18:08,520 est exactement ce que nous allons faire. 250 00:18:08,520 --> 00:18:11,660 >> Donc, une fois que vous avez tracé comme variables, je ne vraiment 251 00:18:11,660 --> 00:18:13,200 soucier de l'imprimer. 252 00:18:13,200 --> 00:18:15,420 Je dois juste l'enregistrer comme une variable. 253 00:18:15,420 --> 00:18:20,980 Et puis, je peux accéder à un autre la page de la même façon je accéder 254 00:18:20,980 --> 00:18:22,260 doc en premier lieu. 255 00:18:22,260 --> 00:18:25,920 Sauf avec l'URL, nous allons à utiliser interpolation de chaîne 256 00:18:25,920 --> 00:18:29,180 comme je décrivais dans Ruby plus tôt à ajouter 257 00:18:29,180 --> 00:18:32,010 le chemin d'accès à l'extrémité de la racine. 258 00:18:32,010 --> 00:18:38,970 >> Alors qu'est-ce que cela va faire est cela va mettre sur la voie 259 00:18:38,970 --> 00:18:42,360 que je grattais déjà puis transformer ce 260 00:18:42,360 --> 00:18:49,580 dans un nouvel élément, ce que vous voulez appellent it-- first_listing, par exemple. 261 00:18:49,580 --> 00:18:52,900 Mais je vais laisser sur l'article pour le moment, 262 00:18:52,900 --> 00:18:55,420 parce que ce que je suis en utilisant ici. 263 00:18:55,420 --> 00:19:02,900 >> Donc, dire que je voulais obtenir la description de la première affectation à Craigslist. 264 00:19:02,900 --> 00:19:04,740 Alors, je descendrais ici. 265 00:19:04,740 --> 00:19:10,660 Je voudrais cliquez sur Inspecter l'élément encore une fois, parce que cela est la description. 266 00:19:10,660 --> 00:19:14,350 Je descends ici et vois si je peux trouver comment je pourrais 267 00:19:14,350 --> 00:19:16,530 être capable de rechercher pour cette étiquette unique. 268 00:19:16,530 --> 00:19:19,530 Et dans ce cas, il a une pièce d'identité, ce qui nous mène 269 00:19:19,530 --> 00:19:26,810 à notre prochain façon de chercher balises, qui est avec un hashtag. 270 00:19:26,810 --> 00:19:30,670 >> Donc, pour les classes, vous pouvez utiliser l'opérateur point. 271 00:19:30,670 --> 00:19:38,610 Donc .txt spécifie une classe de txt, tandis que le hachage spécifie un ID. 272 00:19:38,610 --> 00:19:43,720 Donc dans ce cas, la balise est section, et l'ID est postingbody. 273 00:19:43,720 --> 00:19:47,780 >> Donc cela va et trouve l'first-- parce que nous sommes 274 00:19:47,780 --> 00:19:51,200 at_css-- utilisant ce va et constate que le premier élément 275 00:19:51,200 --> 00:19:57,180 arrive avec l'étiquette de l'article et l'ID de postingbody. 276 00:19:57,180 --> 00:20:02,636 Et puis, vous pouvez accéder à l'élément de texte de cet article retourné avec .text. 277 00:20:02,636 --> 00:20:06,230 Et puis nous pouvons stocker que dans la description. 278 00:20:06,230 --> 00:20:09,370 >> Alors, maintenant que nous avons une Description de la variable, 279 00:20:09,370 --> 00:20:14,850 nous pourrions être en mesure de le faire, par exemple, File I / O. Donc déposer I / O en Ruby 280 00:20:14,850 --> 00:20:21,310 est très similaire au fichier I / O en C où nous ouvrons un fichier. 281 00:20:21,310 --> 00:20:23,260 Nous pourrions écrire. 282 00:20:23,260 --> 00:20:25,060 Et puis nous allons fermer ce fichier. 283 00:20:25,060 --> 00:20:29,660 >> Donc, ici, nous sommes juste de nommer le déposer, une variable arbitraire. 284 00:20:29,660 --> 00:20:33,120 Nous aurions aussi pu simplement mettre cela ici. 285 00:20:33,120 --> 00:20:39,630 Nous avons une variable que nous allons stocker le fichier ouvert avec File.open. 286 00:20:39,630 --> 00:20:46,370 Et nous écrivons à ce fichier, de sorte que nous ouvrons avec l'opérateur w. 287 00:20:46,370 --> 00:20:54,280 Et puis nous avons mis dans la chaîne déposer auprès de l'opérateur de .puts. 288 00:20:54,280 --> 00:20:58,310 Et puis nous avons mis la variable que nous vouloir écrire sur le fichier dans ce. 289 00:20:58,310 --> 00:21:00,200 Et puis nous fermons simplement le fichier. 290 00:21:00,200 --> 00:21:04,000 >> Donc, si nous allons de l'avant et lancer ce, cela devrait produire un document 291 00:21:04,000 --> 00:21:10,840 avec description.txt qui sera cette description sein. 292 00:21:10,840 --> 00:21:14,015 Donc, si je ne cours aucun it--. 293 00:21:14,015 --> 00:21:17,520 294 00:21:17,520 --> 00:21:23,330 Il est produit un fichier texte avec, je l'espère, la même chose. 295 00:21:23,330 --> 00:21:25,850 296 00:21:25,850 --> 00:21:33,290 Donc, il y aurait eu une nouvelle affectation qui est venu pendant que je vous ai parlé. 297 00:21:33,290 --> 00:21:36,580 Et en effet, il semble qu'il y ait eu. 298 00:21:36,580 --> 00:21:43,380 Donc, si nous allons à cette moto classique, 1962 à 1966, qui semble correspondre. 299 00:21:43,380 --> 00:21:45,620 Et là vous allez. 300 00:21:45,620 --> 00:21:51,250 >> Voilà donc le plus élémentaire fonctionnalité de raclage. 301 00:21:51,250 --> 00:21:57,510 Nous pourrions avoir de la place en train d'écrire dans ce fichier, 302 00:21:57,510 --> 00:21:59,930 nous pouvons ajouter des choses à un tableau. 303 00:21:59,930 --> 00:22:03,770 Donc, si je déclare trois tableaux, titre, le prix et la description. 304 00:22:03,770 --> 00:22:06,310 305 00:22:06,310 --> 00:22:13,790 Et nous fonctionnons sur le point de doc maintenant. 306 00:22:13,790 --> 00:22:16,940 Nous pouvons passer et trouver tous les span.txt. 307 00:22:16,940 --> 00:22:21,710 Et rappelez-vous, ce retourne un tableau de tous les articles qu'il trouve. 308 00:22:21,710 --> 00:22:27,300 Et puis en Ruby, vous pouvez simplement utiliser .Chaque pour parcourir chaque article 309 00:22:27,300 --> 00:22:28,410 de la matrice. 310 00:22:28,410 --> 00:22:31,330 Et puis, pour chaque article, Je vais l'appeler 311 00:22:31,330 --> 00:22:34,620 un lien, parce que ce essentiellement ce qu'il est. 312 00:22:34,620 --> 00:22:46,830 >> Donc, si je mets chaque a.hdrlnk link.css de dot, ce qui se passe réellement sur le lien 313 00:22:46,830 --> 00:22:58,280 et de trouver dans ce lien une autre Élément HTML et la classe correspondante. 314 00:22:58,280 --> 00:23:04,990 Donc, si nous nous souvenons de ce que ce fut, le span.txt, 315 00:23:04,990 --> 00:23:13,160 vous pouvez voir- permettez-moi de revenir quick-- réelle au sein span.txt 316 00:23:13,160 --> 00:23:17,490 nous avons beaucoup d'autres classes. 317 00:23:17,490 --> 00:23:27,180 Donc l'intérieur span.txt, nous sommes à la recherche pour une une balise avec un hdrlnk de classe. 318 00:23:27,180 --> 00:23:29,890 Alors laissez-moi juste trouve que pour vous les gars réel rapide. 319 00:23:29,890 --> 00:23:37,390 320 00:23:37,390 --> 00:23:42,850 >> Donc vous pouvez voir ici, ceci est un un tag qui est en l'espace de txt de classe 321 00:23:42,850 --> 00:23:44,920 qui a le hdrlnk de classe. 322 00:23:44,920 --> 00:23:47,610 Et voilà bien ce que nous essayons de faire. 323 00:23:47,610 --> 00:23:54,680 >> Donc, nous essayons maintenant de stocker tous de ces liens à l'intérieur du titre. 324 00:23:54,680 --> 00:23:59,545 Et puis nous allons imprimer sur chacun de ces liens. 325 00:23:59,545 --> 00:24:00,360 Non désolé. 326 00:24:00,360 --> 00:24:04,530 Nous allons imprimer le prix de chacun de ceux-ci. 327 00:24:04,530 --> 00:24:09,350 Donc, nous allons courir ce vraiment rapide et voir ce qu'il fait. 328 00:24:09,350 --> 00:24:14,680 329 00:24:14,680 --> 00:24:17,720 >> Donc, ce juste fondamentalement allé à travers chacune des liaisons 330 00:24:17,720 --> 00:24:27,310 à son tour, consultée le tag en question, puis sorti le prix. 331 00:24:27,310 --> 00:24:33,910 Et il l'a fait que parce que, après vous avez tout dans le titre, 332 00:24:33,910 --> 00:24:37,260 nous avons simplement stocké le titre là. 333 00:24:37,260 --> 00:24:40,180 Nous venons stocké le lien dans le titre du tableau. 334 00:24:40,180 --> 00:24:47,720 Et dans ce pour le fonctionnement de la boucle, où, au lieu d'aller à a.hdrlnk, 335 00:24:47,720 --> 00:24:50,490 nous recherchons un span.price. 336 00:24:50,490 --> 00:24:56,500 Donc, si je peux vraiment trouver rapidement le prix, si vous inspectez l'élément, 337 00:24:56,500 --> 00:25:00,610 vous verrez qu'il est un laps avec la classe de prix. 338 00:25:00,610 --> 00:25:04,670 Et qui est essentiellement de savoir comment nous obtenons le prix là-bas. 339 00:25:04,670 --> 00:25:10,040 >> Voilà donc le vraiment cas de base de grattage. 340 00:25:10,040 --> 00:25:13,550 Voilà comment vous obtenez tous les éléments sur une page 341 00:25:13,550 --> 00:25:16,510 que, par exemple, vous savez déjà l'URL. 342 00:25:16,510 --> 00:25:21,050 >> Donc, si nous voulons obtenir un peu plus en profondeur, 343 00:25:21,050 --> 00:25:23,950 nous pouvons gratter pages de pages. 344 00:25:23,950 --> 00:25:28,480 Et pour cet exemple, je vais être sortie vers un fichier CSV. 345 00:25:28,480 --> 00:25:39,510 Donc, je suis exigeant csv ici parce que Ruby ne fait pas, à l'intérieur de lui-même, 346 00:25:39,510 --> 00:25:42,350 avoir la fonctionnalité juste sortie des fichiers CSV. 347 00:25:42,350 --> 00:25:45,030 Voilà donc super simple. 348 00:25:45,030 --> 00:25:48,710 Permettez-moi de passer à la suivante. 349 00:25:48,710 --> 00:25:51,640 350 00:25:51,640 --> 00:25:57,170 Nous avons couvert fichier I / O. Donc cela est similaire à la façon dont il est en C. 351 00:25:57,170 --> 00:26:00,870 Et avant que nous passions à Kimono, Je vais vous montrer comment vraiment rapide 352 00:26:00,870 --> 00:26:02,790 pour gratter sites au sein de sites. 353 00:26:02,790 --> 00:26:10,040 >> Donc nous avons déjà appris comment de déclarer les tableaux en Ruby. 354 00:26:10,040 --> 00:26:13,280 Donc, je suis juste déclarant une tas de tableaux arbitraires 355 00:26:13,280 --> 00:26:16,310 que je serai stocker des données au sein. 356 00:26:16,310 --> 00:26:20,680 doc fonctionne de la même façon comme il l'a fait dans le fichier précédent. 357 00:26:20,680 --> 00:26:23,580 Nous allons dans, trouver chacun des span.txt de. 358 00:26:23,580 --> 00:26:25,040 Nous savons déjà que. 359 00:26:25,040 --> 00:26:32,130 Voilà le conteneur dans lequel chaque lien dispose de toutes les données que nous voulons. 360 00:26:32,130 --> 00:26:40,800 >> Alors, voici ce que nous faisons est pour chaque lien txt span class, nous allons dans 361 00:26:40,800 --> 00:26:45,720 et nous allons trouver la balise, trouver le premier élément de cela. 362 00:26:45,720 --> 00:26:49,937 Rappelez-vous, Css retourne un tableau, de sorte que vous ne pouvez pas y accéder comme il est. 363 00:26:49,937 --> 00:26:51,520 Nous allons trouver le premier élément. 364 00:26:51,520 --> 00:26:56,430 Même si elle est un tableau d'un article, vous devez utiliser cette syntaxe, 365 00:26:56,430 --> 00:26:58,800 puis retirez l'attribut href. 366 00:26:58,800 --> 00:27:01,800 >> Donc nous avons fait cela plus tôt. 367 00:27:01,800 --> 00:27:04,440 Donc, cela devrait vous sembler familier. 368 00:27:04,440 --> 00:27:14,330 Et maintenant nous avons un tableau appelés chemins de tous nos liens 369 00:27:14,330 --> 00:27:16,590 que nous allons vouloir utiliser. 370 00:27:16,590 --> 00:27:21,350 Donc, si nous avons ce tableau de tous des chemins que nous voulons utiliser, 371 00:27:21,350 --> 00:27:26,840 nous pouvons alors créer un élément pour chaque de ces pages quand nous ouvrons cette page. 372 00:27:26,840 --> 00:27:31,150 Donc, comme nous avons vu aussi sur la syntaxe avant, où 373 00:27:31,150 --> 00:27:37,450 faire interpolation de chaîne avec le chemin ici, alors la syntaxe est juste pour le chemin. 374 00:27:37,450 --> 00:27:41,450 Et je pourrais nommer cette variable de tout nom arbitraire. 375 00:27:41,450 --> 00:27:43,070 >> Ceci est l'important. 376 00:27:43,070 --> 00:27:46,650 Ceci est le tableau que vous aurez être accéder à chaque élément. 377 00:27:46,650 --> 00:27:52,400 Mais quand vous dites pour le chemin dans les chemins, cela signifie que pour chaque élément de chemins, 378 00:27:52,400 --> 00:27:55,150 appeler chemin, et l'utiliser. 379 00:27:55,150 --> 00:27:59,266 Ceci est essentiellement comme quand vous faire une boucle et que vous utilisez int i. 380 00:27:59,266 --> 00:28:04,000 Ainsi, vous pouvez traiter le chemin que le la variable qui est incrémentée. 381 00:28:04,000 --> 00:28:07,820 >> Ensuite, pour chacun de ceux-ci, aller dans chacune de ces liens. 382 00:28:07,820 --> 00:28:11,710 Parce que nous sommes le stocker dans la page de l'article, si nous créons une nouvelle page à chaque fois 383 00:28:11,710 --> 00:28:13,330 nous accédons. 384 00:28:13,330 --> 00:28:20,560 Et puis, au sein de cette nouvelle page, trouver span.postingtitletext, span.price, 385 00:28:20,560 --> 00:28:22,240 puis la section # postingbody. 386 00:28:22,240 --> 00:28:28,430 Nous avons déjà couvert la section # postingbody lorsque nous avons examiné la description. 387 00:28:28,430 --> 00:28:34,890 >> Donc, nous pouvons aller voir dans le poste Craigslist, si vous êtes simplement en regardant le titre, 388 00:28:34,890 --> 00:28:38,810 vous pouvez le voir ici, postingtitletext durée. 389 00:28:38,810 --> 00:28:41,390 Et voilà pourquoi il est là. 390 00:28:41,390 --> 00:28:49,120 Et puis, pour le prix, vous pouvez accéder avec span class de prix. 391 00:28:49,120 --> 00:28:54,480 >> Donc, nous avons peut-être aussi pourrait vouloir stocker l'URL. 392 00:28:54,480 --> 00:28:58,580 Nous allons donc lancer ça à nouveau, le stocker dans un tableau, 393 00:28:58,580 --> 00:29:01,150 parce que si vous êtes à la recherche sur Craigslist, vous êtes 394 00:29:01,150 --> 00:29:05,290 probablement vouloir un moyen de se vous voyez quelque chose qui vous intéresse, 395 00:29:05,290 --> 00:29:06,620 revenir à ce site. 396 00:29:06,620 --> 00:29:10,480 Donc, vous voulez juste pour stocker l'URL pour l'amour de références. 397 00:29:10,480 --> 00:29:13,840 398 00:29:13,840 --> 00:29:19,630 >> Ceci est juste l'essentiel une autre syntaxe de la boucle. 399 00:29:19,630 --> 00:29:26,360 Je ne pouvais tout simplement ne paths.each place de chemin pour les chemins ayant un indice de. 400 00:29:26,360 --> 00:29:31,280 Et cette syntaxe est Ruby pour-- chemin que nous avons fait ici, 401 00:29:31,280 --> 00:29:33,920 déclarer une variable pour chaque élément. 402 00:29:33,920 --> 00:29:38,540 Et l'indice se comporte comme i en C pour boucles. 403 00:29:38,540 --> 00:29:41,280 Ainsi, vous pouvez garder la trace de ce que l'indice est. 404 00:29:41,280 --> 00:29:45,200 >> Donc, voici juste un chose peu pratique 405 00:29:45,200 --> 00:29:46,950 lorsque vous utilisez le grattoir. 406 00:29:46,950 --> 00:29:50,580 Si vous raclage des centaines de pages, faire en sorte que ça ne pendaison, 407 00:29:50,580 --> 00:29:53,320 Il va juste sortie, Je accéder cette page, 408 00:29:53,320 --> 00:29:55,960 et faire en sorte que il est toujours en cours. 409 00:29:55,960 --> 00:29:59,250 Mais pour nos besoins, parce il ya une centaine d'articles, 410 00:29:59,250 --> 00:30:08,000 Je vais accéder seulement trois d'entre eux de sorte que nous ne courons pas de temps ici. 411 00:30:08,000 --> 00:30:13,040 >> Mais avant d'en arriver là, je suis juste vais vous montrer très rapide, 412 00:30:13,040 --> 00:30:16,940 Je vais délivrer le titre, prix, la description et l'URL 413 00:30:16,940 --> 00:30:19,600 de chacun des liens que je l'ai gratté. 414 00:30:19,600 --> 00:30:23,720 Et alors ceci est juste le la syntaxe pour la bibliothèque CSV. 415 00:30:23,720 --> 00:30:25,240 Vous ouvrez un fichier CSV. 416 00:30:25,240 --> 00:30:27,070 Ceci est ce que je vais l'appeler. 417 00:30:27,070 --> 00:30:29,430 Ouvrez-le avec écriture do. 418 00:30:29,430 --> 00:30:33,830 Et puis CSV sera le fichier vous êtes tout dans l'entrée. 419 00:30:33,830 --> 00:30:37,800 Ceci est juste un test de cohérence pour je sais qu'il est en cours d'exécution. 420 00:30:37,800 --> 00:30:41,240 Et ceci est mon test de cohérence à savoir qu'il est terminé. 421 00:30:41,240 --> 00:30:46,670 Donc, je suis en train de titre en une ligne dans CSV, prix, URL, description, 422 00:30:46,670 --> 00:30:49,420 tout en lignes dans le fichier CSV. 423 00:30:49,420 --> 00:30:53,410 >> Donc, si nous allons and run ce maintenant-- et je viens 424 00:30:53,410 --> 00:31:04,710 assurez-vous que je l'ai sauvé it-- place de délivrer en sortie seulement au terminal, 425 00:31:04,710 --> 00:31:09,750 nous devrions avoir un CSV fichier qui est produit. 426 00:31:09,750 --> 00:31:13,500 Donc, ici, nous pouvons voir le CSV fichier qui a été produite. 427 00:31:13,500 --> 00:31:19,330 Ceci est la sortie de la Scape que je viens de rencontrer. 428 00:31:19,330 --> 00:31:23,030 Comme vous pouvez le voir ici, Accès à la page 0, 1, 2, 3. 429 00:31:23,030 --> 00:31:27,400 Ce sont les titres, prix, descriptions. 430 00:31:27,400 --> 00:31:31,710 Et si nous regardons cette CSV fichier que nous avons généré, 431 00:31:31,710 --> 00:31:35,700 vous pouvez voir son émis ici. 432 00:31:35,700 --> 00:31:40,350 Cela ne veut pas Excel, il est donc pas formaté en lignes et colonnes. 433 00:31:40,350 --> 00:31:45,140 Mais vous pouvez imaginer comment il pourrait être formaté. 434 00:31:45,140 --> 00:31:47,740 >> CSV défend des valeurs séparées par des virgules. 435 00:31:47,740 --> 00:31:50,090 Donc vous pouvez imaginer que cela pourrait être une rangée. 436 00:31:50,090 --> 00:31:54,700 Et chaque virgule serait indiquer une colonne séparée. 437 00:31:54,700 --> 00:32:00,010 Juste un mot d'caution-- parfois vous êtes 438 00:32:00,010 --> 00:32:02,260 racler les choses avec beaucoup de virgules. 439 00:32:02,260 --> 00:32:05,100 Donc, si vous êtes sortie dans un fichier CSV, 440 00:32:05,100 --> 00:32:10,340 il ne pourrait pas la sortie comme vous pourriez le penser. 441 00:32:10,340 --> 00:32:16,770 >> Voilà donc essentiellement tout il est au grattage base HTML 442 00:32:16,770 --> 00:32:20,110 pages avec Nokogiri. 443 00:32:20,110 --> 00:32:26,000 >> Donc, l'Internet étant innovant car il est venu 444 00:32:26,000 --> 00:32:33,220 avec un plus automatisé et GUI la version, bien moins robuste 445 00:32:33,220 --> 00:32:35,540 version de raclage divers sites Web. 446 00:32:35,540 --> 00:32:39,060 Et pour nos fins Je vais démontrer 447 00:32:39,060 --> 00:32:42,920 une extension Chrome appelé Kimono. 448 00:32:42,920 --> 00:32:46,690 Et tout ce que vous avez à faire est de naviguer à la page que vous voulez gratter. 449 00:32:46,690 --> 00:32:48,590 Vous cliquez sur un domaine d'intérêt. 450 00:32:48,590 --> 00:32:51,510 Vous calibrer les domaines, car il va automatiquement 451 00:32:51,510 --> 00:32:54,360 détecter ce qu'il pense vous voulez être grattage, 452 00:32:54,360 --> 00:32:56,280 et puis vous venez de créer une API. 453 00:32:56,280 --> 00:33:03,700 >> Donc, si nous étions à démontrer sur Craigslist, il serait effectivement pas travailler. 454 00:33:03,700 --> 00:33:08,290 Et voici ce que je rentrais à dire à ce sujet ne pas être aussi robuste. 455 00:33:08,290 --> 00:33:10,320 Il a du mal à la création de l'API. 456 00:33:10,320 --> 00:33:13,400 Mais comme une démonstration de ce qu'il allait faire, 457 00:33:13,400 --> 00:33:17,460 si vous installez l'extension Chrome, vous ne faites que vous cliquez dessus. 458 00:33:17,460 --> 00:33:21,750 Il Kimonofies la page, et puis vous cliquez sur la chose que vous voulez script. 459 00:33:21,750 --> 00:33:24,480 >> Donc, si je devais cliquer sur cela, il mettrait en évidence 460 00:33:24,480 --> 00:33:28,130 ce qu'il pense que je veux être racler cette page. 461 00:33:28,130 --> 00:33:33,660 Alors peut-être ce que je appelle annonces. 462 00:33:33,660 --> 00:33:36,430 Ceci est le nombre d'articles que je l'ai choisi. 463 00:33:36,430 --> 00:33:43,810 Et je peux juste confirmer ou de nier une certaine des autres listes proposées 464 00:33:43,810 --> 00:33:49,600 pour le faire ajouter à ce sera grattée. 465 00:33:49,600 --> 00:33:52,330 >> Alors maintenant, nous pouvons voir qu'il ya une centaine d'articles sélectionnés. 466 00:33:52,330 --> 00:33:58,060 Si je veux avoir un autre domaine que je racler aussi qui est liée à cela, 467 00:33:58,060 --> 00:34:02,540 dis que je veux gratter le prix ainsi, alors je peux faire la même chose. 468 00:34:02,540 --> 00:34:06,190 469 00:34:06,190 --> 00:34:11,550 >> Alors, voici une démonstration de la façon dont il est beaucoup moins robuste, parce que maintenant il est 470 00:34:11,550 --> 00:34:15,050 ramasser la ville à la place de tout le prix que je veux. 471 00:34:15,050 --> 00:34:16,989 Et maintenant il est ramassé 200 choses. 472 00:34:16,989 --> 00:34:19,880 Vous pouvez revenir en arrière et supprimer. 473 00:34:19,880 --> 00:34:21,449 Vous pouvez essayer de nouveau. 474 00:34:21,449 --> 00:34:24,250 Mais aucune garantie. 475 00:34:24,250 --> 00:34:29,909 Voilà comment cela fonctionne parfois. 476 00:34:29,909 --> 00:34:32,969 Comme vous le voyez ici, maintenant il est dit 96 ici. 477 00:34:32,969 --> 00:34:37,000 Il a ramassé la plupart des liens que vous voulez gratter, mais pas 478 00:34:37,000 --> 00:34:39,280 nécessairement toutes. 479 00:34:39,280 --> 00:34:43,909 >> Un autre outil utile de Kimono bien est que vous pouvez aller à des fonctionnalités avancées 480 00:34:43,909 --> 00:34:47,980 ici, aller à avancée, et il va vous montrer 481 00:34:47,980 --> 00:34:53,139 la répartition de l'unique moyen d'accéder au HTML 482 00:34:53,139 --> 00:34:54,909 étiquettes que vous voulez gratter. 483 00:34:54,909 --> 00:35:01,450 Donc, pour les annonces, si vous regardez ici, si vous accédez div p durée couvrent un, 484 00:35:01,450 --> 00:35:06,030 vous pouvez réellement utiliser simplement ceci dans votre code Nokogiri, 485 00:35:06,030 --> 00:35:10,780 là où auparavant nous avions span.txt pour accéder à chacune des listes. 486 00:35:10,780 --> 00:35:13,270 Si je veux juste le texte dans les annonces, 487 00:35:13,270 --> 00:35:18,950 Je pouvais entrée espace div p espace durée space durée d'un, 488 00:35:18,950 --> 00:35:21,570 et il permettrait d'atteindre le même effet. 489 00:35:21,570 --> 00:35:26,320 Et pour ceux d'entre vous qui sont intéressés en utilisant des expressions régulières, 490 00:35:26,320 --> 00:35:31,670 il arrive également vous donner la régulière expression sorte de chaîne à l'entrée 491 00:35:31,670 --> 00:35:34,900 pour trouver les choses vous essayez de trouver. 492 00:35:34,900 --> 00:35:44,130 >> Donc, il ya une autre fonctionnalité intéressante de Kimono où vous pouvez paginer, 493 00:35:44,130 --> 00:35:47,780 qui est non seulement je peux gratter les résultats de cette page, 494 00:35:47,780 --> 00:35:50,890 Je peux cliquer sur ce petit bouton ici, la pagination, 495 00:35:50,890 --> 00:35:55,580 spécifier le bouton qui me prendre à la page suivante, 496 00:35:55,580 --> 00:35:59,500 puis il va juste savoir que il peut parcourir à la page suivante, 497 00:35:59,500 --> 00:36:04,120 et puis gratter tous the-- aussi longtemps car il est le même format de course-- 498 00:36:04,120 --> 00:36:06,110 scape tous ces liens ainsi. 499 00:36:06,110 --> 00:36:15,230 >> Ainsi, parce que Kimono ne veut pas travaillons avec Craigslist, ce que nous avons fait 500 00:36:15,230 --> 00:36:19,790 est que je l'ai Kimonofied le Harvard Crimson. 501 00:36:19,790 --> 00:36:29,380 Je suis sorti un peu du genre de top vedette des articles, confirment ici. 502 00:36:29,380 --> 00:36:33,090 Dites tout cela. 503 00:36:33,090 --> 00:36:35,830 Je ai compilé cette API pour vous à l'avance. 504 00:36:35,830 --> 00:36:38,990 Mais sinon, ce que vous feriez est vous simplement cliquez sur Terminé. 505 00:36:38,990 --> 00:36:40,940 Entrez les détails de votre API. 506 00:36:40,940 --> 00:36:45,260 Réglez-le soit crawl automatisé ou manuel. 507 00:36:45,260 --> 00:36:48,460 Ainsi, vous pouvez mettre à jour votre des données toutes les 15 minutes, 508 00:36:48,460 --> 00:36:50,330 hebdomadaire, quotidienne, ce que vous voulez. 509 00:36:50,330 --> 00:36:51,160 Nommez votre API. 510 00:36:51,160 --> 00:36:52,790 Créer l'API. 511 00:36:52,790 --> 00:36:58,460 Pour votre bénéfice, je l'ai créé Crimson déjà en première page API. 512 00:36:58,460 --> 00:37:02,480 >> Donc, vous créez juste une compte sur Kimono, et il 513 00:37:02,480 --> 00:37:06,240 stockera toutes vos APIs pour vous. 514 00:37:06,240 --> 00:37:10,330 Donc, essentiellement, voilà tout votre éraflures séparés différents. 515 00:37:10,330 --> 00:37:18,250 >> Donc, si nous regardons ici, ceci est le liens opinions que je l'ai recueillie. 516 00:37:18,250 --> 00:37:21,290 Ce sont la vedette liens que je l'ai recueillie. 517 00:37:21,290 --> 00:37:24,090 Et ceux-ci sont les plus lus liens que je ai recueillies 518 00:37:24,090 --> 00:37:27,120 de cette plus récente scape API. 519 00:37:27,120 --> 00:37:30,790 >> Donc, si vous pouvez le voir ici, ceux-ci seraient la vedette, 520 00:37:30,790 --> 00:37:34,130 celles-ci seraient les opinions, qui, dans cet exemple, 521 00:37:34,130 --> 00:37:38,150 Je les ai combiné tous en une seule collection. 522 00:37:38,150 --> 00:37:42,780 Mais si vous jouez juste autour avec elle un peu, vous pouvez scinder 523 00:37:42,780 --> 00:37:45,090 et le diviser cependant vous voulez aussi longtemps 524 00:37:45,090 --> 00:37:47,520 comme la mise en forme est légèrement différente. 525 00:37:47,520 --> 00:37:51,320 >> Juste pour jouer avec cela, le crawl mis en place, l'un des inconvénients 526 00:37:51,320 --> 00:37:58,120 est que vous ne pouvez ramper 25 pages à la fois. 527 00:37:58,120 --> 00:38:00,430 Voilà l'un des facteurs limitants. 528 00:38:00,430 --> 00:38:03,060 Mais ici, si vous définissez à ramper manuel, cette 529 00:38:03,060 --> 00:38:06,100 comment vous pouvez dire que ce de mettre à jour vos données. 530 00:38:06,100 --> 00:38:11,010 Et ici vous pouvez voir votre historique d'analyse de tout ce que vous avez rampé. 531 00:38:11,010 --> 00:38:16,000 Et vous les gars peuvent revenir, inscrivez-vous, jouer avec toutes les différentes façons 532 00:38:16,000 --> 00:38:20,340 que vous pouvez modifier et utiliser vos données. 533 00:38:20,340 --> 00:38:24,580 >> Kimono peut être configuré pour racler les liens au sein des liens. 534 00:38:24,580 --> 00:38:29,700 Et vous voulez le faire en premier grattant une liste de liens, 535 00:38:29,700 --> 00:38:35,390 et puis en utilisant cette API comme un sauter point de départ pour une autre API 536 00:38:35,390 --> 00:38:36,710 que vous créez le script. 537 00:38:36,710 --> 00:38:42,040 Mais cela est plus compliqué que ce que nous allons entrer dans aujourd'hui. 538 00:38:42,040 --> 00:38:44,270 >> Voilà donc Kimono. 539 00:38:44,270 --> 00:38:46,980 Nous allons parler des avantages et les inconvénients de Nokogiri et kimono. 540 00:38:46,980 --> 00:38:50,380 >> Nokogiri, il est très rapide. 541 00:38:50,380 --> 00:38:51,640 Il est facile de tester. 542 00:38:51,640 --> 00:38:55,910 Vous pouvez simplement met rien à console, facile à configurer. 543 00:38:55,910 --> 00:39:00,400 Vous pouvez décider exactement ce que vous voulez gratter et magasin. 544 00:39:00,400 --> 00:39:02,060 Il n'y a pas de limite de pages. 545 00:39:02,060 --> 00:39:08,010 En fait, je l'utilisais pour gratter comme 1800 sites Web des écoles sud-africaines 546 00:39:08,010 --> 00:39:10,870 des e-mails pour un stage que je l'ai fait. 547 00:39:10,870 --> 00:39:16,060 >> Alors que cela est possible, bien que les meilleures pratiques serait de diviser le script. 548 00:39:16,060 --> 00:39:19,310 Parce que si elle échoue, alors vous ne recevez rien. 549 00:39:19,310 --> 00:39:22,790 Mais si vous faites une centaine, peut-être 200 pages à la fois, 550 00:39:22,790 --> 00:39:27,840 alors vous avez une chance d'au moins obtenir de façon fragmentaire, en particulier 551 00:39:27,840 --> 00:39:30,280 si vous avez un mauvais Internet. 552 00:39:30,280 --> 00:39:32,720 >> Malheureusement, il ne peut gratter HTML. 553 00:39:32,720 --> 00:39:35,190 Donc, si vous avez pages-- chargée dynamiquement 554 00:39:35,190 --> 00:39:39,480 et je vais vous montrer un exemple comme Kayak dans un second-- 555 00:39:39,480 --> 00:39:42,270 Malheureusement Nokogiri ne peut pas gratter que. 556 00:39:42,270 --> 00:39:45,700 >> Mais Kimono est aussi facile à utiliser. 557 00:39:45,700 --> 00:39:48,330 Comme vous l'avez vu, il est essentiel un point et clic. 558 00:39:48,330 --> 00:39:50,260 Il peut gratter JavaScript. 559 00:39:50,260 --> 00:39:53,790 Malheureusement, il ya un maximum à combien de pages vous pouvez gratter. 560 00:39:53,790 --> 00:39:55,710 Parfois, il est un peu difficile à configurer. 561 00:39:55,710 --> 00:39:57,240 Il devient confus. 562 00:39:57,240 --> 00:40:00,920 Mais il est certainement quelque chose à considérer 563 00:40:00,920 --> 00:40:05,930 si vous n'êtes pas essayer d'avoir un super-robuste scrape maintenable. 564 00:40:05,930 --> 00:40:09,010 Si vous voulez juste pour obtenir le tout hors tension d'une page rapidement, 565 00:40:09,010 --> 00:40:10,970 puis Kimono est vraiment bon outil à utiliser. 566 00:40:10,970 --> 00:40:16,490 Et comme je l'ai mentionné auparavant, il ya la fonctionnalité avancée de Kimono 567 00:40:16,490 --> 00:40:19,260 que vous montre comment accéder au HTML uniques 568 00:40:19,260 --> 00:40:24,210 élément, qui est super utile même si vous travaillez dans Nokogiri. 569 00:40:24,210 --> 00:40:30,370 >> Donc, si nous allons sur le site Kayak, pour par exemple, vous pouvez y voir est-- 570 00:40:30,370 --> 00:40:31,750 ou peut-être vous ne pouvez pas voir. 571 00:40:31,750 --> 00:40:38,910 Mais si je vous montre l'URL de Kayak, ceci est en fait juste l'URL source. 572 00:40:38,910 --> 00:40:43,800 Ceci est l'URL avant d'être modifiée par tous les scripts JavaScript 573 00:40:43,800 --> 00:40:45,350 qu'ils ont passe. 574 00:40:45,350 --> 00:40:52,420 Et ça va être différent d'inspecter l'élément. 575 00:40:52,420 --> 00:40:55,940 >> Donc, si vous allez à travers et vous correspondre les Inspecter l'élément 576 00:40:55,940 --> 00:41:00,340 code pour le code source, il est en fait va être différent. 577 00:41:00,340 --> 00:41:05,640 Et cela est essentiellement pourquoi Nokogiri ne peut pas gratter les sites chargés dynamiquement. 578 00:41:05,640 --> 00:41:08,810 Parce Nokogiri est grattant l'URL source, 579 00:41:08,810 --> 00:41:16,310 tandis Kimono est en fait raclage ce que vous êtes essentiellement 580 00:41:16,310 --> 00:41:18,260 voir dans Sélectionner un élément. 581 00:41:18,260 --> 00:41:23,880 >> Donc, si je vais à travers et je essayer de Kimonofy Kayak, 582 00:41:23,880 --> 00:41:26,600 Je peux effectivement passer par et sélectionnez le prix. 583 00:41:26,600 --> 00:41:32,360 Il est un peu plus difficile, et dans ce cas, il est 584 00:41:32,360 --> 00:41:36,600 voir réellement ce prix comme différent de ceux-ci. 585 00:41:36,600 --> 00:41:41,110 Ainsi, alors que vous pouvez ou configure-- si cela n'a pas été chargé dynamiquement, 586 00:41:41,110 --> 00:41:43,620 vous pouvez configurer Nokogiri pour obtenir tout cela. 587 00:41:43,620 --> 00:41:48,230 >> Étant donné que la mise en forme est légèrement différent pour cette annonce 588 00:41:48,230 --> 00:41:51,280 comme il est comparé au reste d'entre eux, et vous pouvez voir ici 589 00:41:51,280 --> 00:41:54,830 il est effectivement disparu et choisis tous les prix de vol. 590 00:41:54,830 --> 00:42:01,200 Peut-être que je veux choisir temps de vol ainsi. 591 00:42:01,200 --> 00:42:04,700 Et je ne peux passer et sorte de configurer cela. 592 00:42:04,700 --> 00:42:06,950 Je ne veux pas que. 593 00:42:06,950 --> 00:42:10,200 Je veux juste le temps du prochain vol. 594 00:42:10,200 --> 00:42:17,030 Et puis, après un couple de ces en passant par, il obtient l'image. 595 00:42:17,030 --> 00:42:19,080 Donc Kimono est assez intelligent. 596 00:42:19,080 --> 00:42:21,900 Il est tout simplement pas aussi robuste. 597 00:42:21,900 --> 00:42:26,710 >> Il ya quelques autres alternatives que vous pouvez utiliser. 598 00:42:26,710 --> 00:42:31,600 Et je vais vous montrer ici. 599 00:42:31,600 --> 00:42:35,790 Si vous êtes plus à l'aise dans Python au lieu de Ruby peut-être, 600 00:42:35,790 --> 00:42:39,290 il ya une bibliothèque appelée la Belle soupe. 601 00:42:39,290 --> 00:42:40,430 Vous pouvez l'utiliser. 602 00:42:40,430 --> 00:42:42,270 Il est très similaire à Nokogiri. 603 00:42:42,270 --> 00:42:44,620 Il a un peu plus de fonctionnalités. 604 00:42:44,620 --> 00:42:52,160 Vous pouvez trouver une balise HTML et puis déplacer ou se déplacer latéralement. 605 00:42:52,160 --> 00:42:54,690 >> Il ya PyQt. 606 00:42:54,690 --> 00:42:57,820 Cela peut effectivement gratter dynamique sites, car il est une sorte de 607 00:42:57,820 --> 00:43:02,540 WebKit est un qui prétend être un navigateur sans qu'il y fait 608 00:43:02,540 --> 00:43:03,670 étant un navigateur. 609 00:43:03,670 --> 00:43:07,490 Donc, il serait d'attendre pour tout le JavaScript pour charger d'abord, puis 610 00:43:07,490 --> 00:43:09,560 aller et essayer de gratter le site. 611 00:43:09,560 --> 00:43:13,560 >> Si vous voulez coller avec Ruby, vous peut remonter d'un niveau de Nokogiri. 612 00:43:13,560 --> 00:43:17,650 Vous pouvez utiliser Capybara avec une enveloppe Poltergeist. 613 00:43:17,650 --> 00:43:22,910 Et cela peut effectivement essentiellement faire la même chose 614 00:43:22,910 --> 00:43:26,610 que PyQt, qui est, il est un WebKit. 615 00:43:26,610 --> 00:43:29,610 Il attend la JavaScript pour charger en premier. 616 00:43:29,610 --> 00:43:33,340 Si vous bricoler avec elle assez, vous pouvez même obtenir à cliquer sur les choses. 617 00:43:33,340 --> 00:43:42,780 >> Donc, si il ya un lien qui est pas un href classique où 618 00:43:42,780 --> 00:43:46,350 le chemin est facilement accessible, et il est quelque chose qui détecte JavaScript 619 00:43:46,350 --> 00:43:49,490 un clic, vous pouvez réellement faire. 620 00:43:49,490 --> 00:43:53,430 La bibliothèque plus populaire pour simuler un utilisateur 621 00:43:53,430 --> 00:43:56,390 est en JavaScript, qui est PhantomJS. 622 00:43:56,390 --> 00:44:01,010 Cela peut évidemment gratter dynamique sites, car cela est essentiel 623 00:44:01,010 --> 00:44:04,270 faire semblant d'être Chrome sans l'interface utilisateur. 624 00:44:04,270 --> 00:44:09,970 >> Et puis, bien sûr le plus robuste, mais l'option la plus lente, 625 00:44:09,970 --> 00:44:13,260 est une automatisation du navigateur de sélénium. 626 00:44:13,260 --> 00:44:15,550 Et malheureusement, tu ne vas pas être 627 00:44:15,550 --> 00:44:19,770 mesure de le faire au sein de votre CS50 IDE. 628 00:44:19,770 --> 00:44:24,140 En raison essentiellement ce que fait est qu'il démarre votre Chrome, 629 00:44:24,140 --> 00:44:27,090 Firefox, quel que soit le navigateur que vous souhaitez utiliser, 630 00:44:27,090 --> 00:44:32,570 et il suit peut-être votre souris mouvement, tout ce que vous tapez dans, 631 00:44:32,570 --> 00:44:35,170 et ce juste une sorte de automatise ce processus. 632 00:44:35,170 --> 00:44:42,070 Donc, il a été développé comme une sorte de site web outil de test d'automatisation. 633 00:44:42,070 --> 00:44:45,910 Mais beaucoup de gens utilisent Sélénium pour gratter sites 634 00:44:45,910 --> 00:44:49,990 qu'ils ont un autre beaucoup de difficulté à gratter 635 00:44:49,990 --> 00:44:53,700 avec certains de ces autres outils plus rapides. 636 00:44:53,700 --> 00:44:57,530 >> Voilà donc tout ce que je dois pour le web grattage. 637 00:44:57,530 --> 00:44:58,090 S'amuser. 638 00:44:58,090 --> 00:45:01,762 639 00:45:01,762 --> 00:45:02,680 >> AUDIENCE: Question. 640 00:45:02,680 --> 00:45:04,016 >> ROBERT KRABEK: Oui. 641 00:45:04,016 --> 00:45:12,840 >> Public: Y at-il un mécanisme de hachage le site vous pouvez donc essentiellement 642 00:45:12,840 --> 00:45:14,207 passer par la suite. 643 00:45:14,207 --> 00:45:15,040 ROBERT KRABEK: Ouais. 644 00:45:15,040 --> 00:45:21,530 Donc, nous avons mis le, dans notre Ainsi, pour chacun d'eux, 645 00:45:21,530 --> 00:45:24,980 nous avons mis l'ensemble du site en doc. 646 00:45:24,980 --> 00:45:31,260 Et si vous pouviez juste prendre le doc variable et écrire dans un fichier. 647 00:45:31,260 --> 00:45:35,490 Donc, si je le voulais, je pouvais l'écrire dans un fichier HTML, 648 00:45:35,490 --> 00:45:39,280 puis au lieu d'utiliser OpenURI et une demande cURL, 649 00:45:39,280 --> 00:45:43,520 alors je ne pouvais tout simplement ouvrir doc HTML et ensuite chercher pour cela. 650 00:45:43,520 --> 00:45:47,960 >> AUDIENCE: Mais pouvez-vous préserver le genre d'expérience en ligne 651 00:45:47,960 --> 00:45:48,930 pendant que vous faites hors ligne. 652 00:45:48,930 --> 00:45:51,013 Par exemple. quand tu es vol pendant plusieurs heures, 653 00:45:51,013 --> 00:45:54,070 Je veux essentiellement archives l'ensemble du site. [INAUDIBLE] 654 00:45:54,070 --> 00:45:58,780 >> ROBERT KRABEK: Ouais, qui est exactly-- si littéralement ce que cela est fait 655 00:45:58,780 --> 00:46:03,010 est ça prend tout ce serait à cette URL. 656 00:46:03,010 --> 00:46:11,280 Donc, si nous avons couru cURL, il est prenant tout cela HTML, 657 00:46:11,280 --> 00:46:14,590 et il est le stocker l'intérieur de la doc variable. 658 00:46:14,590 --> 00:46:17,290 Ainsi donc, vous pouvez faire ce que vous voulez faire avec doc. 659 00:46:17,290 --> 00:46:18,575 Vous pouvez imprimer dans un fichier. 660 00:46:18,575 --> 00:46:19,950 AUDIENCE: Mais il est pas lié jusqu'à. 661 00:46:19,950 --> 00:46:20,780 Il est pas dynamique. 662 00:46:20,780 --> 00:46:22,770 Il est pas récursif, non? 663 00:46:22,770 --> 00:46:24,016 Vous voyez ce que je veux dire? 664 00:46:24,016 --> 00:46:28,359 Je suis en train de fondamentalement une sorte de hachage l'ensemble du site sur mon disque dur 665 00:46:28,359 --> 00:46:31,150 de sorte que je pouvais le faire essentiellement pendant plusieurs heures sans internet. 666 00:46:31,150 --> 00:46:32,025 >> ROBERT KRABEK: Droit. 667 00:46:32,025 --> 00:46:37,140 Donc, si je had-- alors où est mon fichier I / O? 668 00:46:37,140 --> 00:46:47,766 Alors ceci est l'image d'E / S. Donc, dire à la place De ce fait, ce que je appelle craigslist.html. 669 00:46:47,766 --> 00:46:52,620 670 00:46:52,620 --> 00:46:53,940 Je voudrais ouvrir que jusqu'à. 671 00:46:53,940 --> 00:46:59,020 Je ferais puts doc en elle. 672 00:46:59,020 --> 00:47:00,470 Je ferme le fichier. 673 00:47:00,470 --> 00:47:05,410 Et puis, juste parce que le CS50 IDE est sur le nuage, que cela soit. 674 00:47:05,410 --> 00:47:07,710 Je peux aller ici. 675 00:47:07,710 --> 00:47:09,320 Je peux télécharger le fichier. 676 00:47:09,320 --> 00:47:11,830 Et puis ce serait sur mon disque dur. 677 00:47:11,830 --> 00:47:13,930 Ainsi, vous pouvez le faire de cette façon. 678 00:47:13,930 --> 00:47:18,830 Ou si vous êtes à la maison, ne pas utiliser le CS50 IDE, comme Sublime ou quelque chose, 679 00:47:18,830 --> 00:47:21,900 cela est encore plus facile, parce tout cela est disponible localement, 680 00:47:21,900 --> 00:47:23,020 ne sont pas liés à l'Internet. 681 00:47:23,020 --> 00:47:24,720 >> AUDIENCE: Je vois. 682 00:47:24,720 --> 00:47:26,580 Ceci est pour un problème particulier. 683 00:47:26,580 --> 00:47:30,410 Pouvez-vous le faire de manière récursive afin que vous aller plusieurs couches profondes genre de chose? 684 00:47:30,410 --> 00:47:33,801 >> ROBERT KRABEK: Je peux télécharger des dossiers ainsi, si cela est ce que vous demandez. 685 00:47:33,801 --> 00:47:34,426 AUDIENCE: Ouais. 686 00:47:34,426 --> 00:47:39,890 687 00:47:39,890 --> 00:47:41,440 >> ROBERT KRABEK: Cool. 688 00:47:41,440 --> 00:47:43,182