1 00:00:00,000 --> 00:00:03,234 >> [RIPRODUZIONE DI BRANI MUSICALI] 2 00:00:03,234 --> 00:00:05,275 3 00:00:05,275 --> 00:00:06,400 ROBERT KRABEK: Ciao, ragazzi. 4 00:00:06,400 --> 00:00:09,980 Il mio nome è Robert Krabek, e Io sarà essere vi insegna ragazzi 5 00:00:09,980 --> 00:00:15,470 come per raschiare il web con Nokogiri, che è una libreria Ruby, 6 00:00:15,470 --> 00:00:17,566 e Kimono, che è una estensione per Chrome. 7 00:00:17,566 --> 00:00:20,940 8 00:00:20,940 --> 00:00:25,010 >> Quindi, prima c'è un paio di cose che si 9 00:00:25,010 --> 00:00:28,790 può fare se magari sei stato facendo tutte le pset finora 10 00:00:28,790 --> 00:00:31,170 e l'area di lavoro è ottenere un po 'pieno. 11 00:00:31,170 --> 00:00:37,060 Possiamo in realtà solo andare creare una nuova area di lavoro per voi 12 00:00:37,060 --> 00:00:41,220 per fare solo un nuovo progetto in. 13 00:00:41,220 --> 00:00:46,160 Quindi, se si vuole continuare lavora nel ID del modello CS50 14 00:00:46,160 --> 00:00:49,080 che attualmente si dispone, sentitevi liberi, e si può solo 15 00:00:49,080 --> 00:00:54,700 installare Nokogiri con CFLAGS gemma equals-- install nokogiri. 16 00:00:54,700 --> 00:00:56,930 Ma per il resto ti mostrerò come impostare un nuovo uno. 17 00:00:56,930 --> 00:01:01,210 E allora questo è essenzialmente cadere più ruote di formazione. 18 00:01:01,210 --> 00:01:07,120 E tu sei la codifica come se fossi solo codifica in Sublime o qualcosa del genere. 19 00:01:07,120 --> 00:01:12,365 Quindi, se ci spostiamo sopra. 20 00:01:12,365 --> 00:01:14,930 21 00:01:14,930 --> 00:01:18,690 >> Quindi dire che questo è il tuo attuale CS 50 ID. 22 00:01:18,690 --> 00:01:21,490 Si può solo andare a Cloud9 qui. 23 00:01:21,490 --> 00:01:22,725 Si può andare al cruscotto. 24 00:01:22,725 --> 00:01:26,720 25 00:01:26,720 --> 00:01:29,950 Dovrebbe apparire scheda Workspaces. 26 00:01:29,950 --> 00:01:32,980 E poi è sufficiente fare clic qui, creare un nuovo spazio di lavoro. 27 00:01:32,980 --> 00:01:37,600 Assegnare un nome alla nuova area di lavoro, forse di prova, o scraping. 28 00:01:37,600 --> 00:01:42,700 E quindi fare clic su questa scheda personalizzata qui, invece della scheda modelli CS50. 29 00:01:42,700 --> 00:01:45,155 E allora si può solo andare e creare un nuovo spazio di lavoro. 30 00:01:45,155 --> 00:01:48,280 >> Ho già creato uno spazio di lavoro qui. 31 00:01:48,280 --> 00:01:50,640 Quindi lavoreremo con questo. 32 00:01:50,640 --> 00:01:55,380 E se è stato creato un nuovo spazio di lavoro così con la scheda personalizzata, 33 00:01:55,380 --> 00:02:04,560 si può semplicemente digitare gem install nokogiri, che non sta andando qui. 34 00:02:04,560 --> 00:02:06,230 OK, è un po 'congelato. 35 00:02:06,230 --> 00:02:08,979 Ma è possibile digitare gem install nokogiri. 36 00:02:08,979 --> 00:02:15,970 E questo dovrebbe essere tutto ciò che c'è all'installazione. 37 00:02:15,970 --> 00:02:20,590 >> Come ho detto prima, se siete ancora lavorare nel vostro CS50 ID del modello, 38 00:02:20,590 --> 00:02:30,270 è sufficiente digitare CFLAGS è uguale a gem install nokogiri. 39 00:02:30,270 --> 00:02:33,130 E ho già installato qui così io non lo farà. 40 00:02:33,130 --> 00:02:38,500 Ma per coloro che seguono lungo, sentitevi liberi di farlo. 41 00:02:38,500 --> 00:02:46,000 >> Quindi, una volta che hai la tua Nokogiri spazio di lavoro o biblioteca installata, 42 00:02:46,000 --> 00:02:49,500 Sto per darvi un po ' di un corso accelerato di sintassi di Ruby 43 00:02:49,500 --> 00:02:53,380 perché Nokogiri è una libreria Ruby. 44 00:02:53,380 --> 00:03:03,710 Quindi è necessario conoscere un po 'di base Sintassi di Ruby per lavorare con Nokogiri. 45 00:03:03,710 --> 00:03:08,750 Così alcune differenze di base da quello che siete abituati a 46 00:03:08,750 --> 00:03:13,370 forse, se hai lavorato finora solo C e PHP, 47 00:03:13,370 --> 00:03:16,010 si dichiarano delle variabili con nessun tipo. 48 00:03:16,010 --> 00:03:19,720 Non si utilizza il punto e virgola, che è una specie di sollievo. 49 00:03:19,720 --> 00:03:25,480 Non ci sono parentesi ora intorno per o while, per esempio. 50 00:03:25,480 --> 00:03:29,460 Devi solo un blocco di codice, e allora si mette fine alla fine di questo. 51 00:03:29,460 --> 00:03:32,380 Non c'è plus plus o meno meno, quindi basta 52 00:03:32,380 --> 00:03:36,180 sapere che quando si sta facendo per i cicli, 53 00:03:36,180 --> 00:03:38,620 solo più uguali e meno uguali. 54 00:03:38,620 --> 00:03:43,310 E invece di hash includono, userete richiedere e quindi 55 00:03:43,310 --> 00:03:47,755 qualunque biblioteca cercando per caricare nel programma. 56 00:03:47,755 --> 00:03:51,610 57 00:03:51,610 --> 00:03:53,430 >> Rubino non è un linguaggio compilato. 58 00:03:53,430 --> 00:03:55,550 Ecco, questo è un altro rilievo. 59 00:03:55,550 --> 00:03:59,350 E 'più simile a PHP dove si tratta di un linguaggio interpretato. 60 00:03:59,350 --> 00:04:03,570 È possibile eseguire qualsiasi script di Ruby che si scrive con Ruby seguita 61 00:04:03,570 --> 00:04:07,380 dal nome dello script o del programma. 62 00:04:07,380 --> 00:04:13,000 Per indicare che si tratta di un programma in Ruby, si finisce con .rb invece di .c. 63 00:04:13,000 --> 00:04:17,440 E ci sono variabili array di dimensioni in Ruby, 64 00:04:17,440 --> 00:04:23,200 che è super conveniente quando sei raschiatura e forse vuole accodare 65 00:04:23,200 --> 00:04:26,090 i dati che avete raschiato in un array. 66 00:04:26,090 --> 00:04:31,960 Non c'è bisogno di malloc un nuovo array e copiare il vecchio array in il nuovo array. 67 00:04:31,960 --> 00:04:36,150 Si può solo aggiungere con i due segni freccia. 68 00:04:36,150 --> 00:04:39,820 E non ci sono caratteri, ci solo stringhe singola lettera. 69 00:04:39,820 --> 00:04:44,760 Così che dovrebbe essere un po 'più facile. 70 00:04:44,760 --> 00:04:50,130 >> Quindi ci limiteremo a dare qualche esempi di alcune sintassi di base di Ruby. 71 00:04:50,130 --> 00:04:57,100 Così qui si può vedere che invece di la barra barra, a commentare in Ruby, 72 00:04:57,100 --> 00:04:58,740 è sufficiente utilizzare il simbolo di cancelletto. 73 00:04:58,740 --> 00:05:04,990 E dichiarazione di variabile, è è sufficiente digitare l'uguale variabile 74 00:05:04,990 --> 00:05:07,971 quello che vuoi la variabile di essere. 75 00:05:07,971 --> 00:05:09,220 Possono essere stringhe. 76 00:05:09,220 --> 00:05:14,120 Si possono avere matrice, che si popola con i valori. 77 00:05:14,120 --> 00:05:17,240 puts e stampe sono simili. 78 00:05:17,240 --> 00:05:20,110 Per i nostri scopi, la unica differenza è veramente 79 00:05:20,110 --> 00:05:25,500 che mette, che sta per mette, appena mette una nuova linea 80 00:05:25,500 --> 00:05:27,440 personaggio a qualsiasi cosa tu stia stampa. 81 00:05:27,440 --> 00:05:30,980 >> Quindi, se diamo un piccolo manifestazione qui, 82 00:05:30,980 --> 00:05:41,800 siamo in grado di eseguire questo with-- aprire un nuovo terminale. 83 00:05:41,800 --> 00:05:46,020 Potete vedere tutti questi i file che sono in mio terminale. 84 00:05:46,020 --> 00:05:50,960 E se ho appena eseguito Ruby, intro.rb rubino, esso 85 00:05:50,960 --> 00:05:53,530 mette fuori cinque Ciao Mather, Quincy, Vettore. 86 00:05:53,530 --> 00:05:54,410 Adams. 87 00:05:54,410 --> 00:05:59,295 Ecco, questo è tutto quello che c'è agli array dichiarano. 88 00:05:59,295 --> 00:06:01,670 PUBBLICO: Robert, si può fare il tipo di carattere un po 'più 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 E posso ingrandire, perché non è possibile lo zoom per i caratteri apparentemente terminale. 92 00:06:12,280 --> 00:06:18,790 93 00:06:18,790 --> 00:06:24,630 >> Ecco, questo è il modo di stampare variabili al vostro terminale. 94 00:06:24,630 --> 00:06:28,820 È inoltre possibile utilizzare variabili all'interno di una stringa. 95 00:06:28,820 --> 00:06:33,720 Così di recente in PHP, si potrebbe avere imparato 96 00:06:33,720 --> 00:06:37,340 che vi è l'interpolazione stringa. 97 00:06:37,340 --> 00:06:43,830 Quindi, se si dà un'occhiata qui, se io dichiarare tre variabili, nome, biblioteca, 98 00:06:43,830 --> 00:06:49,700 e linguistici, e I mette, io scrivere una stringa, ciao il mio nome è. 99 00:06:49,700 --> 00:06:54,190 E allora invece di PHP versione di interpolazione corda 100 00:06:54,190 --> 00:06:58,960 che sembra un po 'più simile a questo, si dispone di un cancelletto, e poi 101 00:06:58,960 --> 00:07:01,220 una parentesi graffa, e poi il nome della variabile. 102 00:07:01,220 --> 00:07:07,350 Ed è così che ci si stampano, dice, qualunque sia il nome della variabile è. 103 00:07:07,350 --> 00:07:10,140 >> E allora si può anche concatenare le stringhe. 104 00:07:10,140 --> 00:07:12,890 Rubino rende super facile con il segno più. 105 00:07:12,890 --> 00:07:16,110 Devi solo una stringa sulla sinistra, più una variabile 106 00:07:16,110 --> 00:07:18,860 o un'altra stringa più una stringa. 107 00:07:18,860 --> 00:07:23,500 Quindi, se stampo questo fuori, dovrebbe solo dire Ciao, il mio nome è Robert. 108 00:07:23,500 --> 00:07:27,340 Sarò insegnando Nokogiri in Ruby. 109 00:07:27,340 --> 00:07:35,370 >> E facciamo solo confermare che tale è infatti il ​​rubino intro case--. 110 00:07:35,370 --> 00:07:36,480 Ciao, il mio nome è Robert. 111 00:07:36,480 --> 00:07:40,160 Sarò insegnando Nokogiri in Ruby. 112 00:07:40,160 --> 00:07:45,600 >> Passando, se else, è un po 'diverso 113 00:07:45,600 --> 00:07:49,800 da quello che potrebbe essere utilizzato per se hai lavorato in C. 114 00:07:49,800 --> 00:07:53,200 Non hai bisogno di parentesi. 115 00:07:53,200 --> 00:07:55,220 Non hai bisogno di parentesi graffe. 116 00:07:55,220 --> 00:08:00,170 E invece di altro se, si tratta di un elsif concatenato. 117 00:08:00,170 --> 00:08:07,260 Così qui, se ho dichiarato x up qui, come si vede, è ancora x 5. 118 00:08:07,260 --> 00:08:11,100 Quindi, se x è inferiore a 3, che sarà messo piccolo. 119 00:08:11,100 --> 00:08:14,030 Se è inferiore a 7, medio, altro grande. 120 00:08:14,030 --> 00:08:17,340 Quindi 5 è un numero medio. 121 00:08:17,340 --> 00:08:22,270 E finisco questo blocco di codice con fine. 122 00:08:22,270 --> 00:08:24,920 >> Ecco il mio ciclo for. 123 00:08:24,920 --> 00:08:28,240 E questa sintassi è anche leggermente diverso. 124 00:08:28,240 --> 00:08:33,500 Lo 0 a cinque appena essenzialmente si dichiara un array di 0-5. 125 00:08:33,500 --> 00:08:36,120 Quindi c'è cinque slot nella matrice. 126 00:08:36,120 --> 00:08:40,500 E poi per ogni slot che array, sarò incrementando i. 127 00:08:40,500 --> 00:08:46,080 Quindi questo dovrebbe stampare 0 a 5, o 0 a 4. 128 00:08:46,080 --> 00:08:49,630 E questo dovrebbe stampare medio. 129 00:08:49,630 --> 00:08:51,370 >> E io Just Blaze attraverso. 130 00:08:51,370 --> 00:08:54,466 Voi ragazzi avranno accesso a questo codice in seguito. 131 00:08:54,466 --> 00:08:55,965 Così voi potete eseguire questo voi stessi. 132 00:08:55,965 --> 00:09:02,090 133 00:09:02,090 --> 00:09:06,620 >> Quindi, questo è il vostro ciclo while base. 134 00:09:06,620 --> 00:09:12,230 Questa sarà solo la stampa j, incrementare di 1 finché noi colpimmo 5. 135 00:09:12,230 --> 00:09:18,320 >> Super veloce corso accelerato di Ruby su come scrivere una funzione. 136 00:09:18,320 --> 00:09:24,460 Invece di, diciamo, int fattoriale numero, non ci resta che def. 137 00:09:24,460 --> 00:09:28,450 E in sostanza sei la definizione di una funzione di qui. 138 00:09:28,450 --> 00:09:30,600 Questo sarà il il nome della funzione, 139 00:09:30,600 --> 00:09:34,280 e questo è qualsiasi variabile che si vuole passare nella funzione. 140 00:09:34,280 --> 00:09:36,760 Si può avere se istruzioni all'interno. 141 00:09:36,760 --> 00:09:38,030 Puoi tornare. 142 00:09:38,030 --> 00:09:42,620 In questo caso, siamo definire un ricorsivamente 143 00:09:42,620 --> 00:09:45,000 implementato funzione fattoriale. 144 00:09:45,000 --> 00:09:48,660 Così abbiamo appena funzioni di chiamata in Ruby come questo. 145 00:09:48,660 --> 00:09:54,700 >> Quindi, se ho definito questo, può chiamare fattoriale, passare a 3, 146 00:09:54,700 --> 00:09:59,700 e poi 3 sarà il numero di variabili che posso utilizzare all'interno della funzione. 147 00:09:59,700 --> 00:10:08,010 E questo è solo to_s trasformando la valore fattoriale tornare in una stringa. 148 00:10:08,010 --> 00:10:10,760 In caso contrario, questo genererà un errore che dice oh, 149 00:10:10,760 --> 00:10:13,230 non può stampare un string-- perché se ne ricorda, 150 00:10:13,230 --> 00:10:18,230 mette è messo string-- perché questo fattoriale ha restituito un numero. 151 00:10:18,230 --> 00:10:21,850 Quindi possiamo convertire tale a una stringa come tale. 152 00:10:21,850 --> 00:10:27,856 E viceversa, è inoltre possibile convertire una stringa in un intero con to_i. 153 00:10:27,856 --> 00:10:32,650 >> Così facendo tutto super semplice, se mi limito a commentare questo fuori, salvare 154 00:10:32,650 --> 00:10:36,250 ed eseguire la funzione fattoriale. 155 00:10:36,250 --> 00:10:39,850 Dovremmo essere in grado di vedere che fattoriale di 3 è 6. 156 00:10:39,850 --> 00:10:42,790 E questo è proprio vero. 157 00:10:42,790 --> 00:10:46,160 >> Ecco, questo è il vostro corso accelerato di Ruby. 158 00:10:46,160 --> 00:10:53,550 Ed ora che sapete Ruby, possiamo andare su al Nokogiri base raschiatura istituito. 159 00:10:53,550 --> 00:10:58,190 In sostanza tutto ciò che dovete fare è, in Ruby, richiedono le librerie. 160 00:10:58,190 --> 00:11:04,390 E per i nostri scopi useremo la biblioteca OpenURI così come Nokogiri. 161 00:11:04,390 --> 00:11:07,870 E allora che cosa avete fare-- e sarà vi darà la sintassi per questo-- 162 00:11:07,870 --> 00:11:16,010 è di aprire l'URL proprio come si farebbe in una richiesta cURL, che sta per C URL. 163 00:11:16,010 --> 00:11:20,330 >> Quindi si prende l'URL il sito web in questione. 164 00:11:20,330 --> 00:11:22,030 Si memorizza in una variabile. 165 00:11:22,030 --> 00:11:27,400 E poi si può cercare attraverso quella variabile per i tag HTML unici che utilizzano 166 00:11:27,400 --> 00:11:30,590 il comando CSS. 167 00:11:30,590 --> 00:11:34,360 E poi è possibile l'uscita contenuti dove vuoi. 168 00:11:34,360 --> 00:11:35,720 Si può partire da un database. 169 00:11:35,720 --> 00:11:42,040 Si può produrre in un file, o anche solo stamparlo su schermo. 170 00:11:42,040 --> 00:11:47,290 >> Quindi vi mostreremo un raschietto di base. 171 00:11:47,290 --> 00:11:52,570 Quindi, qui potete vedere abbiamo richiedono nokogiri, richiedono open-uri. 172 00:11:52,570 --> 00:11:57,150 Il tuo set up di base, diciamo chiamare documento o doc, 173 00:11:57,150 --> 00:12:07,780 è uguale Nokogiri :: HTML aperto, che è il il comando che ci vengono fornite dal OpenURI 174 00:12:07,780 --> 00:12:08,920 biblioteca. 175 00:12:08,920 --> 00:12:14,000 E saremo alla ricerca, per quelli di voi che potrebbero vivere in quad, 176 00:12:14,000 --> 00:12:21,270 per le bici che sono a Boston elencati sulla sezione di Boston Craigslist bicicletta 177 00:12:21,270 --> 00:12:22,020 sito. 178 00:12:22,020 --> 00:12:26,460 >> Quindi, se non si ha familiarità con curl, mi limiterò a 179 00:12:26,460 --> 00:12:28,930 mostrare reale veloce quanto CURL farà. 180 00:12:28,930 --> 00:12:38,350 Se io volessi ottenere tutte le URL dal il sito Craigslist, se digito curl, 181 00:12:38,350 --> 00:12:44,950 solo discariche tutto dell'URL dal sito della bicicletta Craigslist 182 00:12:44,950 --> 00:12:46,720 sul mio terminale. 183 00:12:46,720 --> 00:12:49,130 Questo non è particolarmente utile perché non lo faccio 184 00:12:49,130 --> 00:12:53,330 vuole andare manualmente attraverso e trovare la cosa che sto cercando. 185 00:12:53,330 --> 00:13:01,590 Ma solo così si può Vedo che realtà sono 186 00:13:01,590 --> 00:13:13,966 utilizzando il codice giusto, se si guarda l'URL per Craigslist a bikes-- 187 00:13:13,966 --> 00:13:17,460 per qualche motivo non è stato trovato. 188 00:13:17,460 --> 00:13:20,340 Se si guarda a questa pagina e guardate l'URL, 189 00:13:20,340 --> 00:13:23,970 questo dovrebbe essere identica alla richiesta cURL che ho appena mando. 190 00:13:23,970 --> 00:13:27,700 E in effetti, questo è quello che viene memorizzato nella variabile doc. 191 00:13:27,700 --> 00:13:36,540 >> Quindi, quando si torna a nostro codice, abbiamo possono poi operare su questa variabile doc 192 00:13:36,540 --> 00:13:40,660 utilizzando .css. 193 00:13:40,660 --> 00:13:49,240 Così detto che volevo ottenere tutti i tag che sono span.txt, 194 00:13:49,240 --> 00:13:51,740 e tutti i tag all'interno di un tale tag. 195 00:13:51,740 --> 00:13:56,150 E perché potremmo volere fare questo, ti sento piangere? 196 00:13:56,150 --> 00:14:02,920 >> Se Inspect Element, ti dà un ripartizione di come l'URL è strutturato. 197 00:14:02,920 --> 00:14:06,200 Se ho scorrere verso il basso attraverso qui, si può vedere 198 00:14:06,200 --> 00:14:08,770 ciò che ciascuno di questi diversi elementi rappresenta. 199 00:14:08,770 --> 00:14:13,410 Così forse voglio accedere questo elemento particolare. 200 00:14:13,410 --> 00:14:16,820 Così sto usando sviluppatore di Chrome strumenti per Inspect Element. 201 00:14:16,820 --> 00:14:22,970 Vedo qui che questo è un un tag all'interno di un arco 202 00:14:22,970 --> 00:14:26,230 contrassegnare con una classe di txt. 203 00:14:26,230 --> 00:14:29,610 >> Quindi, questo diventa per il nostro prima operazione che 204 00:14:29,610 --> 00:14:37,330 è durata doc.css, che è il tag che Sto cercando in tutti questo URL. 205 00:14:37,330 --> 00:14:43,650 E poi .txt funziona molto come CSS fa quando si sta solo scrivendo CSS 206 00:14:43,650 --> 00:14:49,630 nei file HTML specificando una classe. 207 00:14:49,630 --> 00:14:57,980 Quindi questo operatore particolare sarà specificare un elemento span con classe di txt. 208 00:14:57,980 --> 00:15:02,800 E poi se lascio uno spazio, questo andrà poi in quel tag 209 00:15:02,800 --> 00:15:05,170 e poi trovare un un tag all'interno di tale. 210 00:15:05,170 --> 00:15:10,750 >> Quindi, se ho appena messo questo per il terminale, dovrei 211 00:15:10,750 --> 00:15:21,630 essere in grado di vedere essenzialmente tutto che è in questo intervallo di classe di txt. 212 00:15:21,630 --> 00:15:22,890 Così daremo che un andare. 213 00:15:22,890 --> 00:15:25,870 214 00:15:25,870 --> 00:15:27,756 ruby Craigslist-raschietto. 215 00:15:27,756 --> 00:15:31,850 216 00:15:31,850 --> 00:15:37,250 E, infatti, che ci dà tutti questi tag delle varie liste che 217 00:15:37,250 --> 00:15:40,400 sono sulla pagina Craigslist. 218 00:15:40,400 --> 00:15:45,670 >> Quindi, se andiamo indietro, possiamo trasformare questo in qualcosa di più utile. 219 00:15:45,670 --> 00:15:51,050 Forse si vuole solo i link. 220 00:15:51,050 --> 00:15:58,790 Perché all'interno di questo tag, sarò anche avere il collegamento ipertestuale del percorso 221 00:15:58,790 --> 00:16:00,590 che questa pagina va a. 222 00:16:00,590 --> 00:16:09,100 Quindi, se si guarda a questo codice qui, quello che farò è invece di css, 223 00:16:09,100 --> 00:16:12,380 Posso andare at_css. 224 00:16:12,380 --> 00:16:16,820 E questo sarà solo ottenere la prima elemento di tutte queste cose. 225 00:16:16,820 --> 00:16:20,890 Quindi, se dovessi farlo nella codice che ho appena dimostrato in precedenza, 226 00:16:20,890 --> 00:16:23,800 invece di restituire tutto di questo, sarebbe solo 227 00:16:23,800 --> 00:16:26,850 restituisce il primo di quelli. 228 00:16:26,850 --> 00:16:31,310 Ecco, questo è come funziona l'operatore at_css. 229 00:16:31,310 --> 00:16:39,460 >> Quindi vogliamo memorizzare il percorso tutta la prima un tag. 230 00:16:39,460 --> 00:16:47,430 E perché ci darà una a-- così siamo ancora intenzione di utilizzare CSS. 231 00:16:47,430 --> 00:16:53,830 Ma perché questo sta per dare ci riporta un intero array di tag, 232 00:16:53,830 --> 00:16:55,710 ci accingiamo a accesso il primo elemento. 233 00:16:55,710 --> 00:17:01,700 Quindi questo è un altro modo che è possibile accedere a qualsiasi elemento particolare se 234 00:17:01,700 --> 00:17:04,810 hanno una serie di elementi che viene restituito, 235 00:17:04,810 --> 00:17:11,930 perché si può trattare tutto ciò che i rendimenti css come array, in sostanza. 236 00:17:11,930 --> 00:17:16,880 E poi andremo a accedere al ipertesto attributo di riferimento di questo. 237 00:17:16,880 --> 00:17:24,810 >> Quindi, se si dà un'occhiata, se hai guardato molto vicino qui, 238 00:17:24,810 --> 00:17:28,270 se solo essenzialmente guardare la barra degli indirizzi, 239 00:17:28,270 --> 00:17:33,880 questo è il percorso che si sta andando ad essere raschiatura. 240 00:17:33,880 --> 00:17:41,565 Quindi, se solo correre di nuovo, e assicurarsi che abbiamo salvato esso. 241 00:17:41,565 --> 00:17:47,040 242 00:17:47,040 --> 00:17:48,300 È possibile controllare a casa. 243 00:17:48,300 --> 00:17:51,430 Questo in realtà corrisponde con questo link. 244 00:17:51,430 --> 00:17:55,950 >> Allora, perché potremmo voler usare questo? 245 00:17:55,950 --> 00:17:57,870 Se si vuole raschiare la pagina e ha 246 00:17:57,870 --> 00:18:00,270 una pagina di link come Craigslist fa, si 247 00:18:00,270 --> 00:18:03,210 potrebbe desiderare di andare poi in ciascuno di tali collegamenti 248 00:18:03,210 --> 00:18:05,120 e poi raschiare il contenuto di quella che 249 00:18:05,120 --> 00:18:08,520 è esattamente ciò che andremo a fare. 250 00:18:08,520 --> 00:18:11,660 >> Quindi una volta che avete percorso come un variabile, non ho più davvero 251 00:18:11,660 --> 00:18:13,200 cura di stamparlo. 252 00:18:13,200 --> 00:18:15,420 Ho solo bisogno di memorizzare come variabile. 253 00:18:15,420 --> 00:18:20,980 E poi posso accedere a un altro pagina allo stesso modo accedo 254 00:18:20,980 --> 00:18:22,260 doc in primo luogo. 255 00:18:22,260 --> 00:18:25,920 Tranne che con l'URL, stiamo andando di usare l'interpolazione corda 256 00:18:25,920 --> 00:18:29,180 come ho descritto in Rubino in precedenza da aggiungere 257 00:18:29,180 --> 00:18:32,010 il percorso fino alla fine della radice. 258 00:18:32,010 --> 00:18:38,970 >> Così che cosa questo sta per fare è questo sta per mettere sul percorso 259 00:18:38,970 --> 00:18:42,360 che ho raschiato in precedenza e poi girare che 260 00:18:42,360 --> 00:18:49,580 in un nuovo elemento, quello che volete chiamano it-- first_listing, per esempio. 261 00:18:49,580 --> 00:18:52,900 Ma ho intenzione di lasciare su voce per ora, 262 00:18:52,900 --> 00:18:55,420 perché è quello che sto usando qui. 263 00:18:55,420 --> 00:19:02,900 >> Quindi dire che volevo ottenere la descrizione del primo distacco di Craigslist. 264 00:19:02,900 --> 00:19:04,740 Quindi vorrei andare qui. 265 00:19:04,740 --> 00:19:10,660 Vorrei fare clic su Inspect Element di nuovo, in quanto questa è la descrizione. 266 00:19:10,660 --> 00:19:14,350 Mi piacerebbe andare qui e vedere se riesco a trovare come potrei 267 00:19:14,350 --> 00:19:16,530 essere in grado di cercare per questo tag unico. 268 00:19:16,530 --> 00:19:19,530 E in questo caso, ha un ID, che ci porta 269 00:19:19,530 --> 00:19:26,810 per il nostro prossimo modo di cercare tag, che è con un hashtag. 270 00:19:26,810 --> 00:19:30,670 >> Così per le classi, è possibile utilizzare l'operatore punto. 271 00:19:30,670 --> 00:19:38,610 Così .txt è specificando una classe di txt, considerando che l'hash specifica un ID. 272 00:19:38,610 --> 00:19:43,720 Quindi, in questo caso, il tag è sezione, e l'ID è postingbody. 273 00:19:43,720 --> 00:19:47,780 >> Quindi questo va e trova il first-- perché siamo 274 00:19:47,780 --> 00:19:51,200 utilizzando at_css-- questo va e Trova il primo elemento che 275 00:19:51,200 --> 00:19:57,180 esce con l'etichetta di sezione e l'ID di postingbody. 276 00:19:57,180 --> 00:20:02,636 E poi si può accedere l'elemento di testo di tale voce tornò con .text. 277 00:20:02,636 --> 00:20:06,230 E poi possiamo memorizzare che nella descrizione. 278 00:20:06,230 --> 00:20:09,370 >> Quindi, ora che abbiamo un descrizione delle variabili, 279 00:20:09,370 --> 00:20:14,850 potremmo essere in grado di fare, per esempio, file di I / O. Così file di I / O in Ruby 280 00:20:14,850 --> 00:20:21,310 è molto simile a file di I / O in C dove apriamo un file. 281 00:20:21,310 --> 00:20:23,260 Potremmo scrivere. 282 00:20:23,260 --> 00:20:25,060 E poi ci chiudiamo il file. 283 00:20:25,060 --> 00:20:29,660 >> Così qui, stiamo solo nominare il presentare, qualche variabile arbitraria. 284 00:20:29,660 --> 00:20:33,120 Potremmo anche appena messo questo qui. 285 00:20:33,120 --> 00:20:39,630 Abbiamo una variabile che stiamo memorizzazione il file aperto come con File.open. 286 00:20:39,630 --> 00:20:46,370 E stiamo scrivendo a questo file, così apriamo con l'operatore w. 287 00:20:46,370 --> 00:20:54,280 E poi abbiamo messo stringa nel depositare presso l'operatore .puts. 288 00:20:54,280 --> 00:20:58,310 E poi abbiamo messo la variabile che abbiamo vuole scrivere sul file all'interno di tale. 289 00:20:58,310 --> 00:21:00,200 E poi abbiamo appena chiudiamo il file. 290 00:21:00,200 --> 00:21:04,000 >> Quindi, se andiamo avanti ed eseguire questo, questo dovrebbe produrre un documento 291 00:21:04,000 --> 00:21:10,840 con description.txt che sarà avere questa descrizione all'interno di esso. 292 00:21:10,840 --> 00:21:14,015 Quindi, se corro it-- no. 293 00:21:14,015 --> 00:21:17,520 294 00:21:17,520 --> 00:21:23,330 E 'prodotto un file di testo con, si spera, la stessa cosa. 295 00:21:23,330 --> 00:21:25,850 296 00:21:25,850 --> 00:21:33,290 Quindi ci sarebbe stato un nuovo incarico che è venuto mentre ho parlato. 297 00:21:33,290 --> 00:21:36,580 E in effetti sembra che non vi è stata. 298 00:21:36,580 --> 00:21:43,380 Quindi, se andiamo a questo classico moto, 1962-1966, che sembra corrispondere. 299 00:21:43,380 --> 00:21:45,620 E ci si va. 300 00:21:45,620 --> 00:21:51,250 >> Ecco, questo è il più elementare funzionalità di raschiatura. 301 00:21:51,250 --> 00:21:57,510 Potremmo avere invece di solo scrivendo a questo file, 302 00:21:57,510 --> 00:21:59,930 siamo in grado di aggiungere cose a un array. 303 00:21:59,930 --> 00:22:03,770 Quindi, se io dichiaro tre array, titolo, prezzo e descrizione. 304 00:22:03,770 --> 00:22:06,310 305 00:22:06,310 --> 00:22:13,790 E stiamo operando sulla voce doc ora. 306 00:22:13,790 --> 00:22:16,940 Siamo in grado di passare attraverso e trovare tutte le span.txt. 307 00:22:16,940 --> 00:22:21,710 E ricordate, questo restituisce una matrice di tutti gli elementi che trova. 308 00:22:21,710 --> 00:22:27,300 E poi in Ruby, si può semplicemente usare .Ogni per scorrere ogni elemento 309 00:22:27,300 --> 00:22:28,410 dell'array. 310 00:22:28,410 --> 00:22:31,330 E poi per ogni articolo, Sto solo andando a chiamare 311 00:22:31,330 --> 00:22:34,620 un link, perché è in sostanza quello che è. 312 00:22:34,620 --> 00:22:46,830 >> Quindi, se ho messo ogni a.hdrlnk link.css puntino, questo è in realtà sta per il link 313 00:22:46,830 --> 00:22:58,280 e trovando in quel link un'altra Elemento HTML e la classe corrispondente. 314 00:22:58,280 --> 00:23:04,990 Quindi, se ci ricordiamo che cosa questo è stato, il span.txt, 315 00:23:04,990 --> 00:23:13,160 si può vedere- vorrei solo tornare indietro vero quick-- all'interno span.txt 316 00:23:13,160 --> 00:23:17,490 abbiamo un sacco di altre classi. 317 00:23:17,490 --> 00:23:27,180 Così dentro span.txt, stiamo cercando per un tag con un hdrlnk di classe. 318 00:23:27,180 --> 00:23:29,890 Quindi lasciatemi trovo per voi ragazzi reale veloce. 319 00:23:29,890 --> 00:23:37,390 320 00:23:37,390 --> 00:23:42,850 >> Così si può vedere qui, si tratta di un un tag che è nel giro di classe txt 321 00:23:42,850 --> 00:23:44,920 che ha la hdrlnk classe. 322 00:23:44,920 --> 00:23:47,610 E questo è proprio ciò che stiamo cercando di ottenere. 323 00:23:47,610 --> 00:23:54,680 >> Quindi stiamo ora cercando di memorizzare tutti di questi link all'interno del titolo. 324 00:23:54,680 --> 00:23:59,545 E poi andremo a stampare fuori ogni di questi link. 325 00:23:59,545 --> 00:24:00,360 Non mi dispiace. 326 00:24:00,360 --> 00:24:04,530 Stiamo andando a stampare il prezzo di ciascuno di questi. 327 00:24:04,530 --> 00:24:09,350 Così corriamo davvero rapido e vedere cosa fa. 328 00:24:09,350 --> 00:24:14,680 329 00:24:14,680 --> 00:24:17,720 >> Quindi, questo è andato appena fondamentalmente attraverso ciascuno dei collegamenti 330 00:24:17,720 --> 00:24:27,310 a sua volta, si accede il tag in questione, e poi tirato fuori il prezzo. 331 00:24:27,310 --> 00:24:33,910 E lo ha fatto perché dopo avete tutto nel titolo, 332 00:24:33,910 --> 00:24:37,260 abbiamo appena memorizzato il titolo lì. 333 00:24:37,260 --> 00:24:40,180 Abbiamo appena memorizzato il link all'interno del titolo array. 334 00:24:40,180 --> 00:24:47,720 E questo per il funzionamento in ciclo, dove invece di andare a a.hdrlnk, 335 00:24:47,720 --> 00:24:50,490 stiamo cercando un span.price. 336 00:24:50,490 --> 00:24:56,500 Quindi, se posso solo davvero trovare rapidamente il prezzo, se si controlla l'elemento, 337 00:24:56,500 --> 00:25:00,610 vedrete che si tratta di un arco con la classe di prezzo. 338 00:25:00,610 --> 00:25:04,670 E questo è essenzialmente come stiamo ottenendo il prezzo lì. 339 00:25:04,670 --> 00:25:10,040 >> Ecco, questo è il davvero caso base di raschiatura. 340 00:25:10,040 --> 00:25:13,550 Ecco come si ottiene tutto gli elementi di una pagina 341 00:25:13,550 --> 00:25:16,510 che, per esempio, si sa già l'URL. 342 00:25:16,510 --> 00:25:21,050 >> Quindi, se vogliamo ottenere un poco più in profondità, 343 00:25:21,050 --> 00:25:23,950 siamo in grado di raschiare le pagine all'interno di pagine. 344 00:25:23,950 --> 00:25:28,480 E per questo esempio, io sarò essere l'output in un file CSV. 345 00:25:28,480 --> 00:25:39,510 Così sto richiedendo csv qui perché rubino non, al suo interno, 346 00:25:39,510 --> 00:25:42,350 avere la funzionalità in file CSV appena uscita. 347 00:25:42,350 --> 00:25:45,030 Ecco, questo è super semplice. 348 00:25:45,030 --> 00:25:48,710 Lasciatemi solo andare a quella successiva. 349 00:25:48,710 --> 00:25:51,640 350 00:25:51,640 --> 00:25:57,170 Abbiamo coperto file di I / O. Così questo è simile a come è in C. 351 00:25:57,170 --> 00:26:00,870 E prima di passare al Kimono, Ti faccio vedere solo te davvero veloce come 352 00:26:00,870 --> 00:26:02,790 raschiare siti all'interno attrazioni. 353 00:26:02,790 --> 00:26:10,040 >> Così abbiamo già imparato come a dichiarare gli array in Ruby. 354 00:26:10,040 --> 00:26:13,280 Quindi sto solo dichiarare una mazzo di matrici arbitrarie 355 00:26:13,280 --> 00:26:16,310 che sarò la memorizzazione dei dati all'interno. 356 00:26:16,310 --> 00:26:20,680 doc funziona allo stesso modo come ha fatto nel file precedente. 357 00:26:20,680 --> 00:26:23,580 Stiamo andando a, trovare ciascuno dei span.txt di. 358 00:26:23,580 --> 00:26:25,040 Sappiamo già che. 359 00:26:25,040 --> 00:26:32,130 Questo è il contenitore entro cui ciascun collegamento ha tutti i dati che vogliamo. 360 00:26:32,130 --> 00:26:40,800 >> Ecco quello che stiamo facendo è per ogni link span class txt, stiamo andando a 361 00:26:40,800 --> 00:26:45,720 e stiamo trovando il tag, trovare il primo elemento di questo. 362 00:26:45,720 --> 00:26:49,937 Ricordate, Css restituisce un array, così non si può semplicemente accedere così com'è. 363 00:26:49,937 --> 00:26:51,520 Stiamo andando a trovare il primo elemento. 364 00:26:51,520 --> 00:26:56,430 Anche se è un array di uno elemento, è necessario utilizzare questa sintassi, 365 00:26:56,430 --> 00:26:58,800 e poi tirare fuori l'attributo href. 366 00:26:58,800 --> 00:27:01,800 >> Così abbiamo fatto questo all'inizio. 367 00:27:01,800 --> 00:27:04,440 Quindi questo dovrebbe essere familiare. 368 00:27:04,440 --> 00:27:14,330 E così ora abbiamo un array cosiddetti percorsi di tutti i nostri link 369 00:27:14,330 --> 00:27:16,590 che stiamo andando a voler utilizzare. 370 00:27:16,590 --> 00:27:21,350 Quindi, se abbiamo questa matrice di tutto dei percorsi che vogliamo usare, 371 00:27:21,350 --> 00:27:26,840 possiamo quindi creare una voce per ogni di quelle pagine quando apriamo la pagina. 372 00:27:26,840 --> 00:27:31,150 Quindi, come abbiamo visto anche su la sintassi prima, dove 373 00:27:31,150 --> 00:27:37,450 facendo interpolazione stringa con il percorso qui, per cui la sintassi è solo per il percorso. 374 00:27:37,450 --> 00:27:41,450 E potrei chiamare questo variabile qualsiasi nome arbitrario. 375 00:27:41,450 --> 00:27:43,070 >> Questo è l'importante. 376 00:27:43,070 --> 00:27:46,650 Questa è la matrice che ti essere l'accesso a ciascun elemento. 377 00:27:46,650 --> 00:27:52,400 Ma quando si dice per il percorso nei percorsi, questo significa per ciascun elemento nei percorsi, 378 00:27:52,400 --> 00:27:55,150 chiamarlo percorso, e usare quella. 379 00:27:55,150 --> 00:27:59,266 Questo è essenzialmente come quando si fare un ciclo for e si utilizza int i. 380 00:27:59,266 --> 00:28:04,000 Così si può trattare il percorso come il variabile che sta incrementando. 381 00:28:04,000 --> 00:28:07,820 >> E poi per ciascuno di questi, andare in ciascuno di tali collegamenti. 382 00:28:07,820 --> 00:28:11,710 Perché stiamo conservarla in pagina dell'articolo, così stiamo creando una nuova pagina ogni volta 383 00:28:11,710 --> 00:28:13,330 accediamo esso. 384 00:28:13,330 --> 00:28:20,560 E poi all'interno di quella nuova pagina, trovare span.postingtitletext, span.price, 385 00:28:20,560 --> 00:28:22,240 e poi la sezione # postingbody. 386 00:28:22,240 --> 00:28:28,430 Abbiamo già coperto sezione # postingbody quando abbiamo guardato la descrizione. 387 00:28:28,430 --> 00:28:34,890 >> Così possiamo andare a vedere nel post Craigslist, se si sta solo a guardare il titolo, 388 00:28:34,890 --> 00:28:38,810 si può vedere qui, spanna postingtitletext. 389 00:28:38,810 --> 00:28:41,390 Ed è per questo che è lì. 390 00:28:41,390 --> 00:28:49,120 E poi per il prezzo, è possibile accedere con span class di prezzo. 391 00:28:49,120 --> 00:28:54,480 >> Così abbiamo anche forse potrebbe desidera memorizzare l'URL. 392 00:28:54,480 --> 00:28:58,580 Quindi dobbiamo solo correre questo ancora una volta, conservarlo in un array, 393 00:28:58,580 --> 00:29:01,150 perché se siete alla ricerca su Craigslist, sei 394 00:29:01,150 --> 00:29:05,290 probabilmente andando a voler un modo per, se vedi qualcosa che ti interessa, 395 00:29:05,290 --> 00:29:06,620 tornare a quel sito. 396 00:29:06,620 --> 00:29:10,480 Così si desidera solo per memorizzare l'URL per l'amor riferimenti. 397 00:29:10,480 --> 00:29:13,840 398 00:29:13,840 --> 00:29:19,630 >> Questo è solo essenzialmente un'altra sintassi per il ciclo for. 399 00:29:19,630 --> 00:29:26,360 Potevo solo che invece paths.each di per il percorso nei percorsi con indice. 400 00:29:26,360 --> 00:29:31,280 E questa sintassi Ruby for-- percorso è quello che abbiamo fatto qui, 401 00:29:31,280 --> 00:29:33,920 dichiarare una variabile per ogni elemento. 402 00:29:33,920 --> 00:29:38,540 E l'indice si comporta come la i in C per cicli. 403 00:29:38,540 --> 00:29:41,280 Così si può tenere traccia di ciò è l'indice. 404 00:29:41,280 --> 00:29:45,200 >> Così qui è solo un piccola cosa conveniente 405 00:29:45,200 --> 00:29:46,950 per quando si sta eseguendo il raschietto. 406 00:29:46,950 --> 00:29:50,580 Se si sta raschiando centinaia di pagine, per assicurarsi che non è appeso, 407 00:29:50,580 --> 00:29:53,320 lo farà solo in uscita, Sto accedendo a questa pagina, 408 00:29:53,320 --> 00:29:55,960 e fare in modo che è ancora in corso. 409 00:29:55,960 --> 00:29:59,250 Ma per i nostri scopi, perché ci sono un centinaio di articoli, 410 00:29:59,250 --> 00:30:08,000 Ho intenzione di accedere solo tre di loro in modo che noi non a corto di tempo qui. 411 00:30:08,000 --> 00:30:13,040 >> Ma prima di arrivare a questo, io sono solo intenzione di mostrare davvero veloce, 412 00:30:13,040 --> 00:30:16,940 Sarò emettere il titolo, prezzo, descrizione e URL 413 00:30:16,940 --> 00:30:19,600 di ciascuno dei collegamenti che ho raschiato. 414 00:30:19,600 --> 00:30:23,720 E poi questo è solo l' sintassi per la libreria CSV. 415 00:30:23,720 --> 00:30:25,240 Si apre un file CSV. 416 00:30:25,240 --> 00:30:27,070 Questo è quello che ho intenzione di chiamarlo. 417 00:30:27,070 --> 00:30:29,430 Aprilo con write do. 418 00:30:29,430 --> 00:30:33,830 E poi CSV sarà il file si sta inserendo tutto in. 419 00:30:33,830 --> 00:30:37,800 Questo è solo un controllo di integrità per me sapere che è in esecuzione. 420 00:30:37,800 --> 00:30:41,240 E questo è il mio sanity check sapere che è completato. 421 00:30:41,240 --> 00:30:46,670 Così sto mettendo titolo in una riga in il CSV, prezzo, URL, descrizione, 422 00:30:46,670 --> 00:30:49,420 tutto in righe nel file CSV. 423 00:30:49,420 --> 00:30:53,410 >> Quindi, se andiamo a correre questo now-- e ho appena 424 00:30:53,410 --> 00:31:04,710 fare in modo che io ho salvato invece it-- del solo output al terminale, 425 00:31:04,710 --> 00:31:09,750 dovremmo avere un file CSV File che si produce. 426 00:31:09,750 --> 00:31:13,500 Così qui possiamo vedere il CSV documento che è stato prodotto. 427 00:31:13,500 --> 00:31:19,330 Questa è l'uscita del SCAPE che ho appena eseguito. 428 00:31:19,330 --> 00:31:23,030 Come si può vedere qui, Accesso Pagina 0, 1, 2, 3. 429 00:31:23,030 --> 00:31:27,400 Questi sono i titoli, prezzi, descrizioni. 430 00:31:27,400 --> 00:31:31,710 E se guardiamo a questo CSV File che abbiamo generato, 431 00:31:31,710 --> 00:31:35,700 si può vedere il suo emesso qui. 432 00:31:35,700 --> 00:31:40,350 Questo non è Excel, quindi non è formattato in righe e colonne. 433 00:31:40,350 --> 00:31:45,140 Ma si può immaginare come potrebbe essere formattato. 434 00:31:45,140 --> 00:31:47,740 >> CSV sta per valori separati da virgola. 435 00:31:47,740 --> 00:31:50,090 Quindi potete immaginare che questo potrebbe essere una riga. 436 00:31:50,090 --> 00:31:54,700 E ogni virgola sarebbe indicano una colonna separata. 437 00:31:54,700 --> 00:32:00,010 Solo una parola di caution-- a volte sei 438 00:32:00,010 --> 00:32:02,260 raschiando le cose con un sacco di virgole. 439 00:32:02,260 --> 00:32:05,100 Quindi, se siete in uscita in un file CSV, 440 00:32:05,100 --> 00:32:10,340 Potrebbe non uscita modo si potrebbe pensare. 441 00:32:10,340 --> 00:32:16,770 >> Ecco, questo è in sostanza tutto c'è da raschiare HTML di base 442 00:32:16,770 --> 00:32:20,110 pagine con Nokogiri. 443 00:32:20,110 --> 00:32:26,000 >> Così l'essere Internet innovativo come è venuto su 444 00:32:26,000 --> 00:32:33,220 con un più automatizzato e GUI versione, seppur meno robusta 445 00:32:33,220 --> 00:32:35,540 versione di raschiatura vari siti web. 446 00:32:35,540 --> 00:32:39,060 E per i nostri scopi Sarò dimostrazione 447 00:32:39,060 --> 00:32:42,920 una estensione Chrome chiamato Kimono. 448 00:32:42,920 --> 00:32:46,690 E tutto quello che dovete fare è navigare alla pagina che si desidera per raschiare. 449 00:32:46,690 --> 00:32:48,590 Si fa clic su un campo di interesse. 450 00:32:48,590 --> 00:32:51,510 Calibrare i campi, perché sarà automaticamente 451 00:32:51,510 --> 00:32:54,360 rilevare ciò che pensa si vuole essere raschiatura, 452 00:32:54,360 --> 00:32:56,280 e poi basta creare una API. 453 00:32:56,280 --> 00:33:03,700 >> Quindi, se dovessimo dimostrarlo su Craigslist, in realtà non avrebbe funzionato. 454 00:33:03,700 --> 00:33:08,290 E questo è quello che stavo tornando a dicendo su di esso non essere così robusta. 455 00:33:08,290 --> 00:33:10,320 Ha problemi a creare l'API. 456 00:33:10,320 --> 00:33:13,400 Ma come dimostrazione di che cosa avrebbe fatto, 457 00:33:13,400 --> 00:33:17,460 se si installa l'estensione Chrome, tutto ciò che fai è si fa clic su di esso. 458 00:33:17,460 --> 00:33:21,750 Si Kimonofies pagina, e poi si clicca sulla cosa che si desidera script. 459 00:33:21,750 --> 00:33:24,480 >> Quindi, se dovessi fare clic su che, sarebbe in evidenza 460 00:33:24,480 --> 00:33:28,130 ciò che pensa che voglio essere raschiando questa pagina. 461 00:33:28,130 --> 00:33:33,660 Così forse io chiamo questa lista. 462 00:33:33,660 --> 00:33:36,430 Questo è il numero di oggetti che ho selezionato. 463 00:33:36,430 --> 00:33:43,810 E posso solo confermare o smentire qualche degli altri elenchi proposti 464 00:33:43,810 --> 00:33:49,600 per farlo aggiungere al che cosa sarà raschiato. 465 00:33:49,600 --> 00:33:52,330 >> Così ora possiamo vedere non c'è un centinaio di elementi selezionati. 466 00:33:52,330 --> 00:33:58,060 Se voglio avere un altro campo che io anche raschiare che è legato a questo, 467 00:33:58,060 --> 00:34:02,540 Dico che voglio raschiare il prezzo così, allora posso fare lo stesso. 468 00:34:02,540 --> 00:34:06,190 469 00:34:06,190 --> 00:34:11,550 >> Quindi, ecco una dimostrazione di come è molto meno robusto, perché adesso è 470 00:34:11,550 --> 00:34:15,050 raccogliendo la città invece di solo il prezzo che voglio. 471 00:34:15,050 --> 00:34:16,989 E ora è raccolto 200 cose. 472 00:34:16,989 --> 00:34:19,880 È possibile tornare indietro e cancellare. 473 00:34:19,880 --> 00:34:21,449 Puoi riprovare. 474 00:34:21,449 --> 00:34:24,250 Ma non ci sono garanzie. 475 00:34:24,250 --> 00:34:29,909 Questo è come funziona a volte. 476 00:34:29,909 --> 00:34:32,969 Come potete vedere qui, ora dice 96 qui. 477 00:34:32,969 --> 00:34:37,000 Si raccolse maggior parte dei collegamenti che si vuole raschiare, ma non 478 00:34:37,000 --> 00:34:39,280 necessariamente tutte le porte. 479 00:34:39,280 --> 00:34:43,909 >> Un altro utile strumento di Kimono però è che si può andare alle funzioni avanzate 480 00:34:43,909 --> 00:34:47,980 qui, andare a Avanzate, e vi mostrerà 481 00:34:47,980 --> 00:34:53,139 la ripartizione del unica modo per accedere al HTML 482 00:34:53,139 --> 00:34:54,909 tag che si desidera per raschiare. 483 00:34:54,909 --> 00:35:01,450 Così per le inserzioni, se si guarda a qui, se si accede p arco div abbracciano una, 484 00:35:01,450 --> 00:35:06,030 si può effettivamente utilizzare solo questo nel codice Nokogiri, 485 00:35:06,030 --> 00:35:10,780 dove prima avevamo span.txt per accedere a ciascuno dei elenchi. 486 00:35:10,780 --> 00:35:13,270 Se voglio solo il testo all'interno le liste, 487 00:35:13,270 --> 00:35:18,950 Potrei ingresso spazio div p durata space space arco spazio una, 488 00:35:18,950 --> 00:35:21,570 e sarebbe ottenere lo stesso effetto. 489 00:35:21,570 --> 00:35:26,320 E per quelli di voi che sono interessati in utilizzando le espressioni regolari, 490 00:35:26,320 --> 00:35:31,670 succede a dare anche il regolare espressione sorta di stringa di input 491 00:35:31,670 --> 00:35:34,900 per trovare le cose si sta cercando di trovare. 492 00:35:34,900 --> 00:35:44,130 >> Quindi c'è un'altra caratteristica fredda di Kimono dove si può impaginare, 493 00:35:44,130 --> 00:35:47,780 Il che non solo posso grattare i risultati di questa pagina 494 00:35:47,780 --> 00:35:50,890 Posso fare clic su questo piccolo Pulsante qui, impaginazione, 495 00:35:50,890 --> 00:35:55,580 specificare il pulsante che avrebbe portami alla pagina successiva, 496 00:35:55,580 --> 00:35:59,500 e allora sarà sufficiente sapere che può scorrere alla pagina successiva, 497 00:35:59,500 --> 00:36:04,120 e poi raschiare tutto il tempo the-- come è lo stesso formato naturalmente-- 498 00:36:04,120 --> 00:36:06,110 scape tutti quei collegamenti pure. 499 00:36:06,110 --> 00:36:15,230 >> Quindi perché Kimono non vuole lavoriamo con Craigslist, quello che abbiamo fatto 500 00:36:15,230 --> 00:36:19,790 è che ho Kimonofied Harvard Crimson. 501 00:36:19,790 --> 00:36:29,380 Ho tirato fuori alcune delle specie di top presenti articoli, confermano qui. 502 00:36:29,380 --> 00:36:33,090 Dire tutto questo. 503 00:36:33,090 --> 00:36:35,830 Ho compilato questa API per voi prima del tempo. 504 00:36:35,830 --> 00:36:38,990 Ma per il resto cosa fareste è si sarebbe solo fatto clic su Fine. 505 00:36:38,990 --> 00:36:40,940 Inserisci i dati API. 506 00:36:40,940 --> 00:36:45,260 Impostare a uno crawl automatico o manuale. 507 00:36:45,260 --> 00:36:48,460 Così si potrebbe aggiornare il vostro dati ogni 15 minuti, 508 00:36:48,460 --> 00:36:50,330 settimanale, ogni giorno, quello che volete. 509 00:36:50,330 --> 00:36:51,160 Assegnare un nome alla API. 510 00:36:51,160 --> 00:36:52,790 Creare l'API. 511 00:36:52,790 --> 00:36:58,460 Per il vostro beneficio, ho creato il Cremisi pagina API anteriore già. 512 00:36:58,460 --> 00:37:02,480 >> Quindi basta creare un account su Kimono, e 513 00:37:02,480 --> 00:37:06,240 memorizza tutti i vostri le API per voi. 514 00:37:06,240 --> 00:37:10,330 Quindi, in sostanza, che è tutto tuo graffi differenti separati. 515 00:37:10,330 --> 00:37:18,250 >> Quindi, se guardiamo qui, questa è la opinioni link che ho raccolto. 516 00:37:18,250 --> 00:37:21,290 Questi sono i presenti link che ho raccolto. 517 00:37:21,290 --> 00:37:24,090 E questi sono i più letti link che ho raccolto 518 00:37:24,090 --> 00:37:27,120 da questo più recente scape API. 519 00:37:27,120 --> 00:37:30,790 >> Quindi, se si può vedere qui, questi sarebbero la presenti, 520 00:37:30,790 --> 00:37:34,130 questi sarebbero i pareri, che in questo esempio, 521 00:37:34,130 --> 00:37:38,150 Li ho combinato tutto in una collezione. 522 00:37:38,150 --> 00:37:42,780 Ma se hai appena giocare con esso un po ', è possibile dividerlo 523 00:37:42,780 --> 00:37:45,090 e dividerlo fino tuttavia si vuole il più a lungo 524 00:37:45,090 --> 00:37:47,520 come la formattazione è leggermente diverso. 525 00:37:47,520 --> 00:37:51,320 >> Giusto per giocare con questo, il crawl set up, uno degli aspetti negativi 526 00:37:51,320 --> 00:37:58,120 è che si può strisciare solo fino a 25 pagine alla volta. 527 00:37:58,120 --> 00:38:00,430 Questo è uno dei fattori limitanti. 528 00:38:00,430 --> 00:38:03,060 Ma qui, se si imposta a strisciare manuale, questo 529 00:38:03,060 --> 00:38:06,100 come si può dire che per aggiornare i dati. 530 00:38:06,100 --> 00:38:11,010 E qui si può vedere la vostra storia crawl di tutto quello che hai strisciato. 531 00:38:11,010 --> 00:38:16,000 E voi potete tornare indietro, iscriviti, giocare con tutti i diversi modi 532 00:38:16,000 --> 00:38:20,340 che è possibile modificare e utilizzare i vostri dati. 533 00:38:20,340 --> 00:38:24,580 >> Kimono può essere impostata fino a raschiare link all'interno link. 534 00:38:24,580 --> 00:38:29,700 E si dovrebbe farlo prima raschiando un elenco di link, 535 00:38:29,700 --> 00:38:35,390 e quindi utilizzando tale API come saltare giù punto per un altro API 536 00:38:35,390 --> 00:38:36,710 che si crea lo script. 537 00:38:36,710 --> 00:38:42,040 Ma questo è più complicato di quello che stiamo per entrare in oggi. 538 00:38:42,040 --> 00:38:44,270 >> Ecco, questo è kimono. 539 00:38:44,270 --> 00:38:46,980 Parleremo dei pro e contro di Nokogiri e Kimono. 540 00:38:46,980 --> 00:38:50,380 >> Nokogiri, è veramente veloce. 541 00:38:50,380 --> 00:38:51,640 E 'facile da testare. 542 00:38:51,640 --> 00:38:55,910 Si può solo mette nulla a console, facile da configurare. 543 00:38:55,910 --> 00:39:00,400 Si può decidere esattamente cosa si vuole raschiare e memorizzare. 544 00:39:00,400 --> 00:39:02,060 Non ci sono limiti di pagina. 545 00:39:02,060 --> 00:39:08,010 Io in realtà usato per raschiare come 1800 siti web di scuole del Sud Africa 546 00:39:08,010 --> 00:39:10,870 per una mail per uno stage che ho fatto. 547 00:39:10,870 --> 00:39:16,060 >> Ecco, questo è possibile, anche se le migliori prassi sarebbe quello di dividere la sceneggiatura. 548 00:39:16,060 --> 00:39:19,310 Perché se non riesce, allora non si ottiene nulla. 549 00:39:19,310 --> 00:39:22,790 Ma se si fa un centinaio, forse 200 pagine alla volta, 550 00:39:22,790 --> 00:39:27,840 allora avete qualche possibilità di almeno ottenerlo frammentario, soprattutto 551 00:39:27,840 --> 00:39:30,280 se hai male di internet. 552 00:39:30,280 --> 00:39:32,720 >> Purtroppo può racimolare solo HTML. 553 00:39:32,720 --> 00:39:35,190 Quindi, se avete pages-- caricate dinamicamente 554 00:39:35,190 --> 00:39:39,480 e io vi mostrerò un esempio come Kayak in una secondo-- 555 00:39:39,480 --> 00:39:42,270 Nokogiri purtroppo non può raschiare quello. 556 00:39:42,270 --> 00:39:45,700 >> Ma Kimono è anche facile da usare. 557 00:39:45,700 --> 00:39:48,330 Come si è visto, è essenzialmente un punta e clicca. 558 00:39:48,330 --> 00:39:50,260 Si può raschiare JavaScript. 559 00:39:50,260 --> 00:39:53,790 Purtroppo, non c'è un massimo per quante pagine si può raschiare. 560 00:39:53,790 --> 00:39:55,710 A volte è un po ' difficile da configurare. 561 00:39:55,710 --> 00:39:57,240 Essa si confonde. 562 00:39:57,240 --> 00:40:00,920 Ma è sicuramente una cosa da considerare 563 00:40:00,920 --> 00:40:05,930 se non stai cercando di avere un Super robusto raschiare mantenibile. 564 00:40:05,930 --> 00:40:09,010 Se si desidera ottenere tutto fuori di una pagina in fretta, 565 00:40:09,010 --> 00:40:10,970 allora Kimono è un davvero ottimo strumento da utilizzare. 566 00:40:10,970 --> 00:40:16,490 E come ho detto prima, c'è la funzione avanzata di Kimono 567 00:40:16,490 --> 00:40:19,260 che come mostra accedere al HTML unico 568 00:40:19,260 --> 00:40:24,210 elemento, che è super utile anche se si sta lavorando in Nokogiri. 569 00:40:24,210 --> 00:40:30,370 >> Quindi, se andiamo al sito Kayak, per ad esempio, si può vedere ci è-- 570 00:40:30,370 --> 00:40:31,750 o forse non si può vedere. 571 00:40:31,750 --> 00:40:38,910 Ma se vi mostro l'URL per Kayak, questo in realtà è solo l'URL di origine. 572 00:40:38,910 --> 00:40:43,800 Questo è l'URL prima di essere modificato con qualsiasi script JavaScript 573 00:40:43,800 --> 00:40:45,350 che hanno in corso. 574 00:40:45,350 --> 00:40:52,420 E sta andando a un aspetto diverso da ispezionare l'elemento. 575 00:40:52,420 --> 00:40:55,940 >> Quindi, se si passa attraverso e voi all'altezza del Inspect Element 576 00:40:55,940 --> 00:41:00,340 codice al codice sorgente, è in realtà sta per essere diverso. 577 00:41:00,340 --> 00:41:05,640 E questo è essenzialmente il motivo Nokogiri non può raschiare siti caricati dinamicamente. 578 00:41:05,640 --> 00:41:08,810 Perché è Nokogiri raschiando il URL di origine, 579 00:41:08,810 --> 00:41:16,310 considerando Kimono è in realtà raschiando quello che stai essenzialmente 580 00:41:16,310 --> 00:41:18,260 vedendo in Seleziona elemento. 581 00:41:18,260 --> 00:41:23,880 >> Quindi, se vado attraverso e io cercare di Kimonofy Kayak, 582 00:41:23,880 --> 00:41:26,600 Posso effettivamente andare attraverso e selezionare il prezzo. 583 00:41:26,600 --> 00:41:32,360 E 'un po' più difficile, e in questo caso, è 584 00:41:32,360 --> 00:41:36,600 in realtà vedendo questo prezzo come diverse da queste. 585 00:41:36,600 --> 00:41:41,110 Così, mentre si può configure-- o se non sono stati caricati in modo dinamico, 586 00:41:41,110 --> 00:41:43,620 è possibile configurare Nokogiri per ottenere tutti questi. 587 00:41:43,620 --> 00:41:48,230 >> Perché la formattazione è leggermente diverso per questo elenco 588 00:41:48,230 --> 00:41:51,280 come è rispetto al resto di loro, e si può vedere qui 589 00:41:51,280 --> 00:41:54,830 in realtà è andato e selezionati tutti i prezzi dei voli. 590 00:41:54,830 --> 00:42:01,200 Forse voglio selezionare tempo di volo pure. 591 00:42:01,200 --> 00:42:04,700 E posso passare attraverso e sorta di configurare tale. 592 00:42:04,700 --> 00:42:06,950 Io non voglio questo. 593 00:42:06,950 --> 00:42:10,200 Voglio solo il tempo del prossimo volo. 594 00:42:10,200 --> 00:42:17,030 E poi, dopo un paio di questi passando, si ottiene l'immagine. 595 00:42:17,030 --> 00:42:19,080 Così Kimono piuttosto intelligente. 596 00:42:19,080 --> 00:42:21,900 E 'solo non è così robusto. 597 00:42:21,900 --> 00:42:26,710 >> Ci sono alcuni altri alternative che è possibile utilizzare. 598 00:42:26,710 --> 00:42:31,600 E ti faccio vedere qui. 599 00:42:31,600 --> 00:42:35,790 Se si è più a suo agio Python invece di Ruby forse, 600 00:42:35,790 --> 00:42:39,290 vi è una biblioteca chiamato Beautiful Soup. 601 00:42:39,290 --> 00:42:40,430 È possibile utilizzare tale. 602 00:42:40,430 --> 00:42:42,270 E 'molto simile a Nokogiri. 603 00:42:42,270 --> 00:42:44,620 Ha un paio di più funzioni. 604 00:42:44,620 --> 00:42:52,160 È possibile trovare un tag HTML e poi spostarsi verso l'alto o spostare lateralmente. 605 00:42:52,160 --> 00:42:54,690 >> C'è PyQt. 606 00:42:54,690 --> 00:42:57,820 Questo può effettivamente raschiare dinamico siti, perché è una sorta di 607 00:42:57,820 --> 00:43:02,540 è un WebKit che finge di essere un browser senza che in realtà 608 00:43:02,540 --> 00:43:03,670 essendo un browser. 609 00:43:03,670 --> 00:43:07,490 Quindi sarebbe attendere per tutta la JavaScript per caricare prima, e poi 610 00:43:07,490 --> 00:43:09,560 entrare e cercare di raschiare il sito. 611 00:43:09,560 --> 00:43:13,560 >> Se si vuole attaccare con Ruby, può andare un livello superiore rispetto Nokogiri. 612 00:43:13,560 --> 00:43:17,650 È possibile utilizzare Capybara con un wrapper Poltergeist. 613 00:43:17,650 --> 00:43:22,910 E questo può effettivamente essenzialmente fare la stessa cosa 614 00:43:22,910 --> 00:43:26,610 come PyQt, che è si tratta di un WebKit. 615 00:43:26,610 --> 00:43:29,610 Si attende la JavaScript per caricare prima. 616 00:43:29,610 --> 00:43:33,340 Se giocherellare intorno con esso abbastanza, si può anche farlo clicca sulle cose. 617 00:43:33,340 --> 00:43:42,780 >> Quindi, se c'è un link che Non è un classico href dove 618 00:43:42,780 --> 00:43:46,350 il percorso è facilmente accessibile, e è qualche cosa JavaScript che rileva 619 00:43:46,350 --> 00:43:49,490 un click, si può effettivamente fare. 620 00:43:49,490 --> 00:43:53,430 La biblioteca più popolare per simulare un utente 621 00:43:53,430 --> 00:43:56,390 è in JavaScript, che è PhantomJS. 622 00:43:56,390 --> 00:44:01,010 Questo può ovviamente raschiare dinamico siti perché questo è essenzialmente 623 00:44:01,010 --> 00:44:04,270 fingendo di essere Chrome senza l'interfaccia utente. 624 00:44:04,270 --> 00:44:09,970 >> E poi, naturalmente più robusto, ma l'opzione più lenta, 625 00:44:09,970 --> 00:44:13,260 è una automazione del browser selenio. 626 00:44:13,260 --> 00:44:15,550 E purtroppo, non si sta andando ad essere 627 00:44:15,550 --> 00:44:19,770 in grado di farlo entro il vostro IDE CS50. 628 00:44:19,770 --> 00:44:24,140 Perché essenzialmente quello che non fa altro che si avvia il vostro Chrome, 629 00:44:24,140 --> 00:44:27,090 Firefox, il browser qualunque che si desidera utilizzare, 630 00:44:27,090 --> 00:44:32,570 e tiene traccia forse il mouse movimento, qualunque cosa si digita, 631 00:44:32,570 --> 00:44:35,170 ed è appena sorta di automatizza questo processo. 632 00:44:35,170 --> 00:44:42,070 Così è stato sviluppato come una sorta di sito web strumento di test di automazione. 633 00:44:42,070 --> 00:44:45,910 Ma un sacco di gente usa Selenio per raschiare siti web 634 00:44:45,910 --> 00:44:49,990 che altrimenti hanno un molte difficoltà raschiatura 635 00:44:49,990 --> 00:44:53,700 con alcuni di questi strumenti, più rapidi. 636 00:44:53,700 --> 00:44:57,530 >> Ecco, questo è tutto quello che ho per il web scraping. 637 00:44:57,530 --> 00:44:58,090 Divertiti. 638 00:44:58,090 --> 00:45:01,762 639 00:45:01,762 --> 00:45:02,680 >> PUBBLICO: Domanda. 640 00:45:02,680 --> 00:45:04,016 >> ROBERT KRABEK: Sì. 641 00:45:04,016 --> 00:45:12,840 >> PUBBLICO: Esiste un meccanismo di hash il sito web in modo si potrebbe fondamentalmente 642 00:45:12,840 --> 00:45:14,207 passare attraverso di essa in seguito. 643 00:45:14,207 --> 00:45:15,040 ROBERT KRABEK: Sì. 644 00:45:15,040 --> 00:45:21,530 Così abbiamo messo la, nel nostro esempio, per entrambi, 645 00:45:21,530 --> 00:45:24,980 abbiamo messo l'intero sito web in doc. 646 00:45:24,980 --> 00:45:31,260 E così si potrebbe effettivamente basta prendere il doc variabile e scrivere in un file. 647 00:45:31,260 --> 00:45:35,490 Quindi, se volessi, potrei scriverlo fuori come un file HTML, 648 00:45:35,490 --> 00:45:39,280 e poi invece di usare OpenURI e una richiesta cURL, 649 00:45:39,280 --> 00:45:43,520 quindi ho potuto solo aprire doc HTML e quindi cercare tale. 650 00:45:43,520 --> 00:45:47,960 >> PUBBLICO: Ma si può preservare il tipo di esperienza online 651 00:45:47,960 --> 00:45:48,930 mentre lo fai non in linea. 652 00:45:48,930 --> 00:45:51,013 Per esempio. Quando sei volante per diverse ore, 653 00:45:51,013 --> 00:45:54,070 Voglio fondamentalmente archivio tutto il sito. [Incomprensibile] 654 00:45:54,070 --> 00:45:58,780 >> ROBERT KRABEK: Sì, questo è exactly-- così alla lettera ciò che questo sta facendo 655 00:45:58,780 --> 00:46:03,010 sta sta prendendo tutto che sarebbe a questo URL. 656 00:46:03,010 --> 00:46:11,280 Quindi, se ci siamo imbattuti cURL, è prendendo tutto questo HTML, 657 00:46:11,280 --> 00:46:14,590 ed è riporlo all'interno del documento variabile. 658 00:46:14,590 --> 00:46:17,290 Allora si può fare tutto ciò che si vuole fare con doc. 659 00:46:17,290 --> 00:46:18,575 Potete eseguire l'output in un file. 660 00:46:18,575 --> 00:46:19,950 PUBBLICO: Ma non è legato in su. 661 00:46:19,950 --> 00:46:20,780 Non è dinamica. 662 00:46:20,780 --> 00:46:22,770 Non è ricorsivo, giusto? 663 00:46:22,770 --> 00:46:24,016 Vedete cosa voglio dire? 664 00:46:24,016 --> 00:46:28,359 Sto cercando di fondamentalmente una sorta di hash tutto il sito sul mio disco rigido 665 00:46:28,359 --> 00:46:31,150 in modo che potessi fondamentalmente farlo per diverse ore senza internet. 666 00:46:31,150 --> 00:46:32,025 >> ROBERT KRABEK: Giusto. 667 00:46:32,025 --> 00:46:37,140 Quindi, se ho had-- così dov'è il mio file di I / O? 668 00:46:37,140 --> 00:46:47,766 Quindi questo è il file di I / O. Così dicono invece di questo, io chiamo questo craigslist.html. 669 00:46:47,766 --> 00:46:52,620 670 00:46:52,620 --> 00:46:53,940 Aprivo che fino. 671 00:46:53,940 --> 00:46:59,020 Avevo mette doc in esso. 672 00:46:59,020 --> 00:47:00,470 Chiudo il file. 673 00:47:00,470 --> 00:47:05,410 E poi solo perché il CS50 IDE è sulla nuvola, che è tutto ciò. 674 00:47:05,410 --> 00:47:07,710 Posso andare qui. 675 00:47:07,710 --> 00:47:09,320 Posso scaricare il file. 676 00:47:09,320 --> 00:47:11,830 E allora sarebbe sul mio disco rigido. 677 00:47:11,830 --> 00:47:13,930 Così si può fare in questo modo. 678 00:47:13,930 --> 00:47:18,830 Oppure, se sei a casa, non si utilizza il CS50 IDE, come Sublime o qualcosa, 679 00:47:18,830 --> 00:47:21,900 questo è ancora più facile, perché questo è tutto disponibile localmente, 680 00:47:21,900 --> 00:47:23,020 non legato ad Internet. 681 00:47:23,020 --> 00:47:24,720 >> PUBBLICO: Capisco. 682 00:47:24,720 --> 00:47:26,580 Questo è per un problema particolare. 683 00:47:26,580 --> 00:47:30,410 Potete farlo in modo ricorsivo in modo che si andare più strati profondi genere di cose? 684 00:47:30,410 --> 00:47:33,801 >> ROBERT KRABEK: posso scaricare le cartelle come pure, se è questo che stai chiedendo. 685 00:47:33,801 --> 00:47:34,426 PUBBLICO: Sì. 686 00:47:34,426 --> 00:47:39,890 687 00:47:39,890 --> 00:47:41,440 >> ROBERT KRABEK: Freddo. 688 00:47:41,440 --> 00:47:43,182