1 00:00:00,000 --> 00:00:03,234 >> [REPRODUCCIÓN DE MÚSICA] 2 00:00:03,234 --> 00:00:05,275 3 00:00:05,275 --> 00:00:06,400 ROBERT KRABEK: Hola, chicos. 4 00:00:06,400 --> 00:00:09,980 Mi nombre es Robert Krabek, y Voy a estar enseñando chicos 5 00:00:09,980 --> 00:00:15,470 cómo raspar la web con Nokogiri, que es una biblioteca Ruby, 6 00:00:15,470 --> 00:00:17,566 y kimono, que es una extensión de Chrome. 7 00:00:17,566 --> 00:00:20,940 8 00:00:20,940 --> 00:00:25,010 >> Así que primero hay un par de cosas que usted 9 00:00:25,010 --> 00:00:28,790 puede hacer si tal vez usted ha estado haciendo todos los conjuntos de procesadores hasta el momento 10 00:00:28,790 --> 00:00:31,170 y el espacio de trabajo es conseguir un poco lleno. 11 00:00:31,170 --> 00:00:37,060 Podemos en realidad sólo ir y crear un nuevo espacio de trabajo para usted 12 00:00:37,060 --> 00:00:41,220 que acaba de hacer un nuevo proyecto de la marca en. 13 00:00:41,220 --> 00:00:46,160 Así que si usted desea continuar trabajando en el ID de plantilla CS50 14 00:00:46,160 --> 00:00:49,080 que tiene actualmente, sentirse libre, y usted puede simplemente 15 00:00:49,080 --> 00:00:54,700 instalar Nokogiri con CFLAGS joya equals-- instalar nokogiri. 16 00:00:54,700 --> 00:00:56,930 Pero por lo demás te voy a mostrar cómo establecer un nuevo uno. 17 00:00:56,930 --> 00:01:01,210 Y entonces este es esencialmente cayendo más ruedas de entrenamiento. 18 00:01:01,210 --> 00:01:07,120 Y usted está codificando como si fueras simplemente la codificación en Sublime o algo así. 19 00:01:07,120 --> 00:01:12,365 Así que si cambiamos la vuelta. 20 00:01:12,365 --> 00:01:14,930 21 00:01:14,930 --> 00:01:18,690 >> Así que decir que este es su actual CS 50 ID. 22 00:01:18,690 --> 00:01:21,490 Usted puede ir a Cloud9 aquí. 23 00:01:21,490 --> 00:01:22,725 Usted puede ir a su tablero de instrumentos. 24 00:01:22,725 --> 00:01:26,720 25 00:01:26,720 --> 00:01:29,950 Debe abrir pestaña Espacios de trabajo. 26 00:01:29,950 --> 00:01:32,980 Y entonces usted puede simplemente haga clic aquí, crear un nuevo espacio de trabajo. 27 00:01:32,980 --> 00:01:37,600 El nombre de su nuevo espacio de trabajo, tal prueba o raspado. 28 00:01:37,600 --> 00:01:42,700 Y a continuación, haga clic en esta ficha costumbre aquí, lugar de la ficha plantillas CS50. 29 00:01:42,700 --> 00:01:45,155 Y entonces usted puede ir y crear un nuevo espacio de trabajo. 30 00:01:45,155 --> 00:01:48,280 >> Yo ya he creado un espacio de trabajo aquí. 31 00:01:48,280 --> 00:01:50,640 Así que vamos a trabajar con esto. 32 00:01:50,640 --> 00:01:55,380 Y si ha creado una nueva espacio de trabajo por lo que con la ficha Personalizar, 33 00:01:55,380 --> 00:02:04,560 que sólo puede escribir gem install nokogiri, que no está pasando aquí. 34 00:02:04,560 --> 00:02:06,230 OK, que es un poco congelado. 35 00:02:06,230 --> 00:02:08,979 Pero puede escribir joya instalar nokogiri. 36 00:02:08,979 --> 00:02:15,970 Y eso debería ser todo lo que hay a la instalación. 37 00:02:15,970 --> 00:02:20,590 >> Como he dicho antes, si usted todavía está trabajando en su CS50 plantilla de ID, 38 00:02:20,590 --> 00:02:30,270 sólo tiene que escribir CFLAGS es igual a gem install nokogiri. 39 00:02:30,270 --> 00:02:33,130 Y yo ya he instalado desde aquí, así que no lo hará. 40 00:02:33,130 --> 00:02:38,500 Pero para aquellos que siguen junto, no dude en hacerlo. 41 00:02:38,500 --> 00:02:46,000 >> Así que una vez que tenga su Nokogiri área de trabajo o en la biblioteca instalada, 42 00:02:46,000 --> 00:02:49,500 Voy a darle un poco de un curso intensivo en la sintaxis de Ruby 43 00:02:49,500 --> 00:02:53,380 porque Nokogiri es una biblioteca de Ruby. 44 00:02:53,380 --> 00:03:03,710 Por lo que usted necesita saber algunos básicos Sintaxis de Ruby para trabajar con Nokogiri. 45 00:03:03,710 --> 00:03:08,750 Así que algunas diferencias básicas de lo que estamos acostumbrados 46 00:03:08,750 --> 00:03:13,370 tal vez si usted ha estado trabajando hasta ahora en tan sólo C y PHP, 47 00:03:13,370 --> 00:03:16,010 declara variables sin tipo. 48 00:03:16,010 --> 00:03:19,720 No utilice punto y coma, que es una especie de alivio. 49 00:03:19,720 --> 00:03:25,480 No hay paréntesis ahora alrededor para o mientras bucles, por ejemplo. 50 00:03:25,480 --> 00:03:29,460 Sólo tienes un bloque de código, y a continuación, poner fin al final de eso. 51 00:03:29,460 --> 00:03:32,380 No hay plus plus o menos negativo, por lo que sólo 52 00:03:32,380 --> 00:03:36,180 saber que para cuando que estás haciendo por bucles, 53 00:03:36,180 --> 00:03:38,620 sólo iguales más y menos iguales. 54 00:03:38,620 --> 00:03:43,310 Y en lugar de hachís incluyen, vamos a usar requerir y luego 55 00:03:43,310 --> 00:03:47,755 cualquiera que sea la biblioteca tratando cargar en su programa. 56 00:03:47,755 --> 00:03:51,610 57 00:03:51,610 --> 00:03:53,430 >> Ruby no es un lenguaje compilado. 58 00:03:53,430 --> 00:03:55,550 Así que eso es otro alivio. 59 00:03:55,550 --> 00:03:59,350 Es más similar a PHP donde es un lenguaje interpretado. 60 00:03:59,350 --> 00:04:03,570 Puede ejecutar cualquier script Ruby que se escribe con Ruby siguió 61 00:04:03,570 --> 00:04:07,380 por el nombre de su script o programa. 62 00:04:07,380 --> 00:04:13,000 Para indicar que se trata de un programa de Ruby, que acaba de terminar con .rb lugar de .c. 63 00:04:13,000 --> 00:04:17,440 Y no son variables matrices de tamaño en Ruby, 64 00:04:17,440 --> 00:04:23,200 lo cual es muy práctico cuando estás raspado y tal vez desee añadir 65 00:04:23,200 --> 00:04:26,090 datos que usted ha raspado en una matriz. 66 00:04:26,090 --> 00:04:31,960 Usted no tiene que malloc una nueva matriz y copiar la matriz de edad en la nueva matriz. 67 00:04:31,960 --> 00:04:36,150 Sólo puede añadir con los dos signos de flecha. 68 00:04:36,150 --> 00:04:39,820 Y no hay caracteres, hay sólo cadenas de una sola letra. 69 00:04:39,820 --> 00:04:44,760 Así que debe ser un poco más fácil. 70 00:04:44,760 --> 00:04:50,130 >> Así que sólo te daremos algunos ejemplos de algunas sintaxis básica de Ruby. 71 00:04:50,130 --> 00:04:57,100 Así que aquí se puede ver que en lugar de la barra barra, para comentar en Ruby, 72 00:04:57,100 --> 00:04:58,740 sólo tiene que utilizar el signo libra. 73 00:04:58,740 --> 00:05:04,990 Y la declaración de variables, que sólo tienes que escribir los iguales variables 74 00:05:04,990 --> 00:05:07,971 lo que quieras la variable sea. 75 00:05:07,971 --> 00:05:09,220 Pueden ser cadenas. 76 00:05:09,220 --> 00:05:14,120 Usted puede tener matriz, que rellena con valores. 77 00:05:14,120 --> 00:05:17,240 puts y las impresiones son similares. 78 00:05:17,240 --> 00:05:20,110 Para nuestros propósitos, la única diferencia es realmente 79 00:05:20,110 --> 00:05:25,500 que pone, lo que significa pone, simplemente pone una nueva línea 80 00:05:25,500 --> 00:05:27,440 carácter en lo que está imprimiendo. 81 00:05:27,440 --> 00:05:30,980 >> Así que si le damos un pequeño demostración aquí, 82 00:05:30,980 --> 00:05:41,800 podemos ejecutar este con-- abrir una nueva terminal. 83 00:05:41,800 --> 00:05:46,020 Puedes ver todos estos archivos que están en mi terminal. 84 00:05:46,020 --> 00:05:50,960 Y si me quedo Ruby, intro.rb rubí, que 85 00:05:50,960 --> 00:05:53,530 pone a cinco Hola Mather, Quincy, Carrier. 86 00:05:53,530 --> 00:05:54,410 Adams. 87 00:05:54,410 --> 00:05:59,295 Así que eso es todo lo que hay a las matrices que declaran. 88 00:05:59,295 --> 00:06:01,670 AUDIENCIA: Robert, ¿puedes hacer su fuente un poco más grande? 89 00:06:01,670 --> 00:06:02,461 ROBERT KRABEK: Sí. 90 00:06:02,461 --> 00:06:05,370 91 00:06:05,370 --> 00:06:12,280 Y puedo acercar porque no se puede acercar a las fuentes de terminal aparentemente. 92 00:06:12,280 --> 00:06:18,790 93 00:06:18,790 --> 00:06:24,630 >> Así es como imprimir las variables a su terminal. 94 00:06:24,630 --> 00:06:28,820 También puedes usar variables dentro de una cadena. 95 00:06:28,820 --> 00:06:33,720 Así recientemente en PHP, que podría haber aprendido 96 00:06:33,720 --> 00:06:37,340 que hay interpolación cadena. 97 00:06:37,340 --> 00:06:43,830 Así que si usted echa un vistazo aquí, si me declare tres variables, el nombre, la biblioteca, 98 00:06:43,830 --> 00:06:49,700 y de lenguaje, y pone, me escribir una cadena, hola mi nombre es. 99 00:06:49,700 --> 00:06:54,190 Y entonces, en lugar del PHP versión de la interpolación cadena 100 00:06:54,190 --> 00:06:58,960 el que se ve un poco de la misma familia, usted tiene un signo de número y, a continuación, 101 00:06:58,960 --> 00:07:01,220 una llave, y luego el nombre de la variable. 102 00:07:01,220 --> 00:07:07,350 Y así es como desea imprimir, dice, cualquiera que sea el nombre de la variable es. 103 00:07:07,350 --> 00:07:10,140 >> Y luego también puede concatenar cadenas. 104 00:07:10,140 --> 00:07:12,890 Rubí hace super fácil con el signo más. 105 00:07:12,890 --> 00:07:16,110 Sólo tienes una cuerda a la izquierda, más una variable 106 00:07:16,110 --> 00:07:18,860 o otra cadena más una cadena. 107 00:07:18,860 --> 00:07:23,500 Así que si puedo imprimir esto hacia fuera, lo que debería acaba de decir hola, mi nombre es Robert. 108 00:07:23,500 --> 00:07:27,340 Voy a estar enseñando Nokogiri en Ruby. 109 00:07:27,340 --> 00:07:35,370 >> Y vamos a confirmar que ese es de hecho la introducción ruby ​​caso--. 110 00:07:35,370 --> 00:07:36,480 Hola, mi nombre es Robert. 111 00:07:36,480 --> 00:07:40,160 Voy a estar enseñando Nokogiri en Ruby. 112 00:07:40,160 --> 00:07:45,600 >> Cambiando de tema, si else, que es un poco diferente 113 00:07:45,600 --> 00:07:49,800 de lo que podría ser utilizado para si usted ha estado trabajando en C. 114 00:07:49,800 --> 00:07:53,200 Usted no necesita los paréntesis. 115 00:07:53,200 --> 00:07:55,220 Usted no necesita las llaves. 116 00:07:55,220 --> 00:08:00,170 Y en lugar de otra persona si, es un elsif concatenados. 117 00:08:00,170 --> 00:08:07,260 Así que aquí, si me he declarado x arriba aquí, como podemos ver, x es todavía 5. 118 00:08:07,260 --> 00:08:11,100 Así que si x es menor que 3, que va a poner pequeñas. 119 00:08:11,100 --> 00:08:14,030 Si es inferior a 7, mediano, de lo grande. 120 00:08:14,030 --> 00:08:17,340 Así 5 es un número medio. 121 00:08:17,340 --> 00:08:22,270 Y termino este bloque de código con el extremo. 122 00:08:22,270 --> 00:08:24,920 >> Aquí está mi bucle for. 123 00:08:24,920 --> 00:08:28,240 Y esta sintaxis es también levemente diferente. 124 00:08:28,240 --> 00:08:33,500 El 0 a cinco simplemente esencialmente está declarando una series de 0-5. 125 00:08:33,500 --> 00:08:36,120 Así que hay cinco ranuras de la matriz. 126 00:08:36,120 --> 00:08:40,500 Y a continuación, para cada ranura en ese matriz, que será incrementar i. 127 00:08:40,500 --> 00:08:46,080 Así que este debe imprimir 0 a 5, o de 0 a 4. 128 00:08:46,080 --> 00:08:49,630 Y esto debe imprimir medio. 129 00:08:49,630 --> 00:08:51,370 >> Y voy a Just Blaze a través. 130 00:08:51,370 --> 00:08:54,466 Ustedes tendrán acceso a este código más adelante. 131 00:08:54,466 --> 00:08:55,965 Así que ustedes pueden ejecutar esta ustedes mismos. 132 00:08:55,965 --> 00:09:02,090 133 00:09:02,090 --> 00:09:06,620 >> Así que este es el bucle básico rato. 134 00:09:06,620 --> 00:09:12,230 Esta será sólo la impresión de j, por incremento a 1 hasta que llegamos a 5. 135 00:09:12,230 --> 00:09:18,320 >> Super rápido curso acelerado de Ruby sobre cómo escribir una función. 136 00:09:18,320 --> 00:09:24,460 En lugar de, por ejemplo, int factorial número, sólo tenemos def. 137 00:09:24,460 --> 00:09:28,450 Y esencialmente estás definir una función aquí. 138 00:09:28,450 --> 00:09:30,600 Este va a ser el nombre de la función, 139 00:09:30,600 --> 00:09:34,280 y esto es cualquier variable que quieren pasar a la función. 140 00:09:34,280 --> 00:09:36,760 Usted puede tener si declaraciones prospectivas dentro. 141 00:09:36,760 --> 00:09:38,030 Usted puede regresar. 142 00:09:38,030 --> 00:09:42,620 En este caso, estamos la definición de una forma recursiva 143 00:09:42,620 --> 00:09:45,000 función factorial aplicado. 144 00:09:45,000 --> 00:09:48,660 Así que sólo nos llamamos funciones en Ruby como este. 145 00:09:48,660 --> 00:09:54,700 >> Así que si he definido esto, puede llamar factorial, pase en 3, 146 00:09:54,700 --> 00:09:59,700 y luego 3 será la variable número que puedo usar dentro de la función. 147 00:09:59,700 --> 00:10:08,010 Y esto es sólo to_s convirtiendo la valor del factorial volver en una cadena. 148 00:10:08,010 --> 00:10:10,760 De lo contrario esto va a tirar diciendo un error oh, 149 00:10:10,760 --> 00:10:13,230 sin poder imprimir un string-- porque como usted recuerda, 150 00:10:13,230 --> 00:10:18,230 pone las que se pone string-- porque este factorial ha vuelto un número. 151 00:10:18,230 --> 00:10:21,850 Así que podemos convertir ese a una cadena como tales. 152 00:10:21,850 --> 00:10:27,856 Y a la inversa, también puede convertir una cadena a un entero con to_i. 153 00:10:27,856 --> 00:10:32,650 >> Así que hacer todo super simple, si acabo de comentar esto, guarde 154 00:10:32,650 --> 00:10:36,250 y ejecutar la función factorial. 155 00:10:36,250 --> 00:10:39,850 Debemos ser capaces de ver que factorial de 3 es 6. 156 00:10:39,850 --> 00:10:42,790 Y eso es cierto. 157 00:10:42,790 --> 00:10:46,160 >> Así que esa es tu curso intensivo en Ruby. 158 00:10:46,160 --> 00:10:53,550 Y ahora que sabes Ruby, podemos seguir a la Nokogiri básica raspado configurar. 159 00:10:53,550 --> 00:10:58,190 Básicamente todo lo que tienes que hacer es, en Ruby, requieren las bibliotecas. 160 00:10:58,190 --> 00:11:04,390 Y para nuestros propósitos vamos a estar utilizando la biblioteca OpenURI así como Nokogiri. 161 00:11:04,390 --> 00:11:07,870 Y entonces lo que hacer-- y va le dará la sintaxis para esto-- 162 00:11:07,870 --> 00:11:16,010 es abrir la URL tanto como lo haría en una solicitud cURL, que significa C URL. 163 00:11:16,010 --> 00:11:20,330 >> Así que toma el URL de la página web en cuestión. 164 00:11:20,330 --> 00:11:22,030 Puede almacenar en una variable. 165 00:11:22,030 --> 00:11:27,400 Y entonces usted puede buscar a través de ese variable para etiquetas HTML únicos usando 166 00:11:27,400 --> 00:11:30,590 el comando .css. 167 00:11:30,590 --> 00:11:34,360 Y entonces usted puede dar salida a la contenido a donde quieras. 168 00:11:34,360 --> 00:11:35,720 Puede comenzar en una base de datos. 169 00:11:35,720 --> 00:11:42,040 Usted puede dar salida en un archivo, o incluso sólo imprimirlo en la pantalla. 170 00:11:42,040 --> 00:11:47,290 >> Así que le mostraremos un raspador básica. 171 00:11:47,290 --> 00:11:52,570 Así que hasta aquí se puede ver que tenemos requiriendo nokogiri, requerir-uri abierta. 172 00:11:52,570 --> 00:11:57,150 Su configuración básica, vamos a llamarlo documento o doc, 173 00:11:57,150 --> 00:12:07,780 es igual a Nokogiri :: HTML abierto, que es el comando proporcionada a nosotros por el OpenURI 174 00:12:07,780 --> 00:12:08,920 biblioteca. 175 00:12:08,920 --> 00:12:14,000 Y vamos a estar buscando, para aquellos de ustedes que podrían estar viviendo en el patio, 176 00:12:14,000 --> 00:12:21,270 para bicicletas que se encuentran en Boston enumeran en la sección de bicicleta de Boston Craigslist 177 00:12:21,270 --> 00:12:22,020 sitio. 178 00:12:22,020 --> 00:12:26,460 >> Así que si usted no está familiarizado con cURL, sólo voy a 179 00:12:26,460 --> 00:12:28,930 mostrar lo cURL hará muy rápido. 180 00:12:28,930 --> 00:12:38,350 Si quisiera obtener toda la URL desde el sitio Craigslist, si escribo rizo, 181 00:12:38,350 --> 00:12:44,950 sólo vuelca toda la URL desde el sitio de la bicicleta Craigslist 182 00:12:44,950 --> 00:12:46,720 en mi terminal. 183 00:12:46,720 --> 00:12:49,130 Eso no es todo útil porque no lo hago 184 00:12:49,130 --> 00:12:53,330 quiero ir manualmente a través y encontrar lo que estoy buscando. 185 00:12:53,330 --> 00:13:01,590 Pero para que lo puedas veo que estoy en realidad 186 00:13:01,590 --> 00:13:13,966 utilizando el código de derecho, si nos fijamos en la URL de Craigslist en bikes-- 187 00:13:13,966 --> 00:13:17,460 por alguna razón no lo ha encontrado. 188 00:13:17,460 --> 00:13:20,340 Si nos fijamos en esta página y nos fijamos en la URL, 189 00:13:20,340 --> 00:13:23,970 esto debe ser idéntica a la solicitud cURL que acabo de envío. 190 00:13:23,970 --> 00:13:27,700 Y de hecho, eso es lo que está siendo almacenado en la variable doc. 191 00:13:27,700 --> 00:13:36,540 >> Así que cuando usted vuelve a nuestro código, a continuación, puede operar en esta variable doc 192 00:13:36,540 --> 00:13:40,660 mediante el uso de .css. 193 00:13:40,660 --> 00:13:49,240 Así que digo yo quería conseguir todos las etiquetas que son span.txt, 194 00:13:49,240 --> 00:13:51,740 y todos los a etiquetas dentro esa etiqueta. 195 00:13:51,740 --> 00:13:56,150 ¿Y por qué podríamos querer hacer esto, te escucho llorar? 196 00:13:56,150 --> 00:14:02,920 >> Si inspeccionamos Element, que le da un desglose de cómo se estructura la URL. 197 00:14:02,920 --> 00:14:06,200 Si me desplazo hacia abajo a través aquí, se puede ver 198 00:14:06,200 --> 00:14:08,770 lo que cada uno de estos diferentes elementos representa. 199 00:14:08,770 --> 00:14:13,410 Así que tal vez quiero acceder este elemento particular. 200 00:14:13,410 --> 00:14:16,820 Así que estoy usando desarrollador de Chrome herramientas para Inspeccionar Elemento. 201 00:14:16,820 --> 00:14:22,970 Veo aquí que esta es un una etiqueta en un lapso 202 00:14:22,970 --> 00:14:26,230 etiquetar con una clase de txt. 203 00:14:26,230 --> 00:14:29,610 >> Así que ahora se pone a nuestro primera operación que 204 00:14:29,610 --> 00:14:37,330 es palmo doc.css, que es la etiqueta que Busco dentro de toda esta URL. 205 00:14:37,330 --> 00:14:43,650 Y luego .txt funciona muy parecido a CSS hace cuando estás escribiendo CSS 206 00:14:43,650 --> 00:14:49,630 en sus archivos HTML por especificando una clase. 207 00:14:49,630 --> 00:14:57,980 Así que este operador en particular lo hará especificar una etiqueta span con la clase de txt. 208 00:14:57,980 --> 00:15:02,800 Y luego, si les dejo un espacio, esto luego ir dentro de esa etiqueta 209 00:15:02,800 --> 00:15:05,170 y luego encontrar un una etiqueta dentro de ese. 210 00:15:05,170 --> 00:15:10,750 >> Así que si acabo de poner esto a la terminal, que debería 211 00:15:10,750 --> 00:15:21,630 podrá ver esencialmente todo es decir dentro de este lapso de clase txt. 212 00:15:21,630 --> 00:15:22,890 Así que vamos a dar que una oportunidad. 213 00:15:22,890 --> 00:15:25,870 214 00:15:25,870 --> 00:15:27,756 rubí craigslist-rascador. 215 00:15:27,756 --> 00:15:31,850 216 00:15:31,850 --> 00:15:37,250 Y, en efecto, que nos da todas estas etiquetas de los diferentes listados que 217 00:15:37,250 --> 00:15:40,400 están en la página Craigslist. 218 00:15:40,400 --> 00:15:45,670 >> Así que si nos remontamos, podemos convertir esto en algo un poco más útil. 219 00:15:45,670 --> 00:15:51,050 Tal vez queremos sólo los vínculos. 220 00:15:51,050 --> 00:15:58,790 Porque dentro de esta etiqueta, voy también tener el hipervínculo de la ruta 221 00:15:58,790 --> 00:16:00,590 que esta página va a. 222 00:16:00,590 --> 00:16:09,100 Así que si nos fijamos en el código aquí lo que voy a hacer es en lugar de .css, 223 00:16:09,100 --> 00:16:12,380 Puedo ir at_css. 224 00:16:12,380 --> 00:16:16,820 Y esto acaba de obtener el primer elemento de todas esas cosas. 225 00:16:16,820 --> 00:16:20,890 Así que si yo fuera a hacer eso en el código Acabo demostrado anteriormente, 226 00:16:20,890 --> 00:16:23,800 en lugar de devolver todo de este, que sería sólo 227 00:16:23,800 --> 00:16:26,850 entregará el primero de ellos. 228 00:16:26,850 --> 00:16:31,310 Así es como funciona el operador at_css. 229 00:16:31,310 --> 00:16:39,460 >> Así que queremos almacenar el ruta de toda la primera una etiqueta. 230 00:16:39,460 --> 00:16:47,430 Y porque nos dará una A-- por lo que todavía vamos a utilizar .css. 231 00:16:47,430 --> 00:16:53,830 Pero debido a que este se va a dar nosotros volver a todo un conjunto de etiquetas, 232 00:16:53,830 --> 00:16:55,710 vamos a acceso el primer elemento. 233 00:16:55,710 --> 00:17:01,700 Así que esta es otra manera que pueda acceder a cualquier elemento en particular si 234 00:17:01,700 --> 00:17:04,810 tener un conjunto de elementos que se devuelve, 235 00:17:04,810 --> 00:17:11,930 porque se puede tratar cualquier cosa que vuelve .css como una matriz, esencialmente. 236 00:17:11,930 --> 00:17:16,880 Y luego vamos a tener acceso a la atributo de referencia de hipertexto de esta. 237 00:17:16,880 --> 00:17:24,810 >> Así que si usted echa un vistazo, si te veías muy cerca de aquí, 238 00:17:24,810 --> 00:17:28,270 si lo que esencialmente mirar la barra de URL, 239 00:17:28,270 --> 00:17:33,880 este es el camino que usted va a ser raspado. 240 00:17:33,880 --> 00:17:41,565 Así que si nos corremos esto de nuevo, y asegurarnos de que hemos ahorrado él. 241 00:17:41,565 --> 00:17:47,040 242 00:17:47,040 --> 00:17:48,300 Usted puede comprobar en casa. 243 00:17:48,300 --> 00:17:51,430 Este hecho coincide con este enlace. 244 00:17:51,430 --> 00:17:55,950 >> ¿Entonces por qué podríamos querer usar esto? 245 00:17:55,950 --> 00:17:57,870 Si desea raspar la página y tiene 246 00:17:57,870 --> 00:18:00,270 una página de enlaces como Craigslist hace, 247 00:18:00,270 --> 00:18:03,210 puede ser que desee ir a continuación en cada uno de esos enlaces 248 00:18:03,210 --> 00:18:05,120 y luego raspar la contenido de ese, que 249 00:18:05,120 --> 00:18:08,520 es exactamente lo que vamos a hacer. 250 00:18:08,520 --> 00:18:11,660 >> Así que una vez que tenga trayectoria como variables, ya no muy 251 00:18:11,660 --> 00:18:13,200 se preocupan por imprimirlo. 252 00:18:13,200 --> 00:18:15,420 Sólo tengo que guardarlo como una variable. 253 00:18:15,420 --> 00:18:20,980 Y entonces puedo acceder a otro La página de la misma manera puedo acceder 254 00:18:20,980 --> 00:18:22,260 doc en el primer lugar. 255 00:18:22,260 --> 00:18:25,920 Excepto con la URL, vamos utilizar interpolación de cadenas 256 00:18:25,920 --> 00:18:29,180 como si estuviera describiendo en Rubí anterior sobre anexar 257 00:18:29,180 --> 00:18:32,010 el camino hasta el final de la raíz. 258 00:18:32,010 --> 00:18:38,970 >> Así que lo que esto va a hacer es esto va a poner en el camino 259 00:18:38,970 --> 00:18:42,360 que Raspé previamente y luego convertir ese 260 00:18:42,360 --> 00:18:49,580 en un nuevo elemento, lo que quieras llaman it-- first_listing, por ejemplo. 261 00:18:49,580 --> 00:18:52,900 Pero yo voy a dejar que sobre el tema, por ahora, 262 00:18:52,900 --> 00:18:55,420 porque eso es lo que estoy usando aquí. 263 00:18:55,420 --> 00:19:02,900 >> Así que decir que me quería conseguir la descripción de la primera publicación en Craigslist. 264 00:19:02,900 --> 00:19:04,740 Así que me gustaría ir por aquí. 265 00:19:04,740 --> 00:19:10,660 Me clic en Inspeccionar Elemento de nuevo, porque se trata de la descripción. 266 00:19:10,660 --> 00:19:14,350 Me gustaría ir aquí y veo si puedo encontrar cómo podría 267 00:19:14,350 --> 00:19:16,530 ser capaces de buscar esta etiqueta única. 268 00:19:16,530 --> 00:19:19,530 Y en este caso, tiene una identificación, lo que nos lleva 269 00:19:19,530 --> 00:19:26,810 a nuestro siguiente manera de buscar etiquetas, que es con un hashtag. 270 00:19:26,810 --> 00:19:30,670 >> Así que para las clases, puede utilizar el operador punto. 271 00:19:30,670 --> 00:19:38,610 Así .txt está especificando una clase de txt, mientras que el hash especifica un ID. 272 00:19:38,610 --> 00:19:43,720 Así pues, en este caso, la etiqueta es sección y el ID es postingbody. 273 00:19:43,720 --> 00:19:47,780 >> Así que esto va y encuentra el primero-- porque somos 274 00:19:47,780 --> 00:19:51,200 utilizando at_css-- este va y Busca el primer elemento que 275 00:19:51,200 --> 00:19:57,180 viene con la etiqueta de la sección y el ID de postingbody. 276 00:19:57,180 --> 00:20:02,636 Y entonces usted puede acceder al elemento de texto de ese artículo devuelto con .text. 277 00:20:02,636 --> 00:20:06,230 Y entonces podemos almacenar que en la descripción. 278 00:20:06,230 --> 00:20:09,370 >> Así que ahora que tenemos una descripción de la variable, 279 00:20:09,370 --> 00:20:14,850 podríamos ser capaces de hacer, por ejemplo, File I / O. Así presentar de E / S en Ruby 280 00:20:14,850 --> 00:20:21,310 es muy similar al archivo de E / S en C, donde abrimos un archivo. 281 00:20:21,310 --> 00:20:23,260 Podríamos escribir en él. 282 00:20:23,260 --> 00:20:25,060 Y luego vamos a cerrar ese archivo. 283 00:20:25,060 --> 00:20:29,660 >> Así que aquí, sólo estamos nombrando el presentar, alguna variable arbitraria. 284 00:20:29,660 --> 00:20:33,120 También podríamos haber sólo hay que poner esto aquí. 285 00:20:33,120 --> 00:20:39,630 Tenemos una variable que estamos almacenando el archivo abierto como con File.open. 286 00:20:39,630 --> 00:20:46,370 Y estamos escribiendo a este archivo, así que lo abrimos con el operador w. 287 00:20:46,370 --> 00:20:54,280 Y luego ponemos cadena en la presentar ante el operador .puts. 288 00:20:54,280 --> 00:20:58,310 Y luego ponemos la variable que nos quiero escribir en el fichero dentro de ese. 289 00:20:58,310 --> 00:21:00,200 Y luego pues sólo cerramos el archivo. 290 00:21:00,200 --> 00:21:04,000 >> Así que si seguimos adelante y ejecutar esto, esto debería producir un documento 291 00:21:04,000 --> 00:21:10,840 con description.txt que lo hará tener esta descripción dentro de ella. 292 00:21:10,840 --> 00:21:14,015 Así que si me quedo it-- no. 293 00:21:14,015 --> 00:21:17,520 294 00:21:17,520 --> 00:21:23,330 Se produce un archivo de texto con, con suerte, la misma cosa. 295 00:21:23,330 --> 00:21:25,850 296 00:21:25,850 --> 00:21:33,290 Así que podría haber habido un nuevo anuncio que ha surgido mientras yo he estado hablando. 297 00:21:33,290 --> 00:21:36,580 Y de hecho parece que se ha producido. 298 00:21:36,580 --> 00:21:43,380 Así que si nos vamos a esta moto clásica, 1.962 a 1966, que parece coincidir. 299 00:21:43,380 --> 00:21:45,620 Y ahí lo tienes. 300 00:21:45,620 --> 00:21:51,250 >> Así que eso es lo más básico funcionalidad de raspado. 301 00:21:51,250 --> 00:21:57,510 Podríamos tener lugar de sólo escribir a este archivo, 302 00:21:57,510 --> 00:21:59,930 podemos añadir cosas a una matriz. 303 00:21:59,930 --> 00:22:03,770 Así que si me declaro tres matrices, título, precio y descripción. 304 00:22:03,770 --> 00:22:06,310 305 00:22:06,310 --> 00:22:13,790 Y estamos operando en el elemento doc ahora. 306 00:22:13,790 --> 00:22:16,940 Podemos ir a través y encontrar toda la span.txt. 307 00:22:16,940 --> 00:22:21,710 Y recuerde, esto devuelve una matriz de todos los elementos que encuentra. 308 00:22:21,710 --> 00:22:27,300 Y luego, en Rubí, sólo puede utilizar .Cada para recorrer cada artículo 309 00:22:27,300 --> 00:22:28,410 de la matriz. 310 00:22:28,410 --> 00:22:31,330 Y a continuación, para cada artículo, Yo sólo voy a llamarlo 311 00:22:31,330 --> 00:22:34,620 un vínculo, porque eso es esencialmente lo que es. 312 00:22:34,620 --> 00:22:46,830 >> Así que si me pongo cada a.hdrlnk punto link.css, este es en realidad va al enlace 313 00:22:46,830 --> 00:22:58,280 y encontrar dentro de ese enlace otra Elemento HTML y la clase correspondiente. 314 00:22:58,280 --> 00:23:04,990 Así que si tenemos en cuenta lo este fue el span.txt, 315 00:23:04,990 --> 00:23:13,160 puede ver- permítanme volver quick-- real dentro span.txt 316 00:23:13,160 --> 00:23:17,490 tenemos un montón de otras clases. 317 00:23:17,490 --> 00:23:27,180 Así que dentro de span.txt, estamos buscando para una una etiqueta con un hdrlnk clase. 318 00:23:27,180 --> 00:23:29,890 Así que permítanme encuentro que para ustedes muy rápido. 319 00:23:29,890 --> 00:23:37,390 320 00:23:37,390 --> 00:23:42,850 >> Así que usted puede ver aquí, este es un una etiqueta eso es en el lapso de clase txt 321 00:23:42,850 --> 00:23:44,920 que tiene el hdrlnk clase. 322 00:23:44,920 --> 00:23:47,610 Y eso es precisamente lo que que estamos tratando de conseguir. 323 00:23:47,610 --> 00:23:54,680 >> Así que ahora estamos tratando de almacenar todos de esos vínculos dentro del título. 324 00:23:54,680 --> 00:23:59,545 Y luego vamos a imprimir a cabo cada uno de esos enlaces. 325 00:23:59,545 --> 00:24:00,360 No, lo siento. 326 00:24:00,360 --> 00:24:04,530 Vamos a imprimir el precio de cada uno de esos. 327 00:24:04,530 --> 00:24:09,350 Así que vamos a correr esta realidad rápido y ver lo que hace. 328 00:24:09,350 --> 00:24:14,680 329 00:24:14,680 --> 00:24:17,720 >> Así que esto sólo básicamente fue a través de cada uno de los enlaces 330 00:24:17,720 --> 00:24:27,310 a su vez, visitada la etiqueta en cuestión, y luego sacó el precio. 331 00:24:27,310 --> 00:24:33,910 Y lo hizo porque después lo tienes todo en el título, 332 00:24:33,910 --> 00:24:37,260 que acabamos guardaron el título allí. 333 00:24:37,260 --> 00:24:40,180 Acabamos guardaron el enlace dentro del título matriz. 334 00:24:40,180 --> 00:24:47,720 Y en esto para el funcionamiento de bucle, donde en lugar de ir a a.hdrlnk, 335 00:24:47,720 --> 00:24:50,490 estamos buscando un span.price. 336 00:24:50,490 --> 00:24:56,500 Así que si puedo realmente encontrar rápidamente el precio, si usted examina el elemento, 337 00:24:56,500 --> 00:25:00,610 verás que es un lapso con la clase de precio. 338 00:25:00,610 --> 00:25:04,670 Y eso es básicamente cómo estamos recibiendo el precio allí. 339 00:25:04,670 --> 00:25:10,040 >> Así que esa es la verdad caso básico de raspado. 340 00:25:10,040 --> 00:25:13,550 Así es como se consigue todo los elementos de una página 341 00:25:13,550 --> 00:25:16,510 que, por ejemplo, que ya conocen la URL de. 342 00:25:16,510 --> 00:25:21,050 >> Así que si queremos conseguir un poco más en profundidad, 343 00:25:21,050 --> 00:25:23,950 podemos raspar las páginas de páginas. 344 00:25:23,950 --> 00:25:28,480 Y para este ejemplo, voy a ser la salida a un archivo CSV. 345 00:25:28,480 --> 00:25:39,510 Así que estoy requiriendo csv aquí porque Ruby no tiene, dentro de sí mismo, 346 00:25:39,510 --> 00:25:42,350 tener la funcionalidad a archivos CSV salida justa. 347 00:25:42,350 --> 00:25:45,030 Así que eso es super simple. 348 00:25:45,030 --> 00:25:48,710 Déjenme ir a la siguiente. 349 00:25:48,710 --> 00:25:51,640 350 00:25:51,640 --> 00:25:57,170 Cubrimos archivo de E / S. Así que esto es similar a lo que pasa en C. 351 00:25:57,170 --> 00:26:00,870 Y antes de pasar a Kimono, Voy a mostrarles que realmente rápida cómo 352 00:26:00,870 --> 00:26:02,790 para raspar los sitios dentro de lugares de interés. 353 00:26:02,790 --> 00:26:10,040 >> Así que ya aprendimos para declarar matrices en Ruby. 354 00:26:10,040 --> 00:26:13,280 Así que estoy declarando un manojo de matrices arbitrarias 355 00:26:13,280 --> 00:26:16,310 que va a almacenar datos dentro. 356 00:26:16,310 --> 00:26:20,680 doc está funcionando de la misma manera como lo hizo en el archivo anterior. 357 00:26:20,680 --> 00:26:23,580 Vamos a entrar, encontrando cada uno de los de span.txt. 358 00:26:23,580 --> 00:26:25,040 Ya sabemos que. 359 00:26:25,040 --> 00:26:32,130 Ese es el recipiente dentro del cual cada enlace tiene todos los datos que queremos. 360 00:26:32,130 --> 00:26:40,800 >> Así que aquí lo que estamos haciendo es que cada enlace de span class txt, vamos en 361 00:26:40,800 --> 00:26:45,720 y estamos encontrando la una etiqueta, encontrar el primer elemento de eso. 362 00:26:45,720 --> 00:26:49,937 Recuerde, .css devuelve una matriz, por lo que no sólo puede acceder a ella de inmediato. 363 00:26:49,937 --> 00:26:51,520 Vamos a encontrar el primer elemento. 364 00:26:51,520 --> 00:26:56,430 Incluso si se trata de una matriz de un solo artículo, usted tiene que utilizar esta sintaxis, 365 00:26:56,430 --> 00:26:58,800 y luego sacar el atributo href. 366 00:26:58,800 --> 00:27:01,800 >> Así lo hicimos antes. 367 00:27:01,800 --> 00:27:04,440 Así que esto debe parecer familiar. 368 00:27:04,440 --> 00:27:14,330 Y por lo que ahora tenemos una matriz llamados caminos de todos nuestros enlaces 369 00:27:14,330 --> 00:27:16,590 que vamos a querer utilizar. 370 00:27:16,590 --> 00:27:21,350 Así que si tenemos este conjunto de todos de los caminos que queremos utilizar, 371 00:27:21,350 --> 00:27:26,840 entonces podemos crear un artículo para cada uno de esas páginas cuando abrimos esa página. 372 00:27:26,840 --> 00:27:31,150 Así como también vimos en la sintaxis antes, donde 373 00:27:31,150 --> 00:27:37,450 haciendo interpolación cadena con la ruta aquí, por lo que la sintaxis es sólo para la ruta. 374 00:27:37,450 --> 00:27:41,450 Y yo podría llamar a esta variable de cualquier nombre arbitrario. 375 00:27:41,450 --> 00:27:43,070 >> Este es el importante. 376 00:27:43,070 --> 00:27:46,650 Esta es la matriz que Tú ser acceder a cada elemento. 377 00:27:46,650 --> 00:27:52,400 Pero cuando dices de ruta en caminos, esto significa para cada elemento de caminos, 378 00:27:52,400 --> 00:27:55,150 llamarlo camino, y usar eso. 379 00:27:55,150 --> 00:27:59,266 Esto es esencialmente igual que cuando hacer un bucle y se utiliza int i. 380 00:27:59,266 --> 00:28:04,000 Así que usted puede tratar el camino que el variable que está incrementando. 381 00:28:04,000 --> 00:28:07,820 >> Y a continuación, para cada uno de aquellos, entrar en cada uno de esos enlaces. 382 00:28:07,820 --> 00:28:11,710 Porque estamos almacenarlo en la página del artículo, por lo que estamos creando una nueva página cada vez que 383 00:28:11,710 --> 00:28:13,330 accedemos a ella. 384 00:28:13,330 --> 00:28:20,560 Y luego dentro de esa nueva página, encontrará span.postingtitletext, span.price, 385 00:28:20,560 --> 00:28:22,240 y luego la sección # postingbody. 386 00:28:22,240 --> 00:28:28,430 Ya hemos cubierto la sección # postingbody cuando nos fijamos en la descripción. 387 00:28:28,430 --> 00:28:34,890 >> Así que podemos ir a ver en el post Craigslist, si lo que buscas en el título, 388 00:28:34,890 --> 00:28:38,810 se puede ver aquí, postingtitletext palmo. 389 00:28:38,810 --> 00:28:41,390 Y es por eso que está ahí. 390 00:28:41,390 --> 00:28:49,120 Y luego por el precio, que puede acceder a ella con span class de precio. 391 00:28:49,120 --> 00:28:54,480 >> Así que quizá también podría desea almacenar la URL. 392 00:28:54,480 --> 00:28:58,580 Así que sólo tendremos que ejecutar este de nuevo, guárdelo en una matriz, 393 00:28:58,580 --> 00:29:01,150 porque si lo que buscas en Craigslist, eres 394 00:29:01,150 --> 00:29:05,290 probablemente va a querer una manera, si usted ve algo que le interesa, 395 00:29:05,290 --> 00:29:06,620 volver a ese sitio. 396 00:29:06,620 --> 00:29:10,480 Así que lo que desea es almacenar la dirección URL de referencias sake. 397 00:29:10,480 --> 00:29:13,840 398 00:29:13,840 --> 00:29:19,630 >> Esto es sólo esencialmente otra sintaxis del bucle for. 399 00:29:19,630 --> 00:29:26,360 Yo sólo pude hacer paths.each lugar por un camino en caminos con índice. 400 00:29:26,360 --> 00:29:31,280 Y esta es la sintaxis de Ruby para-- camino es lo que hemos hecho hasta aquí, 401 00:29:31,280 --> 00:29:33,920 declarar una variable para cada elemento. 402 00:29:33,920 --> 00:29:38,540 Y el índice se comporta como el i en C para los bucles. 403 00:29:38,540 --> 00:29:41,280 Así que usted puede realizar un seguimiento de lo que el índice es. 404 00:29:41,280 --> 00:29:45,200 >> Así que aquí es sólo una pequeña cosa conveniente 405 00:29:45,200 --> 00:29:46,950 para cuando se está ejecutando el rascador. 406 00:29:46,950 --> 00:29:50,580 Si usted está raspando cientos de páginas, para asegurarse de que no está colgado, 407 00:29:50,580 --> 00:29:53,320 Se acaba de salida, Estoy acceder a esta página, 408 00:29:53,320 --> 00:29:55,960 y asegurarse de que todavía está continuando. 409 00:29:55,960 --> 00:29:59,250 Pero para nuestros propósitos, ya que hay un centenar de artículos, 410 00:29:59,250 --> 00:30:08,000 Voy a tener acceso a sólo tres de ellos por lo que no nos quedemos sin tiempo aquí. 411 00:30:08,000 --> 00:30:13,040 >> Pero antes de llegar a eso, yo sólo soy va a mostrar que realmente rápida, 412 00:30:13,040 --> 00:30:16,940 Voy a emitir el título, precio, descripción y URL 413 00:30:16,940 --> 00:30:19,600 de cada uno de los enlaces que he raspado. 414 00:30:19,600 --> 00:30:23,720 Y entonces esto es sólo el sintaxis para la biblioteca de CSV. 415 00:30:23,720 --> 00:30:25,240 Usted abre un archivo CSV. 416 00:30:25,240 --> 00:30:27,070 Esto es lo que voy a llamarlo. 417 00:30:27,070 --> 00:30:29,430 Abra con escritura do. 418 00:30:29,430 --> 00:30:33,830 Y luego CSV será el archivo que usted está introduciendo todo en. 419 00:30:33,830 --> 00:30:37,800 Esto es sólo una prueba de cordura para yo sé que se está ejecutando. 420 00:30:37,800 --> 00:30:41,240 Y esta es mi prueba de cordura saber que se ha completado. 421 00:30:41,240 --> 00:30:46,670 Así que me voy a poner el título en una fila CSV, precio, URL, descripción, 422 00:30:46,670 --> 00:30:49,420 todos en las filas de la CSV. 423 00:30:49,420 --> 00:30:53,410 >> Así que si vamos y ejecución este ahora-- y yo 424 00:30:53,410 --> 00:31:04,710 asegurarse de que me he ahorrado it-- lugar de tan sólo dar salida a la terminal, 425 00:31:04,710 --> 00:31:09,750 debemos tener un archivo CSV archivo que se produce. 426 00:31:09,750 --> 00:31:13,500 Así que aquí podemos ver el CSV archivo que se ha producido. 427 00:31:13,500 --> 00:31:19,330 Esta es la salida del Scape que me acabo de encontrar. 428 00:31:19,330 --> 00:31:23,030 Como se puede ver aquí, Acceso a la página 0, 1, 2, 3. 429 00:31:23,030 --> 00:31:27,400 Estos son los títulos, precios, descripciones. 430 00:31:27,400 --> 00:31:31,710 Y si nos fijamos en este CSV archivo que hemos generado, 431 00:31:31,710 --> 00:31:35,700 se puede ver su emitida aquí. 432 00:31:35,700 --> 00:31:40,350 No se trata de Excel, así que no es formateado en filas y columnas. 433 00:31:40,350 --> 00:31:45,140 Pero usted puede imaginar cómo podría ser formateado. 434 00:31:45,140 --> 00:31:47,740 >> CSV significa valores separados por comas. 435 00:31:47,740 --> 00:31:50,090 Así que usted puede imaginar que esto podría ser una fila. 436 00:31:50,090 --> 00:31:54,700 Y cada coma haría indicar una columna separada. 437 00:31:54,700 --> 00:32:00,010 Sólo una palabra de caution-- a veces eres 438 00:32:00,010 --> 00:32:02,260 raspando las cosas con una gran cantidad de comas. 439 00:32:02,260 --> 00:32:05,100 Así que si estás salida en un archivo CSV, 440 00:32:05,100 --> 00:32:10,340 Puede que no la salida del manera usted podría pensar. 441 00:32:10,340 --> 00:32:16,770 >> Así que eso es esencialmente todo lo que hay que raspar HTML básico 442 00:32:16,770 --> 00:32:20,110 páginas con Nokogiri. 443 00:32:20,110 --> 00:32:26,000 >> Así el ser internet innovadora, ya que ha llegado 444 00:32:26,000 --> 00:32:33,220 con un más automatizado y GUI versión, aunque menos robusta 445 00:32:33,220 --> 00:32:35,540 versión de raspado de varios sitios web. 446 00:32:35,540 --> 00:32:39,060 Y para nuestros propósitos Voy a estar demostrando 447 00:32:39,060 --> 00:32:42,920 una extensión de Chrome llamada kimono. 448 00:32:42,920 --> 00:32:46,690 Y todo lo que tienes que hacer es navegar a la página que desea raspar. 449 00:32:46,690 --> 00:32:48,590 Hace clic en un campo de interés. 450 00:32:48,590 --> 00:32:51,510 Calibrar los campos, porque automáticamente 451 00:32:51,510 --> 00:32:54,360 detectar lo que piensa quieres ser raspado, 452 00:32:54,360 --> 00:32:56,280 y entonces usted acaba de crear una API. 453 00:32:56,280 --> 00:33:03,700 >> Así que si tuviéramos que demostrarlo en Craigslist, que en realidad no iba a funcionar. 454 00:33:03,700 --> 00:33:08,290 Y esto es lo que iba a volver a diciendo de que no fuera tan robusta. 455 00:33:08,290 --> 00:33:10,320 Tiene problemas para crear la API. 456 00:33:10,320 --> 00:33:13,400 Pero como una demostración de lo que iba a hacer, 457 00:33:13,400 --> 00:33:17,460 si instala la extensión de Chrome, todo lo que hacemos es hacer clic en él. 458 00:33:17,460 --> 00:33:21,750 Se Kimonofies la página, y luego haz click con el que quiero guión. 459 00:33:21,750 --> 00:33:24,480 >> Así que si yo fuera a hacer clic en que, sería resaltar 460 00:33:24,480 --> 00:33:28,130 lo que piensa que quiero ser raspado de esa página. 461 00:33:28,130 --> 00:33:33,660 Así que tal vez yo llamo esta lista de propiedades. 462 00:33:33,660 --> 00:33:36,430 Este es el número de elementos que he seleccionado. 463 00:33:36,430 --> 00:33:43,810 Y yo sólo puedo confirmar o negar algunos de las otras listas sugeridas 464 00:33:43,810 --> 00:33:49,600 para conseguir que añadir a lo que se raspa. 465 00:33:49,600 --> 00:33:52,330 >> Así que ahora podemos ver que hay un centenar de artículos seleccionados. 466 00:33:52,330 --> 00:33:58,060 Si quiero tener otro campo que yo También raspar que se relaciona con esto, 467 00:33:58,060 --> 00:34:02,540 digo que quiero raspar el precio así, entonces yo puedo hacer lo mismo. 468 00:34:02,540 --> 00:34:06,190 469 00:34:06,190 --> 00:34:11,550 >> Así que aquí está una demostración de cómo es mucho menos robusta, porque ahora es 470 00:34:11,550 --> 00:34:15,050 recogiendo la ciudad en lugar de sólo el precio que yo quiero. 471 00:34:15,050 --> 00:34:16,989 Y ahora se recogió 200 cosas. 472 00:34:16,989 --> 00:34:19,880 Usted puede volver atrás y borrar. 473 00:34:19,880 --> 00:34:21,449 Puedes intentarlo de nuevo. 474 00:34:21,449 --> 00:34:24,250 Pero no hay garantías. 475 00:34:24,250 --> 00:34:29,909 Así es como funciona esto a veces. 476 00:34:29,909 --> 00:34:32,969 Como se puede ver aquí, ahora dice 96 aquí. 477 00:34:32,969 --> 00:34:37,000 Se recogió la mayor parte de los enlaces que desea raspar, pero no 478 00:34:37,000 --> 00:34:39,280 necesariamente todos ellos. 479 00:34:39,280 --> 00:34:43,909 >> Otra herramienta útil de kimono aunque es que usted puede ir a las funciones avanzadas 480 00:34:43,909 --> 00:34:47,980 aquí, vaya a Avanzado, y se le mostrará 481 00:34:47,980 --> 00:34:53,139 la ruptura de la única manera de acceder al HTML 482 00:34:53,139 --> 00:34:54,909 etiquetas que desea raspar. 483 00:34:54,909 --> 00:35:01,450 Así que para los anuncios, si nos fijamos en aquí, si accede div p lapso abarcan una, 484 00:35:01,450 --> 00:35:06,030 en realidad se puede utilizar sólo esto en su código Nokogiri, 485 00:35:06,030 --> 00:35:10,780 donde antes habíamos span.txt para acceder a cada uno de los anuncios. 486 00:35:10,780 --> 00:35:13,270 Si sólo quiero el texto dentro de los listados, 487 00:35:13,270 --> 00:35:18,950 Pude entrada espacio div p lapso space lapso espacio una, 488 00:35:18,950 --> 00:35:21,570 y sería lograr el mismo efecto. 489 00:35:21,570 --> 00:35:26,320 Y para aquellos de ustedes que están interesados en el uso de expresiones regulares, 490 00:35:26,320 --> 00:35:31,670 pasa a también le dará la regularidad expresión de ordenación de la cadena a la entrada 491 00:35:31,670 --> 00:35:34,900 para encontrar las cosas usted está tratando de encontrar. 492 00:35:34,900 --> 00:35:44,130 >> Así que hay otra característica interesante Kimono de donde se puede paginar, 493 00:35:44,130 --> 00:35:47,780 que no sólo puedo raspar los resultados de esta página, 494 00:35:47,780 --> 00:35:50,890 Puedo hacer clic en este pequeño botón Los, paginación, 495 00:35:50,890 --> 00:35:55,580 especificar el botón que llévame a la página siguiente, 496 00:35:55,580 --> 00:35:59,500 y luego se acaba de saber que se puede repetir a la siguiente página, 497 00:35:59,500 --> 00:36:04,120 y luego raspar todos el-- siempre ya que es el mismo formato de supuesto-- 498 00:36:04,120 --> 00:36:06,110 scape todos esos vínculos también. 499 00:36:06,110 --> 00:36:15,230 >> Así pues kimono no quiere Trabajamos con Craigslist, lo que hemos hecho 500 00:36:15,230 --> 00:36:19,790 es que he Kimonofied el Harvard Crimson. 501 00:36:19,790 --> 00:36:29,380 He saqué algunos de la clase de top artículos destacados, confirman aquí. 502 00:36:29,380 --> 00:36:33,090 Decir todo esto. 503 00:36:33,090 --> 00:36:35,830 He compilado esta API para usted antes de tiempo. 504 00:36:35,830 --> 00:36:38,990 Pero por lo demás lo que harías es que usted simplemente le clic en Listo. 505 00:36:38,990 --> 00:36:40,940 Introduzca sus datos de API. 506 00:36:40,940 --> 00:36:45,260 Ajústelo a cualquiera rastreo automatizado o manual. 507 00:36:45,260 --> 00:36:48,460 Así que usted puede actualizar su datos cada 15 minutos, 508 00:36:48,460 --> 00:36:50,330 semanal, diario, lo que quieras. 509 00:36:50,330 --> 00:36:51,160 El nombre de su API. 510 00:36:51,160 --> 00:36:52,790 Cree el API. 511 00:36:52,790 --> 00:36:58,460 Para su beneficio, he creado el Carmesí página API delante ya. 512 00:36:58,460 --> 00:37:02,480 >> Así que usted acaba de crear una cuenta en kimono, y 513 00:37:02,480 --> 00:37:06,240 almacenará todos sus APIs para usted. 514 00:37:06,240 --> 00:37:10,330 Así que, esencialmente eso es todo lo que su raspaduras diferentes separadas. 515 00:37:10,330 --> 00:37:18,250 >> Así que si miramos aquí, este es el dictámenes enlaces que he recogido. 516 00:37:18,250 --> 00:37:21,290 Estos son los destacados enlaces que he recogido. 517 00:37:21,290 --> 00:37:24,090 Y estos son los más leídos vínculos que yo he recogido 518 00:37:24,090 --> 00:37:27,120 de esta última scape API. 519 00:37:27,120 --> 00:37:30,790 >> Así que si usted puede ver aquí, éstos serían los presentados, 520 00:37:30,790 --> 00:37:34,130 estos serían los dictámenes, que en este ejemplo, 521 00:37:34,130 --> 00:37:38,150 Los he combinado todos en una colección. 522 00:37:38,150 --> 00:37:42,780 Pero si usted acaba de jugar un rato con él un poco, puede dividirlo 523 00:37:42,780 --> 00:37:45,090 y dividirlo embargo desea, siempre y 524 00:37:45,090 --> 00:37:47,520 como el formato es ligeramente diferente. 525 00:37:47,520 --> 00:37:51,320 >> Sólo para jugar con esto, el rastreo de configurar, uno de los inconvenientes 526 00:37:51,320 --> 00:37:58,120 es que sólo puede rastrear hasta 25 páginas a la vez. 527 00:37:58,120 --> 00:38:00,430 Ese es uno de los factores limitantes. 528 00:38:00,430 --> 00:38:03,060 Pero aquí, si se establece al arrastre manual, este 529 00:38:03,060 --> 00:38:06,100 es cómo se puede decir que Para actualizar sus datos. 530 00:38:06,100 --> 00:38:11,010 Y aquí se puede ver el historial de rastreo de todo lo que usted ha rastreado. 531 00:38:11,010 --> 00:38:16,000 Y ustedes pueden volver, crea, jugar con todas las diferentes maneras 532 00:38:16,000 --> 00:38:20,340 que se puede modificar y utilizar sus datos. 533 00:38:20,340 --> 00:38:24,580 >> Kimono puede ser configurado para raspar enlaces dentro de enlaces. 534 00:38:24,580 --> 00:38:29,700 Y usted hacerlo primero raspando una lista de enlaces, 535 00:38:29,700 --> 00:38:35,390 y luego utilizar esa API como una saltar de punto para otro API 536 00:38:35,390 --> 00:38:36,710 que crea la secuencia de comandos. 537 00:38:36,710 --> 00:38:42,040 Pero eso es más complicado que lo que vamos a conseguir en la actualidad. 538 00:38:42,040 --> 00:38:44,270 >> Así que eso es kimono. 539 00:38:44,270 --> 00:38:46,980 Vamos a hablar de los pros y contras de Nokogiri y kimono. 540 00:38:46,980 --> 00:38:50,380 >> Nokogiri, es muy rápido. 541 00:38:50,380 --> 00:38:51,640 Es fácil de probar. 542 00:38:51,640 --> 00:38:55,910 Usted puede simplemente pone nada consola, fácil de configurar. 543 00:38:55,910 --> 00:39:00,400 Usted puede decidir exactamente lo quiere raspar y almacenar. 544 00:39:00,400 --> 00:39:02,060 No hay límite de páginas. 545 00:39:02,060 --> 00:39:08,010 En realidad, yo usé para raspar como 1800 sitios web sudafricanos escolares 546 00:39:08,010 --> 00:39:10,870 mensajes de correo electrónico para una pasantía de haberlo hecho. 547 00:39:10,870 --> 00:39:16,060 >> Así que eso es posible, aunque las mejores prácticas sería dividir el guión. 548 00:39:16,060 --> 00:39:19,310 Porque si no, a continuación, usted no consigue nada. 549 00:39:19,310 --> 00:39:22,790 Pero si lo hace un centenar, tal vez 200 páginas a la vez, 550 00:39:22,790 --> 00:39:27,840 entonces usted tiene alguna posibilidad de, al menos, conseguir que poco a poco, sobre todo 551 00:39:27,840 --> 00:39:30,280 si usted tiene mal internet. 552 00:39:30,280 --> 00:39:32,720 >> Por desgracia, sólo se puede raspar HTML. 553 00:39:32,720 --> 00:39:35,190 Así que si usted tiene pages-- cargada dinámicamente 554 00:39:35,190 --> 00:39:39,480 y yo te mostraré un ejemplo como Kayak en un second-- 555 00:39:39,480 --> 00:39:42,270 Nokogiri desgracia no puede raspar eso. 556 00:39:42,270 --> 00:39:45,700 >> Pero Kimono también es fácil de usar. 557 00:39:45,700 --> 00:39:48,330 Como se vio, es esencialmente un punto y clic. 558 00:39:48,330 --> 00:39:50,260 Se puede raspar JavaScript. 559 00:39:50,260 --> 00:39:53,790 Desafortunadamente, no hay un máximo a la cantidad de páginas que puede raspar. 560 00:39:53,790 --> 00:39:55,710 A veces es un poco difícil de configurar. 561 00:39:55,710 --> 00:39:57,240 Se se confunde. 562 00:39:57,240 --> 00:40:00,920 Pero es sin duda algo a considerar 563 00:40:00,920 --> 00:40:05,930 si usted no está tratando de tener una raspadura mantenible súper robusta. 564 00:40:05,930 --> 00:40:09,010 Si lo que desea es obtener todo lo que fuera de una página rápidamente, 565 00:40:09,010 --> 00:40:10,970 entonces Kimono es una realidad buena herramienta a utilizar. 566 00:40:10,970 --> 00:40:16,490 Y como he mencionado antes, no hay la característica avanzada de Kimono 567 00:40:16,490 --> 00:40:19,260 que la forma de muestra acceder al HTML único 568 00:40:19,260 --> 00:40:24,210 elemento, que es super útil incluso si está trabajando en Nokogiri. 569 00:40:24,210 --> 00:40:30,370 >> Así que si vamos al sitio de Kayak, por ejemplo, se puede ver que hay es-- 570 00:40:30,370 --> 00:40:31,750 o tal vez usted no puede ver. 571 00:40:31,750 --> 00:40:38,910 Pero si yo te mostraré la URL de Kayak, esto en realidad es sólo la URL de origen. 572 00:40:38,910 --> 00:40:43,800 Este es el URL antes de ser modificado por cualquier scripts de JavaScript 573 00:40:43,800 --> 00:40:45,350 que han pasando. 574 00:40:45,350 --> 00:40:52,420 Y que va a tener un aspecto diferente inspeccionar el elemento. 575 00:40:52,420 --> 00:40:55,940 >> Así que si usted va a través y usted coincide con el elemento Inspeccione 576 00:40:55,940 --> 00:41:00,340 código al código fuente, es en realidad va a ser diferente. 577 00:41:00,340 --> 00:41:05,640 Y esta es la razón fundamental por Nokogiri no puede raspar sitios cargados dinámicamente. 578 00:41:05,640 --> 00:41:08,810 Porque es Nokogiri raspando la URL de origen, 579 00:41:08,810 --> 00:41:16,310 mientras que kimono es en realidad raspar lo que está esencialmente 580 00:41:16,310 --> 00:41:18,260 viendo en Seleccionar elemento. 581 00:41:18,260 --> 00:41:23,880 >> Así que si voy a través y yo tratar de Kimonofy Kayak, 582 00:41:23,880 --> 00:41:26,600 De hecho, me puedo pasar por y seleccione el precio. 583 00:41:26,600 --> 00:41:32,360 Es un poco más difícil, y en este caso, es 584 00:41:32,360 --> 00:41:36,600 realmente ver este precio como diferente de estos. 585 00:41:36,600 --> 00:41:41,110 Así que mientras que usted puede configure-- o si esto no se carga dinámicamente, 586 00:41:41,110 --> 00:41:43,620 podría configurar Nokogiri para conseguir todos estos. 587 00:41:43,620 --> 00:41:48,230 >> Debido a que el formato es ligeramente diferente para este listado 588 00:41:48,230 --> 00:41:51,280 como se compara con el resto de ellos, y usted puede ver aquí 589 00:41:51,280 --> 00:41:54,830 se ha ido realmente y seleccionados todos los precios de los vuelos. 590 00:41:54,830 --> 00:42:01,200 Tal deseo seleccionar tiempo de vuelo también. 591 00:42:01,200 --> 00:42:04,700 Y puedo ir a través y tipo de configurar ese. 592 00:42:04,700 --> 00:42:06,950 Yo no quiero eso. 593 00:42:06,950 --> 00:42:10,200 Sólo quiero el tiempo del próximo vuelo. 594 00:42:10,200 --> 00:42:17,030 Y luego, después de un par de estos pasando, se pone la imagen. 595 00:42:17,030 --> 00:42:19,080 Así kimono de muy inteligente. 596 00:42:19,080 --> 00:42:21,900 Es que no es tan robusto. 597 00:42:21,900 --> 00:42:26,710 >> Hay alguna otra alternativas que se pueden utilizar. 598 00:42:26,710 --> 00:42:31,600 Y te voy a mostrar aquí. 599 00:42:31,600 --> 00:42:35,790 Si usted está más cómodo en Python en lugar de Rubí, tal vez, 600 00:42:35,790 --> 00:42:39,290 hay una biblioteca llamada Hermosa sopa. 601 00:42:39,290 --> 00:42:40,430 Usted puede usar eso. 602 00:42:40,430 --> 00:42:42,270 Es muy similar a Nokogiri. 603 00:42:42,270 --> 00:42:44,620 Tiene algunas características más. 604 00:42:44,620 --> 00:42:52,160 Puede encontrar una etiqueta HTML y a continuación, desplazarse hacia arriba o mover hacia los lados. 605 00:42:52,160 --> 00:42:54,690 >> Hay PyQt. 606 00:42:54,690 --> 00:42:57,820 En realidad, esto puede raspar dinámica sitios, porque es una especie de 607 00:42:57,820 --> 00:43:02,540 es una WebKit que pretende ser un navegador sin que en realidad 608 00:43:02,540 --> 00:43:03,670 ser un navegador. 609 00:43:03,670 --> 00:43:07,490 Así que sería esperar a que todo el JavaScript para cargar primero, y luego 610 00:43:07,490 --> 00:43:09,560 entrar y tratar de raspar el sitio. 611 00:43:09,560 --> 00:43:13,560 >> Si quieres seguir con Ruby, puede ir un nivel arriba de Nokogiri. 612 00:43:13,560 --> 00:43:17,650 Puede utilizar Carpincho con un envoltorio de Poltergeist. 613 00:43:17,650 --> 00:43:22,910 Y esto puede en realidad esencialmente lo mismo 614 00:43:22,910 --> 00:43:26,610 como PyQt, que es que es un WebKit. 615 00:43:26,610 --> 00:43:29,610 Se espera a que el JavaScript para cargar primero. 616 00:43:29,610 --> 00:43:33,340 Si el violín alrededor con él lo suficiente, incluso se puede conseguir que se haga clic en las cosas. 617 00:43:33,340 --> 00:43:42,780 >> Así que si hay un enlace que no es un clásico en el href 618 00:43:42,780 --> 00:43:46,350 el camino es de fácil acceso, y es algo que detecta JavaScript 619 00:43:46,350 --> 00:43:49,490 un clic, usted puede realmente hacer eso. 620 00:43:49,490 --> 00:43:53,430 La biblioteca más populares para simular un usuario 621 00:43:53,430 --> 00:43:56,390 es en JavaScript, que es PhantomJS. 622 00:43:56,390 --> 00:44:01,010 Obviamente, esto puede raspar dinámica sitios porque esto es esencialmente 623 00:44:01,010 --> 00:44:04,270 pretendiendo ser Cromo sin la interfaz de usuario. 624 00:44:04,270 --> 00:44:09,970 >> Y luego, por supuesto, el más robusto, pero la opción más lenta, 625 00:44:09,970 --> 00:44:13,260 es una automatización navegador selenio. 626 00:44:13,260 --> 00:44:15,550 Y, por desgracia, no vas a ser 627 00:44:15,550 --> 00:44:19,770 capaz de hacer esto dentro de su IDE CS50. 628 00:44:19,770 --> 00:44:24,140 Porque en esencia lo que hace es que arranca su Chrome, 629 00:44:24,140 --> 00:44:27,090 Firefox, cualquier navegador que desea utilizar, 630 00:44:27,090 --> 00:44:32,570 y hace un seguimiento de tal vez el puntero del ratón movimiento, lo que usted escribe en, 631 00:44:32,570 --> 00:44:35,170 y es sólo una especie de automatiza este proceso. 632 00:44:35,170 --> 00:44:42,070 Por lo tanto, se desarrolló como una especie de herramienta de prueba de automatización de página web. 633 00:44:42,070 --> 00:44:45,910 Pero un montón de gente utiliza El selenio para raspar sitios web 634 00:44:45,910 --> 00:44:49,990 que de otro modo tienen una muchas dificultades para raspar 635 00:44:49,990 --> 00:44:53,700 con algunas de estas otras herramientas, más rápidos. 636 00:44:53,700 --> 00:44:57,530 >> Así que eso es todo lo que tengo para el raspado web. 637 00:44:57,530 --> 00:44:58,090 Diviértete. 638 00:44:58,090 --> 00:45:01,762 639 00:45:01,762 --> 00:45:02,680 >> AUDIENCIA: Pregunta. 640 00:45:02,680 --> 00:45:04,016 >> ROBERT KRABEK: Sí. 641 00:45:04,016 --> 00:45:12,840 >> AUDIENCIA: ¿Existe un mecanismo para discutir el sitio web por lo que podría básicamente 642 00:45:12,840 --> 00:45:14,207 pasar por ella más adelante. 643 00:45:14,207 --> 00:45:15,040 ROBERT KRABEK: Sí. 644 00:45:15,040 --> 00:45:21,530 Así que ponemos el, en nuestra ejemplo, para ambos, 645 00:45:21,530 --> 00:45:24,980 ponemos todo el sitio web en el doc. 646 00:45:24,980 --> 00:45:31,260 Y por lo que podría en realidad sólo tomar la doc variable y escribir en un archivo. 647 00:45:31,260 --> 00:45:35,490 Así que si yo quería, yo podría escribirlo como un archivo HTML, 648 00:45:35,490 --> 00:45:39,280 y luego en lugar de utilizar OpenURI y una solicitud cURL, 649 00:45:39,280 --> 00:45:43,520 entonces yo podría simplemente abrir doc HTML y luego buscar eso. 650 00:45:43,520 --> 00:45:47,960 >> AUDIENCIA: ¿Pero puedes conservar el tipo de experiencia en línea 651 00:45:47,960 --> 00:45:48,930 mientras que usted hace fuera de línea. 652 00:45:48,930 --> 00:45:51,013 Por ejemplo. Cuando tu estas volar durante varias horas, 653 00:45:51,013 --> 00:45:54,070 Quiero básicamente archivo toda la página web. [INAUDIBLE] 654 00:45:54,070 --> 00:45:58,780 >> ROBERT KRABEK: Sí, eso es exactly-- así que, literalmente, lo que esto está haciendo 655 00:45:58,780 --> 00:46:03,010 se está tomando todo que sería en esta dirección URL. 656 00:46:03,010 --> 00:46:11,280 Así que si nos encontramos con cURL, es teniendo todo esto en HTML, 657 00:46:11,280 --> 00:46:14,590 y es almacenarlo dentro del documento variable. 658 00:46:14,590 --> 00:46:17,290 Así que usted puede hacer lo que quieres hacer con el doc. 659 00:46:17,290 --> 00:46:18,575 Usted puede dar salida a un archivo. 660 00:46:18,575 --> 00:46:19,950 AUDIENCIA: Pero no conectó. 661 00:46:19,950 --> 00:46:20,780 No es dinámico. 662 00:46:20,780 --> 00:46:22,770 No es recursivo, ¿verdad? 663 00:46:22,770 --> 00:46:24,016 ¿Ves lo que quiero decir? 664 00:46:24,016 --> 00:46:28,359 Estoy tratando básicamente una especie de picadillo todo el sitio web en mi disco duro 665 00:46:28,359 --> 00:46:31,150 para que yo pudiera hacerlo, básicamente, durante varias horas sin internet. 666 00:46:31,150 --> 00:46:32,025 >> ROBERT KRABEK: Correcto. 667 00:46:32,025 --> 00:46:37,140 Así que si yo had-- ¿dónde está mi archivo de E / S? 668 00:46:37,140 --> 00:46:47,766 Así que este es el archivo de E / S. Así lo dicen en su lugar de esto, yo llamo a esto craigslist.html. 669 00:46:47,766 --> 00:46:52,620 670 00:46:52,620 --> 00:46:53,940 Me abro a eso. 671 00:46:53,940 --> 00:46:59,020 Yo había pone doc en ella. 672 00:46:59,020 --> 00:47:00,470 Cierro el archivo. 673 00:47:00,470 --> 00:47:05,410 Y luego sólo porque el CS50 IDE está en la nube, eso es lo que sea. 674 00:47:05,410 --> 00:47:07,710 Puedo ir aquí. 675 00:47:07,710 --> 00:47:09,320 Yo puedo descargar el archivo. 676 00:47:09,320 --> 00:47:11,830 Y entonces eso sería en mi disco duro. 677 00:47:11,830 --> 00:47:13,930 Así que usted puede hacerlo de esa manera. 678 00:47:13,930 --> 00:47:18,830 O si estás en casa, no se utiliza el CS50 IDE, como Sublime o algo así, 679 00:47:18,830 --> 00:47:21,900 esto es aún más fácil, porque esto es todo lo disponible a nivel local, 680 00:47:21,900 --> 00:47:23,020 no atado a internet. 681 00:47:23,020 --> 00:47:24,720 >> AUDIENCIA: Ya veo. 682 00:47:24,720 --> 00:47:26,580 Esto es para un problema particular. 683 00:47:26,580 --> 00:47:30,410 ¿Puede hacerlo de forma recursiva para que ir varias capas de profundidad tipo de cosas? 684 00:47:30,410 --> 00:47:33,801 >> ROBERT KRABEK: Puedo descargar carpetas así, si eso es lo que estás pidiendo. 685 00:47:33,801 --> 00:47:34,426 AUDIENCIA: Sí. 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