>> [RIPRODUZIONE DI BRANI MUSICALI]
ROBERT KRABEK: Ciao, ragazzi.
Il mio nome è Robert Krabek, e Io sarà essere vi insegna ragazzi
come per raschiare il web con Nokogiri, che è una libreria Ruby,
e Kimono, che è una estensione per Chrome.
>> Quindi, prima c'è un paio di cose che si
può fare se magari sei stato facendo tutte le pset finora
e l'area di lavoro è ottenere un po 'pieno.
Possiamo in realtà solo andare creare una nuova area di lavoro per voi
per fare solo un nuovo progetto in.
Quindi, se si vuole continuare lavora nel ID del modello CS50
che attualmente si dispone, sentitevi liberi, e si può solo
installare Nokogiri con CFLAGS gemma equals-- install nokogiri.
Ma per il resto ti mostrerò come impostare un nuovo uno.
E allora questo è essenzialmente cadere più ruote di formazione.
E tu sei la codifica come se fossi solo codifica in Sublime o qualcosa del genere.
Quindi, se ci spostiamo sopra.
>> Quindi dire che questo è il tuo attuale CS 50 ID.
Si può solo andare a Cloud9 qui.
Si può andare al cruscotto.
Dovrebbe apparire scheda Workspaces.
E poi è sufficiente fare clic qui, creare un nuovo spazio di lavoro.
Assegnare un nome alla nuova area di lavoro, forse di prova, o scraping.
E quindi fare clic su questa scheda personalizzata qui, invece della scheda modelli CS50.
E allora si può solo andare e creare un nuovo spazio di lavoro.
>> Ho già creato uno spazio di lavoro qui.
Quindi lavoreremo con questo.
E se è stato creato un nuovo spazio di lavoro così con la scheda personalizzata,
si può semplicemente digitare gem install nokogiri, che non sta andando qui.
OK, è un po 'congelato.
Ma è possibile digitare gem install nokogiri.
E questo dovrebbe essere tutto ciò che c'è all'installazione.
>> Come ho detto prima, se siete ancora lavorare nel vostro CS50 ID del modello,
è sufficiente digitare CFLAGS è uguale a gem install nokogiri.
E ho già installato qui così io non lo farà.
Ma per coloro che seguono lungo, sentitevi liberi di farlo.
>> Quindi, una volta che hai la tua Nokogiri spazio di lavoro o biblioteca installata,
Sto per darvi un po ' di un corso accelerato di sintassi di Ruby
perché Nokogiri è una libreria Ruby.
Quindi è necessario conoscere un po 'di base Sintassi di Ruby per lavorare con Nokogiri.
Così alcune differenze di base da quello che siete abituati a
forse, se hai lavorato finora solo C e PHP,
si dichiarano delle variabili con nessun tipo.
Non si utilizza il punto e virgola, che è una specie di sollievo.
Non ci sono parentesi ora intorno per o while, per esempio.
Devi solo un blocco di codice, e allora si mette fine alla fine di questo.
Non c'è plus plus o meno meno, quindi basta
sapere che quando si sta facendo per i cicli,
solo più uguali e meno uguali.
E invece di hash includono, userete richiedere e quindi
qualunque biblioteca cercando per caricare nel programma.
>> Rubino non è un linguaggio compilato.
Ecco, questo è un altro rilievo.
E 'più simile a PHP dove si tratta di un linguaggio interpretato.
È possibile eseguire qualsiasi script di Ruby che si scrive con Ruby seguita
dal nome dello script o del programma.
Per indicare che si tratta di un programma in Ruby, si finisce con .rb invece di .c.
E ci sono variabili array di dimensioni in Ruby,
che è super conveniente quando sei raschiatura e forse vuole accodare
i dati che avete raschiato in un array.
Non c'è bisogno di malloc un nuovo array e copiare il vecchio array in il nuovo array.
Si può solo aggiungere con i due segni freccia.
E non ci sono caratteri, ci solo stringhe singola lettera.
Così che dovrebbe essere un po 'più facile.
>> Quindi ci limiteremo a dare qualche esempi di alcune sintassi di base di Ruby.
Così qui si può vedere che invece di la barra barra, a commentare in Ruby,
è sufficiente utilizzare il simbolo di cancelletto.
E dichiarazione di variabile, è è sufficiente digitare l'uguale variabile
quello che vuoi la variabile di essere.
Possono essere stringhe.
Si possono avere matrice, che si popola con i valori.
puts e stampe sono simili.
Per i nostri scopi, la unica differenza è veramente
che mette, che sta per mette, appena mette una nuova linea
personaggio a qualsiasi cosa tu stia stampa.
>> Quindi, se diamo un piccolo manifestazione qui,
siamo in grado di eseguire questo with-- aprire un nuovo terminale.
Potete vedere tutti questi i file che sono in mio terminale.
E se ho appena eseguito Ruby, intro.rb rubino, esso
mette fuori cinque Ciao Mather, Quincy, Vettore.
Adams.
Ecco, questo è tutto quello che c'è agli array dichiarano.
PUBBLICO: Robert, si può fare il tipo di carattere un po 'più grande?
ROBERT KRABEK: Sì.
E posso ingrandire, perché non è possibile lo zoom per i caratteri apparentemente terminale.
>> Ecco, questo è il modo di stampare variabili al vostro terminale.
È inoltre possibile utilizzare variabili all'interno di una stringa.
Così di recente in PHP, si potrebbe avere imparato
che vi è l'interpolazione stringa.
Quindi, se si dà un'occhiata qui, se io dichiarare tre variabili, nome, biblioteca,
e linguistici, e I mette, io scrivere una stringa, ciao il mio nome è.
E allora invece di PHP versione di interpolazione corda
che sembra un po 'più simile a questo, si dispone di un cancelletto, e poi
una parentesi graffa, e poi il nome della variabile.
Ed è così che ci si stampano, dice, qualunque sia il nome della variabile è.
>> E allora si può anche concatenare le stringhe.
Rubino rende super facile con il segno più.
Devi solo una stringa sulla sinistra, più una variabile
o un'altra stringa più una stringa.
Quindi, se stampo questo fuori, dovrebbe solo dire Ciao, il mio nome è Robert.
Sarò insegnando Nokogiri in Ruby.
>> E facciamo solo confermare che tale è infatti il ​​rubino intro case--.
Ciao, il mio nome è Robert.
Sarò insegnando Nokogiri in Ruby.
>> Passando, se else, è un po 'diverso
da quello che potrebbe essere utilizzato per se hai lavorato in C.
Non hai bisogno di parentesi.
Non hai bisogno di parentesi graffe.
E invece di altro se, si tratta di un elsif concatenato.
Così qui, se ho dichiarato x up qui, come si vede, è ancora x 5.
Quindi, se x è inferiore a 3, che sarà messo piccolo.
Se è inferiore a 7, medio, altro grande.
Quindi 5 è un numero medio.
E finisco questo blocco di codice con fine.
>> Ecco il mio ciclo for.
E questa sintassi è anche leggermente diverso.
Lo 0 a cinque appena essenzialmente si dichiara un array di 0-5.
Quindi c'è cinque slot nella matrice.
E poi per ogni slot che array, sarò incrementando i.
Quindi questo dovrebbe stampare 0 a 5, o 0 a 4.
E questo dovrebbe stampare medio.
>> E io Just Blaze attraverso.
Voi ragazzi avranno accesso a questo codice in seguito.
Così voi potete eseguire questo voi stessi.
>> Quindi, questo è il vostro ciclo while base.
Questa sarà solo la stampa j, incrementare di 1 finché noi colpimmo 5.
>> Super veloce corso accelerato di Ruby su come scrivere una funzione.
Invece di, diciamo, int fattoriale numero, non ci resta che def.
E in sostanza sei la definizione di una funzione di qui.
Questo sarà il il nome della funzione,
e questo è qualsiasi variabile che si vuole passare nella funzione.
Si può avere se istruzioni all'interno.
Puoi tornare.
In questo caso, siamo definire un ricorsivamente
implementato funzione fattoriale.
Così abbiamo appena funzioni di chiamata in Ruby come questo.
>> Quindi, se ho definito questo, può chiamare fattoriale, passare a 3,
e poi 3 sarà il numero di variabili che posso utilizzare all'interno della funzione.
E questo è solo to_s trasformando la valore fattoriale tornare in una stringa.
In caso contrario, questo genererà un errore che dice oh,
non può stampare un string-- perché se ne ricorda,
mette è messo string-- perché questo fattoriale ha restituito un numero.
Quindi possiamo convertire tale a una stringa come tale.
E viceversa, è inoltre possibile convertire una stringa in un intero con to_i.
>> Così facendo tutto super semplice, se mi limito a commentare questo fuori, salvare
ed eseguire la funzione fattoriale.
Dovremmo essere in grado di vedere che fattoriale di 3 è 6.
E questo è proprio vero.
>> Ecco, questo è il vostro corso accelerato di Ruby.
Ed ora che sapete Ruby, possiamo andare su al Nokogiri base raschiatura istituito.
In sostanza tutto ciò che dovete fare è, in Ruby, richiedono le librerie.
E per i nostri scopi useremo la biblioteca OpenURI così come Nokogiri.
E allora che cosa avete fare-- e sarà vi darà la sintassi per questo--
è di aprire l'URL proprio come si farebbe in una richiesta cURL, che sta per C URL.
>> Quindi si prende l'URL il sito web in questione.
Si memorizza in una variabile.
E poi si può cercare attraverso quella variabile per i tag HTML unici che utilizzano
il comando CSS.
E poi è possibile l'uscita contenuti dove vuoi.
Si può partire da un database.
Si può produrre in un file, o anche solo stamparlo su schermo.
>> Quindi vi mostreremo un raschietto di base.
Quindi, qui potete vedere abbiamo richiedono nokogiri, richiedono open-uri.
Il tuo set up di base, diciamo chiamare documento o doc,
è uguale Nokogiri :: HTML aperto, che è il il comando che ci vengono fornite dal OpenURI
biblioteca.
E saremo alla ricerca, per quelli di voi che potrebbero vivere in quad,
per le bici che sono a Boston elencati sulla sezione di Boston Craigslist bicicletta
sito.
>> Quindi, se non si ha familiarità con curl, mi limiterò a
mostrare reale veloce quanto CURL farà.
Se io volessi ottenere tutte le URL dal il sito Craigslist, se digito curl,
solo discariche tutto dell'URL dal sito della bicicletta Craigslist
sul mio terminale.
Questo non è particolarmente utile perché non lo faccio
vuole andare manualmente attraverso e trovare la cosa che sto cercando.
Ma solo così si può Vedo che realtà sono
utilizzando il codice giusto, se si guarda l'URL per Craigslist a bikes--
per qualche motivo non è stato trovato.
Se si guarda a questa pagina e guardate l'URL,
questo dovrebbe essere identica alla richiesta cURL che ho appena mando.
E in effetti, questo è quello che viene memorizzato nella variabile doc.
>> Quindi, quando si torna a nostro codice, abbiamo possono poi operare su questa variabile doc
utilizzando .css.
Così detto che volevo ottenere tutti i tag che sono span.txt,
e tutti i tag all'interno di un tale tag.
E perché potremmo volere fare questo, ti sento piangere?
>> Se Inspect Element, ti dà un ripartizione di come l'URL è strutturato.
Se ho scorrere verso il basso attraverso qui, si può vedere
ciò che ciascuno di questi diversi elementi rappresenta.
Così forse voglio accedere questo elemento particolare.
Così sto usando sviluppatore di Chrome strumenti per Inspect Element.
Vedo qui che questo è un un tag all'interno di un arco
contrassegnare con una classe di txt.
>> Quindi, questo diventa per il nostro prima operazione che
è durata doc.css, che è il tag che Sto cercando in tutti questo URL.
E poi .txt funziona molto come CSS fa quando si sta solo scrivendo CSS
nei file HTML specificando una classe.
Quindi questo operatore particolare sarà specificare un elemento span con classe di txt.
E poi se lascio uno spazio, questo andrà poi in quel tag
e poi trovare un un tag all'interno di tale.
>> Quindi, se ho appena messo questo per il terminale, dovrei
essere in grado di vedere essenzialmente tutto che è in questo intervallo di classe di txt.
Così daremo che un andare.
ruby Craigslist-raschietto.
E, infatti, che ci dà tutti questi tag delle varie liste che
sono sulla pagina Craigslist.
>> Quindi, se andiamo indietro, possiamo trasformare questo in qualcosa di più utile.
Forse si vuole solo i link.
Perché all'interno di questo tag, sarò anche avere il collegamento ipertestuale del percorso
che questa pagina va a.
Quindi, se si guarda a questo codice qui, quello che farò è invece di css,
Posso andare at_css.
E questo sarà solo ottenere la prima elemento di tutte queste cose.
Quindi, se dovessi farlo nella codice che ho appena dimostrato in precedenza,
invece di restituire tutto di questo, sarebbe solo
restituisce il primo di quelli.
Ecco, questo è come funziona l'operatore at_css.
>> Quindi vogliamo memorizzare il percorso tutta la prima un tag.
E perché ci darà una a-- così siamo ancora intenzione di utilizzare CSS.
Ma perché questo sta per dare ci riporta un intero array di tag,
ci accingiamo a accesso il primo elemento.
Quindi questo è un altro modo che è possibile accedere a qualsiasi elemento particolare se
hanno una serie di elementi che viene restituito,
perché si può trattare tutto ciò che i rendimenti css come array, in sostanza.
E poi andremo a accedere al ipertesto attributo di riferimento di questo.
>> Quindi, se si dà un'occhiata, se hai guardato molto vicino qui,
se solo essenzialmente guardare la barra degli indirizzi,
questo è il percorso che si sta andando ad essere raschiatura.
Quindi, se solo correre di nuovo, e assicurarsi che abbiamo salvato esso.
È possibile controllare a casa.
Questo in realtà corrisponde con questo link.
>> Allora, perché potremmo voler usare questo?
Se si vuole raschiare la pagina e ha
una pagina di link come Craigslist fa, si
potrebbe desiderare di andare poi in ciascuno di tali collegamenti
e poi raschiare il contenuto di quella che
è esattamente ciò che andremo a fare.
>> Quindi una volta che avete percorso come un variabile, non ho più davvero
cura di stamparlo.
Ho solo bisogno di memorizzare come variabile.
E poi posso accedere a un altro pagina allo stesso modo accedo
doc in primo luogo.
Tranne che con l'URL, stiamo andando di usare l'interpolazione corda
come ho descritto in Rubino in precedenza da aggiungere
il percorso fino alla fine della radice.
>> Così che cosa questo sta per fare è questo sta per mettere sul percorso
che ho raschiato in precedenza e poi girare che
in un nuovo elemento, quello che volete chiamano it-- first_listing, per esempio.
Ma ho intenzione di lasciare su voce per ora,
perché è quello che sto usando qui.
>> Quindi dire che volevo ottenere la descrizione del primo distacco di Craigslist.
Quindi vorrei andare qui.
Vorrei fare clic su Inspect Element di nuovo, in quanto questa è la descrizione.
Mi piacerebbe andare qui e vedere se riesco a trovare come potrei
essere in grado di cercare per questo tag unico.
E in questo caso, ha un ID, che ci porta
per il nostro prossimo modo di cercare tag, che è con un hashtag.
>> Così per le classi, è possibile utilizzare l'operatore punto.
Così .txt è specificando una classe di txt, considerando che l'hash specifica un ID.
Quindi, in questo caso, il tag è sezione, e l'ID è postingbody.
>> Quindi questo va e trova il first-- perché siamo
utilizzando at_css-- questo va e Trova il primo elemento che
esce con l'etichetta di sezione e l'ID di postingbody.
E poi si può accedere l'elemento di testo di tale voce tornò con .text.
E poi possiamo memorizzare che nella descrizione.
>> Quindi, ora che abbiamo un descrizione delle variabili,
potremmo essere in grado di fare, per esempio, file di I / O. Così file di I / O in Ruby
è molto simile a file di I / O in C dove apriamo un file.
Potremmo scrivere.
E poi ci chiudiamo il file.
>> Così qui, stiamo solo nominare il presentare, qualche variabile arbitraria.
Potremmo anche appena messo questo qui.
Abbiamo una variabile che stiamo memorizzazione il file aperto come con File.open.
E stiamo scrivendo a questo file, così apriamo con l'operatore w.
E poi abbiamo messo stringa nel depositare presso l'operatore .puts.
E poi abbiamo messo la variabile che abbiamo vuole scrivere sul file all'interno di tale.
E poi abbiamo appena chiudiamo il file.
>> Quindi, se andiamo avanti ed eseguire questo, questo dovrebbe produrre un documento
con description.txt che sarà avere questa descrizione all'interno di esso.
Quindi, se corro it-- no.
E 'prodotto un file di testo con, si spera, la stessa cosa.
Quindi ci sarebbe stato un nuovo incarico che è venuto mentre ho parlato.
E in effetti sembra che non vi è stata.
Quindi, se andiamo a questo classico moto, 1962-1966, che sembra corrispondere.
E ci si va.
>> Ecco, questo è il più elementare funzionalità di raschiatura.
Potremmo avere invece di solo scrivendo a questo file,
siamo in grado di aggiungere cose a un array.
Quindi, se io dichiaro tre array, titolo, prezzo e descrizione.
E stiamo operando sulla voce doc ora.
Siamo in grado di passare attraverso e trovare tutte le span.txt.
E ricordate, questo restituisce una matrice di tutti gli elementi che trova.
E poi in Ruby, si può semplicemente usare .Ogni per scorrere ogni elemento
dell'array.
E poi per ogni articolo, Sto solo andando a chiamare
un link, perché è in sostanza quello che è.
>> Quindi, se ho messo ogni a.hdrlnk link.css puntino, questo è in realtà sta per il link
e trovando in quel link un'altra Elemento HTML e la classe corrispondente.
Quindi, se ci ricordiamo che cosa questo è stato, il span.txt,
si può vedere- vorrei solo tornare indietro vero quick-- all'interno span.txt
abbiamo un sacco di altre classi.
Così dentro span.txt, stiamo cercando per un tag con un hdrlnk di classe.
Quindi lasciatemi trovo per voi ragazzi reale veloce.
>> Così si può vedere qui, si tratta di un un tag che è nel giro di classe txt
che ha la hdrlnk classe.
E questo è proprio ciò che stiamo cercando di ottenere.
>> Quindi stiamo ora cercando di memorizzare tutti di questi link all'interno del titolo.
E poi andremo a stampare fuori ogni di questi link.
Non mi dispiace.
Stiamo andando a stampare il prezzo di ciascuno di questi.
Così corriamo davvero rapido e vedere cosa fa.
>> Quindi, questo è andato appena fondamentalmente attraverso ciascuno dei collegamenti
a sua volta, si accede il tag in questione, e poi tirato fuori il prezzo.
E lo ha fatto perché dopo avete tutto nel titolo,
abbiamo appena memorizzato il titolo lì.
Abbiamo appena memorizzato il link all'interno del titolo array.
E questo per il funzionamento in ciclo, dove invece di andare a a.hdrlnk,
stiamo cercando un span.price.
Quindi, se posso solo davvero trovare rapidamente il prezzo, se si controlla l'elemento,
vedrete che si tratta di un arco con la classe di prezzo.
E questo è essenzialmente come stiamo ottenendo il prezzo lì.
>> Ecco, questo è il davvero caso base di raschiatura.
Ecco come si ottiene tutto gli elementi di una pagina
che, per esempio, si sa già l'URL.
>> Quindi, se vogliamo ottenere un poco più in profondità,
siamo in grado di raschiare le pagine all'interno di pagine.
E per questo esempio, io sarò essere l'output in un file CSV.
Così sto richiedendo csv qui perché rubino non, al suo interno,
avere la funzionalità in file CSV appena uscita.
Ecco, questo è super semplice.
Lasciatemi solo andare a quella successiva.
Abbiamo coperto file di I / O. Così questo è simile a come è in C.
E prima di passare al Kimono, Ti faccio vedere solo te davvero veloce come
raschiare siti all'interno attrazioni.
>> Così abbiamo già imparato come a dichiarare gli array in Ruby.
Quindi sto solo dichiarare una mazzo di matrici arbitrarie
che sarò la memorizzazione dei dati all'interno.
doc funziona allo stesso modo come ha fatto nel file precedente.
Stiamo andando a, trovare ciascuno dei span.txt di.
Sappiamo già che.
Questo è il contenitore entro cui ciascun collegamento ha tutti i dati che vogliamo.
>> Ecco quello che stiamo facendo è per ogni link span class txt, stiamo andando a
e stiamo trovando il tag, trovare il primo elemento di questo.
Ricordate, Css restituisce un array, così non si può semplicemente accedere così com'è.
Stiamo andando a trovare il primo elemento.
Anche se è un array di uno elemento, è necessario utilizzare questa sintassi,
e poi tirare fuori l'attributo href.
>> Così abbiamo fatto questo all'inizio.
Quindi questo dovrebbe essere familiare.
E così ora abbiamo un array cosiddetti percorsi di tutti i nostri link
che stiamo andando a voler utilizzare.
Quindi, se abbiamo questa matrice di tutto dei percorsi che vogliamo usare,
possiamo quindi creare una voce per ogni di quelle pagine quando apriamo la pagina.
Quindi, come abbiamo visto anche su la sintassi prima, dove
facendo interpolazione stringa con il percorso qui, per cui la sintassi è solo per il percorso.
E potrei chiamare questo variabile qualsiasi nome arbitrario.
>> Questo è l'importante.
Questa è la matrice che ti essere l'accesso a ciascun elemento.
Ma quando si dice per il percorso nei percorsi, questo significa per ciascun elemento nei percorsi,
chiamarlo percorso, e usare quella.
Questo è essenzialmente come quando si fare un ciclo for e si utilizza int i.
Così si può trattare il percorso come il variabile che sta incrementando.
>> E poi per ciascuno di questi, andare in ciascuno di tali collegamenti.
Perché stiamo conservarla in pagina dell'articolo, così stiamo creando una nuova pagina ogni volta
accediamo esso.
E poi all'interno di quella nuova pagina, trovare span.postingtitletext, span.price,
e poi la sezione # postingbody.
Abbiamo già coperto sezione # postingbody quando abbiamo guardato la descrizione.
>> Così possiamo andare a vedere nel post Craigslist, se si sta solo a guardare il titolo,
si può vedere qui, spanna postingtitletext.
Ed è per questo che è lì.
E poi per il prezzo, è possibile accedere con span class di prezzo.
>> Così abbiamo anche forse potrebbe desidera memorizzare l'URL.
Quindi dobbiamo solo correre questo ancora una volta, conservarlo in un array,
perché se siete alla ricerca su Craigslist, sei
probabilmente andando a voler un modo per, se vedi qualcosa che ti interessa,
tornare a quel sito.
Così si desidera solo per memorizzare l'URL per l'amor riferimenti.
>> Questo è solo essenzialmente un'altra sintassi per il ciclo for.
Potevo solo che invece paths.each di per il percorso nei percorsi con indice.
E questa sintassi Ruby for-- percorso è quello che abbiamo fatto qui,
dichiarare una variabile per ogni elemento.
E l'indice si comporta come la i in C per cicli.
Così si può tenere traccia di ciò è l'indice.
>> Così qui è solo un piccola cosa conveniente
per quando si sta eseguendo il raschietto.
Se si sta raschiando centinaia di pagine, per assicurarsi che non è appeso,
lo farà solo in uscita, Sto accedendo a questa pagina,
e fare in modo che è ancora in corso.
Ma per i nostri scopi, perché ci sono un centinaio di articoli,
Ho intenzione di accedere solo tre di loro in modo che noi non a corto di tempo qui.
>> Ma prima di arrivare a questo, io sono solo intenzione di mostrare davvero veloce,
Sarò emettere il titolo, prezzo, descrizione e URL
di ciascuno dei collegamenti che ho raschiato.
E poi questo è solo l' sintassi per la libreria CSV.
Si apre un file CSV.
Questo è quello che ho intenzione di chiamarlo.
Aprilo con write do.
E poi CSV sarà il file si sta inserendo tutto in.
Questo è solo un controllo di integrità per me sapere che è in esecuzione.
E questo è il mio sanity check sapere che è completato.
Così sto mettendo titolo in una riga in il CSV, prezzo, URL, descrizione,
tutto in righe nel file CSV.
>> Quindi, se andiamo a correre questo now-- e ho appena
fare in modo che io ho salvato invece it-- del solo output al terminale,
dovremmo avere un file CSV File che si produce.
Così qui possiamo vedere il CSV documento che è stato prodotto.
Questa è l'uscita del SCAPE che ho appena eseguito.
Come si può vedere qui, Accesso Pagina 0, 1, 2, 3.
Questi sono i titoli, prezzi, descrizioni.
E se guardiamo a questo CSV File che abbiamo generato,
si può vedere il suo emesso qui.
Questo non è Excel, quindi non è formattato in righe e colonne.
Ma si può immaginare come potrebbe essere formattato.
>> CSV sta per valori separati da virgola.
Quindi potete immaginare che questo potrebbe essere una riga.
E ogni virgola sarebbe indicano una colonna separata.
Solo una parola di caution-- a volte sei
raschiando le cose con un sacco di virgole.
Quindi, se siete in uscita in un file CSV,
Potrebbe non uscita modo si potrebbe pensare.
>> Ecco, questo è in sostanza tutto c'è da raschiare HTML di base
pagine con Nokogiri.
>> Così l'essere Internet innovativo come è venuto su
con un più automatizzato e GUI versione, seppur meno robusta
versione di raschiatura vari siti web.
E per i nostri scopi Sarò dimostrazione
una estensione Chrome chiamato Kimono.
E tutto quello che dovete fare è navigare alla pagina che si desidera per raschiare.
Si fa clic su un campo di interesse.
Calibrare i campi, perché sarà automaticamente
rilevare ciò che pensa si vuole essere raschiatura,
e poi basta creare una API.
>> Quindi, se dovessimo dimostrarlo su Craigslist, in realtà non avrebbe funzionato.
E questo è quello che stavo tornando a dicendo su di esso non essere così robusta.
Ha problemi a creare l'API.
Ma come dimostrazione di che cosa avrebbe fatto,
se si installa l'estensione Chrome, tutto ciò che fai è si fa clic su di esso.
Si Kimonofies pagina, e poi si clicca sulla cosa che si desidera script.
>> Quindi, se dovessi fare clic su che, sarebbe in evidenza
ciò che pensa che voglio essere raschiando questa pagina.
Così forse io chiamo questa lista.
Questo è il numero di oggetti che ho selezionato.
E posso solo confermare o smentire qualche degli altri elenchi proposti
per farlo aggiungere al che cosa sarà raschiato.
>> Così ora possiamo vedere non c'è un centinaio di elementi selezionati.
Se voglio avere un altro campo che io anche raschiare che è legato a questo,
Dico che voglio raschiare il prezzo così, allora posso fare lo stesso.
>> Quindi, ecco una dimostrazione di come è molto meno robusto, perché adesso è
raccogliendo la città invece di solo il prezzo che voglio.
E ora è raccolto 200 cose.
È possibile tornare indietro e cancellare.
Puoi riprovare.
Ma non ci sono garanzie.
Questo è come funziona a volte.
Come potete vedere qui, ora dice 96 qui.
Si raccolse maggior parte dei collegamenti che si vuole raschiare, ma non
necessariamente tutte le porte.
>> Un altro utile strumento di Kimono però è che si può andare alle funzioni avanzate
qui, andare a Avanzate, e vi mostrerà
la ripartizione del unica modo per accedere al HTML
tag che si desidera per raschiare.
Così per le inserzioni, se si guarda a qui, se si accede p arco div abbracciano una,
si può effettivamente utilizzare solo questo nel codice Nokogiri,
dove prima avevamo span.txt per accedere a ciascuno dei elenchi.
Se voglio solo il testo all'interno le liste,
Potrei ingresso spazio div p durata space space arco spazio una,
e sarebbe ottenere lo stesso effetto.
E per quelli di voi che sono interessati in utilizzando le espressioni regolari,
succede a dare anche il regolare espressione sorta di stringa di input
per trovare le cose si sta cercando di trovare.
>> Quindi c'è un'altra caratteristica fredda di Kimono dove si può impaginare,
Il che non solo posso grattare i risultati di questa pagina
Posso fare clic su questo piccolo Pulsante qui, impaginazione,
specificare il pulsante che avrebbe portami alla pagina successiva,
e allora sarà sufficiente sapere che può scorrere alla pagina successiva,
e poi raschiare tutto il tempo the-- come è lo stesso formato naturalmente--
scape tutti quei collegamenti pure.
>> Quindi perché Kimono non vuole lavoriamo con Craigslist, quello che abbiamo fatto
è che ho Kimonofied Harvard Crimson.
Ho tirato fuori alcune delle specie di top presenti articoli, confermano qui.
Dire tutto questo.
Ho compilato questa API per voi prima del tempo.
Ma per il resto cosa fareste è si sarebbe solo fatto clic su Fine.
Inserisci i dati API.
Impostare a uno crawl automatico o manuale.
Così si potrebbe aggiornare il vostro dati ogni 15 minuti,
settimanale, ogni giorno, quello che volete.
Assegnare un nome alla API.
Creare l'API.
Per il vostro beneficio, ho creato il Cremisi pagina API anteriore già.
>> Quindi basta creare un account su Kimono, e
memorizza tutti i vostri le API per voi.
Quindi, in sostanza, che è tutto tuo graffi differenti separati.
>> Quindi, se guardiamo qui, questa è la opinioni link che ho raccolto.
Questi sono i presenti link che ho raccolto.
E questi sono i più letti link che ho raccolto
da questo più recente scape API.
>> Quindi, se si può vedere qui, questi sarebbero la presenti,
questi sarebbero i pareri, che in questo esempio,
Li ho combinato tutto in una collezione.
Ma se hai appena giocare con esso un po ', è possibile dividerlo
e dividerlo fino tuttavia si vuole il più a lungo
come la formattazione è leggermente diverso.
>> Giusto per giocare con questo, il crawl set up, uno degli aspetti negativi
è che si può strisciare solo fino a 25 pagine alla volta.
Questo è uno dei fattori limitanti.
Ma qui, se si imposta a strisciare manuale, questo
come si può dire che per aggiornare i dati.
E qui si può vedere la vostra storia crawl di tutto quello che hai strisciato.
E voi potete tornare indietro, iscriviti, giocare con tutti i diversi modi
che è possibile modificare e utilizzare i vostri dati.
>> Kimono può essere impostata fino a raschiare link all'interno link.
E si dovrebbe farlo prima raschiando un elenco di link,
e quindi utilizzando tale API come saltare giù punto per un altro API
che si crea lo script.
Ma questo è più complicato di quello che stiamo per entrare in oggi.
>> Ecco, questo è kimono.
Parleremo dei pro e contro di Nokogiri e Kimono.
>> Nokogiri, è veramente veloce.
E 'facile da testare.
Si può solo mette nulla a console, facile da configurare.
Si può decidere esattamente cosa si vuole raschiare e memorizzare.
Non ci sono limiti di pagina.
Io in realtà usato per raschiare come 1800 siti web di scuole del Sud Africa
per una mail per uno stage che ho fatto.
>> Ecco, questo è possibile, anche se le migliori prassi sarebbe quello di dividere la sceneggiatura.
Perché se non riesce, allora non si ottiene nulla.
Ma se si fa un centinaio, forse 200 pagine alla volta,
allora avete qualche possibilità di almeno ottenerlo frammentario, soprattutto
se hai male di internet.
>> Purtroppo può racimolare solo HTML.
Quindi, se avete pages-- caricate dinamicamente
e io vi mostrerò un esempio come Kayak in una secondo--
Nokogiri purtroppo non può raschiare quello.
>> Ma Kimono è anche facile da usare.
Come si è visto, è essenzialmente un punta e clicca.
Si può raschiare JavaScript.
Purtroppo, non c'è un massimo per quante pagine si può raschiare.
A volte è un po ' difficile da configurare.
Essa si confonde.
Ma è sicuramente una cosa da considerare
se non stai cercando di avere un Super robusto raschiare mantenibile.
Se si desidera ottenere tutto fuori di una pagina in fretta,
allora Kimono è un davvero ottimo strumento da utilizzare.
E come ho detto prima, c'è la funzione avanzata di Kimono
che come mostra accedere al HTML unico
elemento, che è super utile anche se si sta lavorando in Nokogiri.
>> Quindi, se andiamo al sito Kayak, per ad esempio, si può vedere ci è--
o forse non si può vedere.
Ma se vi mostro l'URL per Kayak, questo in realtà è solo l'URL di origine.
Questo è l'URL prima di essere modificato con qualsiasi script JavaScript
che hanno in corso.
E sta andando a un aspetto diverso da ispezionare l'elemento.
>> Quindi, se si passa attraverso e voi all'altezza del Inspect Element
codice al codice sorgente, è in realtà sta per essere diverso.
E questo è essenzialmente il motivo Nokogiri non può raschiare siti caricati dinamicamente.
Perché è Nokogiri raschiando il URL di origine,
considerando Kimono è in realtà raschiando quello che stai essenzialmente
vedendo in Seleziona elemento.
>> Quindi, se vado attraverso e io cercare di Kimonofy Kayak,
Posso effettivamente andare attraverso e selezionare il prezzo.
E 'un po' più difficile, e in questo caso, è
in realtà vedendo questo prezzo come diverse da queste.
Così, mentre si può configure-- o se non sono stati caricati in modo dinamico,
è possibile configurare Nokogiri per ottenere tutti questi.
>> Perché la formattazione è leggermente diverso per questo elenco
come è rispetto al resto di loro, e si può vedere qui
in realtà è andato e selezionati tutti i prezzi dei voli.
Forse voglio selezionare tempo di volo pure.
E posso passare attraverso e sorta di configurare tale.
Io non voglio questo.
Voglio solo il tempo del prossimo volo.
E poi, dopo un paio di questi passando, si ottiene l'immagine.
Così Kimono piuttosto intelligente.
E 'solo non è così robusto.
>> Ci sono alcuni altri alternative che è possibile utilizzare.
E ti faccio vedere qui.
Se si è più a suo agio Python invece di Ruby forse,
vi è una biblioteca chiamato Beautiful Soup.
È possibile utilizzare tale.
E 'molto simile a Nokogiri.
Ha un paio di più funzioni.
È possibile trovare un tag HTML e poi spostarsi verso l'alto o spostare lateralmente.
>> C'è PyQt.
Questo può effettivamente raschiare dinamico siti, perché è una sorta di
è un WebKit che finge di essere un browser senza che in realtà
essendo un browser.
Quindi sarebbe attendere per tutta la JavaScript per caricare prima, e poi
entrare e cercare di raschiare il sito.
>> Se si vuole attaccare con Ruby, può andare un livello superiore rispetto Nokogiri.
È possibile utilizzare Capybara con un wrapper Poltergeist.
E questo può effettivamente essenzialmente fare la stessa cosa
come PyQt, che è si tratta di un WebKit.
Si attende la JavaScript per caricare prima.
Se giocherellare intorno con esso abbastanza, si può anche farlo clicca sulle cose.
>> Quindi, se c'è un link che Non è un classico href dove
il percorso è facilmente accessibile, e è qualche cosa JavaScript che rileva
un click, si può effettivamente fare.
La biblioteca più popolare per simulare un utente
è in JavaScript, che è PhantomJS.
Questo può ovviamente raschiare dinamico siti perché questo è essenzialmente
fingendo di essere Chrome senza l'interfaccia utente.
>> E poi, naturalmente più robusto, ma l'opzione più lenta,
è una automazione del browser selenio.
E purtroppo, non si sta andando ad essere
in grado di farlo entro il vostro IDE CS50.
Perché essenzialmente quello che non fa altro che si avvia il vostro Chrome,
Firefox, il browser qualunque che si desidera utilizzare,
e tiene traccia forse il mouse movimento, qualunque cosa si digita,
ed è appena sorta di automatizza questo processo.
Così è stato sviluppato come una sorta di sito web strumento di test di automazione.
Ma un sacco di gente usa Selenio per raschiare siti web
che altrimenti hanno un molte difficoltà raschiatura
con alcuni di questi strumenti, più rapidi.
>> Ecco, questo è tutto quello che ho per il web scraping.
Divertiti.
>> PUBBLICO: Domanda.
>> ROBERT KRABEK: Sì.
>> PUBBLICO: Esiste un meccanismo di hash il sito web in modo si potrebbe fondamentalmente
passare attraverso di essa in seguito.
ROBERT KRABEK: Sì.
Così abbiamo messo la, nel nostro esempio, per entrambi,
abbiamo messo l'intero sito web in doc.
E così si potrebbe effettivamente basta prendere il doc variabile e scrivere in un file.
Quindi, se volessi, potrei scriverlo fuori come un file HTML,
e poi invece di usare OpenURI e una richiesta cURL,
quindi ho potuto solo aprire doc HTML e quindi cercare tale.
>> PUBBLICO: Ma si può preservare il tipo di esperienza online
mentre lo fai non in linea.
Per esempio. Quando sei volante per diverse ore,
Voglio fondamentalmente archivio tutto il sito. [Incomprensibile]
>> ROBERT KRABEK: Sì, questo è exactly-- così alla lettera ciò che questo sta facendo
sta sta prendendo tutto che sarebbe a questo URL.
Quindi, se ci siamo imbattuti cURL, è prendendo tutto questo HTML,
ed è riporlo all'interno del documento variabile.
Allora si può fare tutto ciò che si vuole fare con doc.
Potete eseguire l'output in un file.
PUBBLICO: Ma non è legato in su.
Non è dinamica.
Non è ricorsivo, giusto?
Vedete cosa voglio dire?
Sto cercando di fondamentalmente una sorta di hash tutto il sito sul mio disco rigido
in modo che potessi fondamentalmente farlo per diverse ore senza internet.
>> ROBERT KRABEK: Giusto.
Quindi, se ho had-- così dov'è il mio file di I / O?
Quindi questo è il file di I / O. Così dicono invece di questo, io chiamo questo craigslist.html.
Aprivo che fino.
Avevo mette doc in esso.
Chiudo il file.
E poi solo perché il CS50 IDE è sulla nuvola, che è tutto ciò.
Posso andare qui.
Posso scaricare il file.
E allora sarebbe sul mio disco rigido.
Così si può fare in questo modo.
Oppure, se sei a casa, non si utilizza il CS50 IDE, come Sublime o qualcosa,
questo è ancora più facile, perché questo è tutto disponibile localmente,
non legato ad Internet.
>> PUBBLICO: Capisco.
Questo è per un problema particolare.
Potete farlo in modo ricorsivo in modo che si andare più strati profondi genere di cose?
>> ROBERT KRABEK: posso scaricare le cartelle come pure, se è questo che stai chiedendo.
PUBBLICO: Sì.
>> ROBERT KRABEK: Freddo.