>> [Musikwiedergabe]
ROBERT KRABEK: Hallo, Jungs.
Mein Name ist Robert Krabek und Ich werde euch lehren
wie man das Netz mit kratzen Nokogiri, der ein Ruby-Bibliothek ist,
und Kimono, der ein Chrome-Erweiterung ist.
>> Also zuerst gibt es eine paar Dinge, die Sie
tun können, wenn vielleicht Sie gewesen sind Tun aller psets bisher
und Ihr Arbeitsbereich ist immer ein wenig voll.
Wir können eigentlich nur gehen und erstellen Sie einen neuen Arbeitsbereich für Sie
um nur ein neues Projekt in zu tun.
Also, wenn Sie wollen auch weiterhin Arbeiten in der CS50-Vorlage ID
dass Sie derzeit haben, fühlen Sie sich frei, und Sie können einfach
Installieren Nokogiri mit CFLAGS equals-- gem install nokogiri.
Aber sonst werde ich Ihnen zeigen wie man eine neue eingerichtet.
Und dann ist dies im wesentlichen dropping mehr Stützräder.
Und du bist Codierung, als wären Sie nur die Kodierung in Sublime oder so etwas.
Wenn wir also verschieben Sie es um.
>> So sagen, dies ist Ihr aktueller CS 50 ID.
Sie können nur Cloud9 Sie hier.
Sie können an Ihrem Armaturenbrett zu gehen.
Es sollte bringen Workspaces Registerkarte.
Und dann klicken Sie einfach kann Hier erstellen Sie einen neuen Arbeitsbereich.
Benennen Sie Ihre neuen Arbeitsbereich, vielleicht Test oder Kratzen.
Und klicken Sie auf diese benutzerdefinierte Registerkarte hier, statt der Registerkarte CS50-Vorlagen.
Und dann können Sie einfach gehen kann und erstellen Sie einen neuen Arbeitsbereich.
>> Ich habe bereits einen Arbeitsbereich hier geschaffen.
Also werden wir mit diesem arbeiten.
Und wenn Sie ein neues erstellt Arbeitsbereich so mit der Registerkarte Benutzerdefiniert,
Sie geben Sie einfach gem install nokogiri, die hier nicht geht.
OK, es ist ein wenig eingefroren.
Aber man kann geben gem install nokogiri.
Und das sollte alles sein, dass Es ist für die Installation.
>> Wie ich schon sagte, wenn Sie noch Arbeit in Ihrem CS50-Vorlage ID,
Sie brauchen nur zu geben CFLAGS entspricht gem install nokogiri.
Und ich bereits installiert haben hier also werde ich das nicht tun.
Aber für diejenigen, folgende entlang, fühlen Sie sich frei, dies zu tun.
>> Also, wenn Sie Ihre Nokogiri haben Arbeitsplatz oder Bibliothek installiert,
Ich werde Ihnen ein wenig zu geben, der einen Crash-Kurs in Ruby-Syntax
weil Nokogiri ist ein Ruby-Bibliothek.
So müssen Sie einige grundlegende wissen Ruby-Syntax für die Arbeit mit Nokogiri.
So einige grundlegende Unterschiede von dem, was Sie gewohnt sind
vielleicht, wenn Sie gearbeitet haben bisher nur C und PHP,
Sie Variablen deklarieren ohne Typ.
Sie verwenden ein Semikolon nicht, Das ist eine Art Erleichterung.
Es gibt keine Klammern jetzt rund für oder while-Schleifen, zum Beispiel.
Sie müssen nur einen Codeblock, und dann Ende am Ende, dass setzen.
Es gibt keinen plus plus oder minus minus, so dass nur
wissen, dass, wenn Sie for-Schleifen tun,
nur zzgl equals und Minus entspricht.
Und statt der Hash gehören, Sie verwenden benötigen und dann
was auch immer Bibliothek versuchen um in das Programm zu laden.
>> Ruby ist nicht eine kompilierte Sprache.
Also das ist eine andere Erleichterung.
Es ist mehr ähnlich wie PHP, wo es ist eine interpretierte Sprache.
Sie können eine beliebige Ruby-Skript ausgeführt, dass Sie schreiben mit Rubin gefolgt
durch den Namen von Ihrem Skript oder Programm.
Um anzuzeigen, dass es ist ein Ruby-Programm, Sie nur am Ende mit .rb statt .c.
Und es gibt variablen große Arrays in Ruby,
Das ist sehr praktisch, wenn Sie Schaben und vielleicht möchte anfügen
Daten, die Sie in ein Array gekratzt habe.
Sie müssen nicht, um ein neues Array malloc und kopieren Sie die alten Array in das neue Array.
Sie können einfach mit anhängen die beiden Pfeil Zeichen.
Und es gibt keine Zeichen gibt nur einzelne Buchstabenfolgen.
So dass ein wenig leichter sollte.
>> So dass wir Ihnen nur einige Beispiele von einigen grundlegenden Ruby-Syntax.
Also hier kann man sehen, dass anstelle von der Schrägstrich Schrägstrich, um in Ruby zu kommentieren,
Sie benutzen Sie einfach die Nummernzeichen.
Und Variablendeklaration, die Sie geben Sie einfach die variablen equals
Was auch immer Sie wollen, dass die variabel zu sein.
Sie können Strings sein.
Sie können Arrays, haben die Sie bevölkern mit Werten.
puts und Drucke sind ähnlich.
Für unsere Zwecke, die einzige Unterschied ist wirklich
das bringt, das steht für puts, legt nur eine neue Zeile
Zeichen an, was auch immer Sie drucken.
>> Also wenn wir einen kleinen Demonstration hier,
wir laufen diese mit-- Öffnen Sie ein neues Terminal.
Sie können alle diese sehen Dateien, die in meinem Terminal sind.
Und wenn ich nur laufen Rubin, Rubin intro.rb, es
löscht fünf Hallo Mather, Quincy, Träger.
Adams.
Also das ist alles, was es zu erklären Arrays.
ZIELGRUPPE: Robert, können Sie Ihre Schrift ein wenig größer?
ROBERT KRABEK: Ja.
Und ich kann, weil man nicht zoomen vergrößern, um Terminal-Schriftarten offenbar.
>> Also das ist, wie Sie drucken Variablen auf Ihrem Terminal.
Sie können auch Variablen in einem String.
So vor kurzem in PHP, die Dir vielleicht gelernt haben
dass es String-Interpolation.
Also, wenn Sie hier einen Blick, wenn ich erklären drei Variablen, Namen, Bibliothek,
und Sprache, und ich puts, I einen String, hallo mein name ist.
Und dann statt der PHP Version von String-Interpolation
das sieht ein bisschen so aus, Sie haben ein Pfund-Zeichen, und dann
eine geschweifte Klammer, und dann den Namen der Variablen.
Und das ist, wie Sie ausdrucken möchten, sagen, unabhängig von der Variablenname ist.
>> Und dann können Sie auch verketten Zeichenfolgen.
Rubin macht es super einfach mit dem Pluszeichen.
Sie müssen nur eine Saite auf der linken Seite und einem variablen
oder eine andere Zeichenfolge plus einem String.
Also, wenn ich dieses heraus zu drucken, sollte es nur sagen, Hallo, mein Name ist Robert.
Ich werde dir beibringen in Ruby Nokogiri.
>> Und lassen Sie uns nur bestätigen, dass die ist in der Tat die Fall-- ruby ​​Intro.
Hallo, mein Name ist Robert.
Ich werde dir beibringen in Ruby Nokogiri.
>> Umzug auf, wenn else-Anweisungen, es ist ein wenig anders,
von dem, was Sie vielleicht zu nutzen Wenn Sie in C gearbeitet
Sie brauchen nicht die Klammern.
Sie brauchen nicht die geschweiften Klammern.
Und statt else if, es ist eine verkettete elsif.
Also hier, wenn ich erklärt habe x up hier, wie wir sehen können, ist immer noch 5 x.
Also, wenn weniger als 3 x ist, wird es kleine setzen.
Wenn es weniger als 7, mittel, anderes groß.
So 5 eine mittlere Anzahl.
Und ich am Ende dieses Codeblock mit Ende.
>> Hier ist mein for-Schleife.
Und diese Syntax ist auch etwas anders.
Die 0 bis fünf nur im wesentlichen ist ein Arrays von 0 bis 5 erklärt.
Es gibt also fünf Schlitze in der Anordnung.
Und dann für jeden Slot, dass Array, ich werde Inkrementieren i.
So sollte 0-5 oder 0-4 zu drucken.
Und dies sollte das Druckmedium.
>> Und ich werde gerade Flamme durch.
You guys Zugang haben dieser Code später.
So euch kann dieses selbst ausführen.
>> Also das ist Ihre grundlegende while-Schleife.
Dies wird nur Druck j sein, um 1 erhöht bis wir 5.
>> Super schnell Ruby-Crash-Kurs wie man eine Funktion zu schreiben.
Anstelle von, sagen wir, int faktoriellen Anzahl, nur müssen wir def.
Und im Wesentlichen sind Sie Definieren Sie hier eine Funktion.
Das wird das sein, Name der Funktion,
und das ist, alle Variablen, die wollen in die Funktion übergeben.
Sie können, wenn Aussagen im.
Sie können zurückkehren.
In diesem Fall sind wir eine rekursiv definieren
implementiert Fakultätsfunktion.
So nennen wir nur Funktionen in Ruby wie diese.
>> Also, wenn ich das, ich definiert können factorial aufrufen, übergeben in 3,
und 3 wird die Anzahl unterschiedlich sein dass ich in der Funktion verwenden.
Und dies to_s ist nur Drehen der Rückgabewert der Fakultät in einen String.
Ansonsten wird dies zu werfen eine Fehlermeldung, oh, ich
können eine string-- nicht drucken denn wie Sie sich erinnern,
puts ist string-- denn diese setzen Fakultät hat eine Reihe zurück.
So können wir, dass zu konvertieren in einen String wie so.
Und umgekehrt, können Sie auch konvertieren ein String in eine Ganzzahl mit to_i.
>> So machen alles super einfach, wenn ich nur diese zu kommentieren, speichern
und führen Sie die Fakultätsfunktion.
Wir sollten in der Lage sein zu sehen, daß Fakultät von 3 6.
Und das ist in der Tat wahr.
>> Also das ist Ihre Crash-Kurs in Ruby.
Und jetzt, da Sie wissen, Rubin, können wir weitergehen zum Grund Nokogiri Schaben einzurichten.
Im Grunde alles, was Sie zu tun ist, haben, in Ruby, benötigen Sie die Bibliotheken.
Und für unsere Zwecke werden wir mit Hilfe der Bibliothek openURI sowie Nokogiri.
Und dann, was Sie do-- und es wird geben Ihnen die Syntax für this--
ist, dass Sie die URL viel, wie Sie es in öffnen eine cURL Anfrage, das für die C-URL steht.
>> So können Sie die URL zu nehmen die Website in Frage.
Sie speichern sie in einer Variablen.
Und dann können Sie durch, dass zu suchen Variable für einzigartige HTML-Tags verwenden
die CSS-Befehl.
Und dann können Sie geben die Inhalte an, wo immer Sie wollen.
Sie können in einer Datenbank zu starten.
Sie können die Ausgabe in einer Datei, oder auch nur drucken Sie es auf den Bildschirm.
>> So zeigen wir Ihnen, eine Grund Schaber.
Also hier können Sie sehen, wir haben nokogiri erfordern, erfordern open-uri.
Ihre Basis-Set up, lassen Sie uns nennen Dokument oder doc,
gleich Nokogiri :: HTML offen, was das ist Befehl, die von der openURI bereitgestellt
Bibliothek.
Und wir werden auf der Suche, für die von Sie, die in der Quad leben könnte,
für Fahrräder, die in Boston sind aufgeführt an der Boston Craigslist Bike Etappe
Website.
>> Also, wenn Sie nicht vertraut sind mit curl, ich werde einfach
zeigen Ihnen, ganz schnell, was cURL tun wird.
Wenn ich wollte, um alle der URL von erhalten die Craigslist-Website, wenn ich geben curl,
es ist nur Dumps alle der URL von der Craigslist Fahrrad Website
auf mein Terminal.
Das ist nicht besonders nützlich, weil ich nicht
wollen manuell durchlaufen und finden Sie das, was ich suche.
Aber nur so können Sie sehen, dass ich bin eigentlich
mit den richtigen Code, wenn man sich an der URL für Craigslist in bikes--
aus irgendeinem Grund ist es nicht gefunden.
Wenn Sie auf dieser Seite sehen und man sich die URL,
dies sollte identisch mit dem sein cURL Anfrage, die ich gerade zu senden.
Und in der Tat, das ist, was wird im doc-Variable gespeichert.
>> Also, wenn Sie zurück zu unserem Code zu gehen, haben wir kann dann auf dieser doc variablen Betrieb
indem Sie CSS.
Also sage ich wollte, um alle zu erhalten die Tags, die span.txt sind,
und alle a-Tags innerhalb dieses Tag.
Und warum könnten wir wollen dies tun, ich höre Sie weinen?
>> Wenn wir Inspect Element, gibt es Ihnen eine Aufschlüsselung, wie die URL strukturiert ist.
Wenn ich nach unten scrollen durch hier sieht man
Was jedes dieser unterschiedlichen Elemente darstellt.
Vielleicht möchte ich zugreifen Dieses besondere Element.
So bin ich mit Chrome-Entwickler Werkzeuge, um Element zu inspizieren.
Ich kann hier unten, dass diese sehen ist ein Tag innerhalb einer Zeitspanne
Tag mit einer Klasse von txt.
>> Also das wird zu unserem erste Operation,
ist doc.css Spanne, die der Tag ist, dass Ich interessiere mich für alle innerhalb dieser URL.
Und dann arbeitet .txt ähnlich wie CSS macht, wenn Sie nur schriftlich CSS
in Ihren HTML-Dateien, die von Angabe einer Klasse.
Also diese besondere Operator geben Sie ein span-Tag mit Klasse von txt.
Und dann, wenn ich einen Raum zu verlassen, Diese werden dann innerhalb dieser Tag gehen
und dann finden Sie ein ein Tag innerhalb dieses.
>> Also, wenn ich gerade auf diese zu das Terminal, ich
in der Lage, im Wesentlichen alles zu sehen das ist in diesem Zeitraum von Klasse txt.
Also werden wir das mal ausprobieren.
ruby Craigslist-Schaber.
Und in der Tat, die uns alle diese Tags der verschiedenen Angebote, die
sind auf der Craigslist-Seite.
>> Also, wenn wir zurückgehen, können wir dies schalten in etwas mehr nützlich.
Vielleicht wollen wir nur die Links.
Da innerhalb dieses Tags, werde ich auch haben den Hyperlink des Weges
dass diese Seite geht.
Also, wenn Sie an diesem Code hier, was ich tun werde ist anstelle von CSS,
Ich kann at_css gehen.
Und das wird nur erhalten, die erste Element der all diese Dinge.
Also, wenn ich, dass bis zu tun in der Code Ich habe bereits gezeigt,
zurückgegeben, sondern alle dieser, nur wäre es
Rückkehr der ersten einer von denen.
Also das ist, wie die at_css Bediener arbeitet.
>> So in den Laden wollen wir Pfad alle der ersten eines Tags.
Und weil eine wird uns a-- so dass wir immer noch zu CSS zu verwenden.
Weil aber das wird zu geben, uns wieder eine ganze Reihe von Tags,
wir werden, um den Zugang gehen das erste Element.
Also das ist ein weiterer Weg, dass man Ist ein bestimmtes Element, wenn Sie
haben eine Reihe von Elementen, daß zurückgegeben wird,
denn man kann alles zu behandeln, dass CSS-Renditen als Array im Wesentlichen.
Und dann werden wir den Zugang Hypertext-Referenzattribut hierfür.
>> Also, wenn Sie einen Blick zu nehmen, wenn Sie wirklich in der Nähe sah hier,
wenn Sie nur im wesentlichen Schauen Sie sich die URL-Leiste,
Dies ist der Weg, Sie gehen zu kratzen.
So, wenn wir gerade laufen diese wieder, und stellen Sie sicher, wir haben sie als Favorit gespeichert.
Sie können zu Hause zu überprüfen.
Das passt eigentlich mit diesem Link.
>> Warum also könnten wir wollen, dies zu nutzen?
Wenn Sie zu kratzen wollen die Seite, und es hat
eine Seite mit Links wie Craigslist hat, können Sie
Vielleicht möchten Sie gehen dann in jedem dieser Links
und dann kratzen die Inhalt der, dass, die
ist genau das, was wir tun werden.
>> Also, wenn Sie ein haben Pfad variable, ich nicht mehr wirklich
kümmern uns um es auszudrucken.
Ich brauche nur, um es als eine Variable zu speichern.
Und dann kann ich einen anderen Zugang Seite die gleiche Weise, die ich zugreifen
doc in den ersten Platz.
Außer mit der URL, wir gehen um String-Interpolation verwenden
wie ich in der Beschreibung Rubin früher angehängt
der Pfad zu dem Ende des Wurzel.
>> Also, was es zu tun ist, das wird auf den Weg gebracht
dass ich vorher abgekratzt und drehen Sie dann, dass
zu einer neuen Sache, was auch immer Sie wollen, rufen es-- first_listing, zum Beispiel.
Aber ich werde zu verlassen es zum Produkt für jetzt,
denn das ist, was ich verwende hier.
>> Also sage ich wollte die Beschreibung zu erhalten der ersten Buchung in Craigslist.
So würde ich hier unten zu gehen.
Ich würde auf auf Inspect Element wieder, denn dies ist die Beschreibung.
Ich würde hier unten gehen und sehen, wenn ich finden kann, wie ich könnte
in der Lage, für diese eindeutige Kennung zu suchen.
Und in diesem Fall hat es eine ID, die uns führt
zu unserem nächsten Weg, auf der Suche nach Tags, die mit einem Hashtag.
>> Also für Klassen können Sie verwenden Sie den Punktoperator.
So .txt ist die Angabe einer Klasse von txt, während die Hash gibt eine ID.
So dass in diesem Fall ist das tag Abschnitt, und die Identifikation ist postingbody.
>> Also das geht und findet die first-- weil wir
Verwendung at_css-- dies geht und findet das erste Element, das
kommt mit dem Tag des Abschnitts und die ID des postingbody.
Und dann haben Sie das Textelement zugreifen dieser Artikel kehrte mit .text.
Und dann haben wir speichern können dass in der Beschreibung.
>> So, jetzt haben wir eine Variable Beschreibung,
könnten wir in der Lage sein zu tun, sagen wir, Datei-I / O. So Datei-I / O in Ruby
ähnelt Datei-I / O in C, wo wir eine Datei öffnen.
Wir könnten, es zu schreiben.
Und dann werden wir diese Datei zu schließen.
>> So, hier sind wir nur die Benennung der Datei, eine beliebige Variable.
Wir könnten auch haben gerade das hier.
Wir haben eine Variable, die wir speichern der offene Datei als mit File.open.
Und wir werden in diese Datei zu schreiben, so dass wir es zu öffnen mit der w-Operator.
Und dann setzen wir String in die Datei mit dem .puts Betreiber.
Und dann setzen wir die Variable, die wir wollen, um die Datei in das zu schreiben.
Und dann werden wir schließen Sie die Datei.
>> Also, wenn wir weitermachen und führen Sie diese, dies sollte ein Dokument erzeugen
mit description.txt dem Willen haben diese Beschreibung in ihr.
Also, wenn ich laufen es-- nicht.
Es erzeugt eine Textdatei mit, hoffnungsvoll, die gleiche Sache.
So könnte es ein neues Posting haben das ist, während ich habe im Gespräch zu kommen.
Und in der Tat sieht es aus wie es hat.
Also, wenn wir nach diesem klassischen Fahrrad, 1962 bis 1966, scheint es, dass, um zusammenzupassen.
Und los gehts.
>> Also das ist die grundlegendste Funktionalität von Schaben.
Wir könnten statt haben nur das Schreiben in diese Datei,
wir können die Dinge zu einem Array hinzuzufügen.
Also, wenn ich erkläre drei Arrays, Titel, Preis und Beschreibung.
Und wir sind auf der doc Artikel Betriebs jetzt.
Wir können gehen durch und finden Sie die gesamte span.txt.
Und denken Sie daran, dies gibt ein Array aller Elemente, die es findet.
Und dann in Ruby, die Sie gerade verwenden können, .each durch jedes Element durchlaufen
des Arrays.
Und dann für jedes Element, Ich werde einfach es nennen
ein Link, denn das ist, im Wesentlichen, was es ist.
>> Also, wenn ich jeden link.css dot a.hdrlnk, Dies ist eigentlich los, um den Link
und in dieser Verbindung einen anderen finden, HTML-Element und der entsprechenden Klasse.
Also, wenn wir uns daran erinnern, was dies war das span.txt,
Sie sehen- können lassen Sie mich nur zurück zu gehen Echt quick-- innerhalb span.txt
Wir haben eine Menge von anderen Klassen.
So Inneren span.txt, wir suchen für ein einem Tag mit einer Klasse hdrlnk.
Also lassen Sie mich nur feststellen, dass für euch ganz schnell.
>> So können Sie hier sehen, ist dies ein ein Tag das ist innerhalb der Spanne von Klasse txt
das hat die Klasse hdrlnk.
Und das ist in der Tat, was wir versuchen zu bekommen.
>> So dass wir nun versuchen, alle zu speichern dieser Links in der Titel.
Und dann werden wir drucken aus jedem dieser Links.
Nein Entschuldigung.
Wir werden zum Ausdrucken Der Preis für jede von ihnen.
Also lassen Sie laufen wirklich schnelle und sehen, was es tut.
>> Also das im Grunde nur ging durch jede der Verbindungen
wiederum abgerufen das Tag in Frage, und zog dann den Preis.
Und es tat, weil nach Sie haben alles, was in den Titel,
wir haben gerade den Titel dort gespeichert.
Wir haben gerade die Verknüpfung gespeichert innerhalb des Arrays Titel.
Und in dieser für Loop-Betrieb, wo statt zu a.hdrlnk,
Wir suchen nach einem span.price suchen.
Also, wenn ich kann nur wirklich schnell der Preis, wenn Sie das Element zu inspizieren,
Sie werden sehen, dass es eine Spanne mit der Klasse der Preis.
Und das ist im Wesentlichen, wie wir erhalten den Preis gibt.
>> Also das ist der wirklich Grund Bei Kratzen.
Das ist, wie Sie alle bekommen die Elemente auf einer Seite
, dass, sagen wir, wissen Sie bereits, die URL.
>> Wenn wir also wollen, um eine zu bekommen etwas mehr in die Tiefe,
Wir können Seiten in Seiten zu kratzen.
Und für dieses Beispiel werde ich sein, die Ausgabe in eine CSV-Datei.
Also bin ich hier erfordern csv up weil Rubin nicht, in sich selbst,
die Funktionalität nur Ausgangs CSV-Dateien.
Also das ist super einfach.
Lassen Sie mich nur auf den nächsten zu gehen.
Wir deckten Datei-I / O. Also das ist ähnlich, wie es in C ist
Und bevor wir zu Kimono, Ich werde nur zeigen Ihnen, wirklich schnell, wie
um Stellen innerhalb Sehenswürdigkeiten zu kratzen.
>> So bereits gelernt, wie wir Arrays in Ruby zu erklären.
So bin ich nur über die Vereinbarkeit eines Bündel von beliebigen Arrays
dass ich in der Speicherung von Daten innerhalb.
doc arbeitet genauso wie es in der vorherigen Datei gemacht haben.
Wir gehen in, der Suche nach jede der span.txt ist.
Wir wissen bereits, dass.
Das ist der Behälter, in dem jedem Link hat alle Daten, die wir wollen.
>> Also hier, was wir tun, ist für jeden Link span class txt, wir gehen in
und wir finden, das einen Tag, Suche nach dem ersten Element davon.
Denken Sie daran, .css ein Array zurückgibt, so kann man nicht einfach darauf zugreifen, wie es ist.
Wir werden das erste Element zu finden.
Auch wenn es ein Array von einem Artikel, müssen Sie diese Syntax verwenden,
und ziehen Sie dann die href-Attribut.
>> Also haben wir diese zuvor.
So sollte diese bekannt vorkommen.
Und so haben wir jetzt ein Array genannt Pfade alle unsere Links
dass wir gehen, um verwenden möchten.
Also, wenn wir dieses Array aller der Wege, die wir verwenden möchten,
wir können dann einen Eintrag für jeden dieser Seiten, wenn wir öffnen die Seite.
So wie wir sahen auch Die Syntax vor, wobei
Dabei String-Interpolation mit dem Pfad Hier, so die Syntax ist nur für Pfad.
Und ich konnte diesen Namen variable beliebige Namen.
>> Dies ist das wichtigste.
Dies ist das Array, dass Sie sein, den Zugriff auf jedes Element.
Aber wenn man in Pfade sagen zum Weg, Dies bedeutet, für jedes Element in den Wegen,
nennen Sie es weg, und verwenden Sie diese.
Dies ist im Wesentlichen, wie wenn man tun eine for-Schleife, und Sie int i verwenden.
So können Sie den Pfad als das zu behandeln Variable, ist Erhöhen.
>> Und dann für jeden dieser, gehen Sie in jedem dieser Links.
Weil wir es speichern in Artikelseite, so dass wir eine neue Seite erstellt, jedes Mal
wir zugreifen.
Und dann innerhalb dieser neuen Seite zu finden span.postingtitletext, span.price,
und dann Abschnitt # postingbody.
Wir haben bereits Abschnitt # postingbody abgedeckt Als wir uns der Beschreibung.
>> So können wir gehen sehen, in der Craigslist-Post, wenn Sie gerade auf der Suche auf den Titel,
Sie können es hier oben zu sehen, Spanne postingtitletext.
Und das ist, warum es da ist.
Und dann für den Preis, können Sie Zugriff mit span class der Preis.
>> Also haben wir auch vielleicht könnte wollen die URL zu speichern.
So dass wir nur laufen diese wieder, lagern Sie es in einem Array,
weil, wenn Sie suchen auf Craigslist, du bist
wahrscheinlich, einen Weg zu wünschen, wenn Sie sehen etwas, das Sie interessiert,
gehen Sie zurück zu diesem Standort.
So dass Sie nur wollen, um zu speichern die URL für Verweise willen.
>> Dies ist nur im wesentlichen eine weitere Syntax für die for-Schleife.
Ich konnte einfach nicht statt paths.each der zum Pfad in Pfade mit Index.
Und diese Syntax ist Rubin for-- Weg ist, was wir haben hier oben,
Deklarieren einer Variablen für jedes Element.
Und der Index verhält sich wie das i in C for-Schleifen.
So können Sie Kurs zu halten was der Index ist.
>> So, hier ist nur ein wenig bequeme Sache
für, wenn Sie mit den Schaber sind.
Wenn Sie Schaben Hunderte von Seiten, um sicherzustellen, dass es nicht hängen,
Es wird nur ausgegeben, Ich bin Zugriff auf diese Seite
und sicherstellen, dass es ist noch nicht abgeschlossen.
Aber für unsere Zwecke, weil es gibt hundert Artikel,
Ich werde für den Zugriff auf nur drei von ihnen , so dass wir keine Zeit mehr hier.
>> Aber bevor wir dazu kommen, ich bin nur gehen Sie zu zeigen, wirklich schnell,
Ich werde die Ausgabe des Titels, Preis, Beschreibung und URL
von jedem der Links, die ich abgeschabt.
Und dann ist dies nur das Syntax für die CSV-Bibliothek.
Sie öffnen eine CSV.
Dies ist, was werde ich es nennen.
Öffnen Sie diese mit Schreib do.
Und dann CSV wird die Datei sein, dass Sie Eingabe alles in.
Dies ist nur eine Plausibilitätsprüfung für mich zu wissen, dass es läuft.
Und das ist meine Plausibilitätsprüfung zu wissen, dass es abgeschlossen ist.
Also ich bin Putting Titel in eine Zeile in das CSV, Preis, URL, Beschreibung,
alle in Reihen in der CSV.
>> Also, wenn wir gehen und laufen Diese now-- und ich
stellen Sie sicher, dass ich es-- anstatt gespeichert nur Ausgeben desselben an das Terminal,
wir sollten eine CSV haben Datei, die produziert wird.
Also hier können wir den CSV sehen Datei, die hergestellt worden ist.
Dies ist der Ausgang des scape, dass ich gerade lief.
Wie Sie hier sehen können, zugreifenden Seite 0, 1, 2, 3.
Dies sind die Titel, Preise, Beschreibungen.
Und wenn wir uns dieser CSV Datei, die wir erzeugt haben,
Sie sehen, hier ihre ausgegeben.
Dies ist nicht Excel, so dass es nicht in Reihen und Spalten formatiert.
Aber man kann sich vorstellen, wie es könnte formatiert sein.
>> CSV steht für Comma Separated Values.
So können Sie sich vorstellen, dies könnte eine Zeile sein.
Und jedes Komma würde zeigen einen separaten Spalte.
Nur ein Wort der caution-- manchmal sind Sie
Schaben Dinge mit viel Kommas.
Also, wenn Sie die Ausgabe sind es in eine CSV-Datei,
Es ist vielleicht nicht das Ausgangs wie Sie vielleicht denken.
>> Also das ist, im wesentlichen alle dort ist zu kratzen grundlegende HTML-
Seiten mit Nokogiri.
>> So im Internet Befinden innovative wie es kommen
eine stärker automatisierte und GUI Version, wenn auch weniger robust
Version von Schaben verschiedenen Websites.
Und für unsere Zwecke Ich werde zeigen,
eine Chrome-Erweiterung namens Kimono.
Und alles, was Sie tun müssen ist, Sie navigieren auf die Seite, die Sie zu kratzen wollen.
Sie klicken auf einen Bereich von Interesse.
Sie kalibrieren, die Felder, weil es automatisch
zu erkennen, was er denkt, Sie wollen sicher sein Kratzen,
und dann erstellen Sie einfach eine API.
>> Also, wenn wir waren, es zu zeigen, auf Craigslist, es tatsächlich nicht funktionieren würde.
Und das ist, was ich zurück zu sagen über sie nicht in der als robust.
Es hat Probleme beim Erstellen der API.
Aber als eine Demonstration von dem, was es tun würde,
wenn Sie die Chrome-Erweiterung zu installieren, alles, was Sie tun, ist Sie darauf klicken.
Es Kimonofies die Seite, und dann klicken Sie auf das, was Sie script möchten.
>> Also, wenn ich klicken Sie auf dass es zu markieren würde
was er denkt, ich will sein Abschaben die Seite.
Also vielleicht habe ich diese Angebote anzurufen.
Dies ist, wie viele Artikel habe ich ausgewählt.
Und ich kann nur bestätigen oder dementieren, einige der anderen vorgeschlagenen einsehen
sie hinzufügen zu bekommen was wird abgeschabt werden.
>> So, jetzt können wir sehen, gibt es hundert Elemente ausgewählt.
Wenn ich will, um ein weiteres Feld, dass ich auch zu kratzen, die damit verbunden ist,
sagen, ich will, um den Preis zu kratzen als gut, dann kann ich das gleiche tun.
>> Also hier ist eine Demonstration, wie es ist viel weniger robust, denn jetzt ist es
Abholung der Stadt statt nur der Preis, den ich will.
Und jetzt ist es bis 200 Dinge gerichtet.
Sie können zurück zu gehen und zu löschen.
Sie können es erneut versuchen.
Aber keine Garantien.
Dies ist, wie dies manchmal funktioniert.
Wie Sie hier sehen, jetzt heißt es 96 hier oben.
Es hat den größten Teil der Links abgeholt dass Sie möchten, zu kratzen, aber nicht
zwangsläufig alle.
>> Ein weiteres nützliches Tool von Kimono obwohl ist, können Sie den Advanced Features gehen
Hier, auf Erweitert, und es wird Ihnen zeigen,
der Zusammenbruch der einzigartigen Weg, um die HTML-Zugriff
Tags, die Sie zu kratzen wollen.
Also für Auflistungen, wenn man sich hier ansehen, wenn Sie auf div p Spanne spannen a,
Sie tatsächlich nur verwenden können, dies in Ihrem Nokogiri Code,
wo, bevor wir span.txt hatte zu jedem der Angebote zu gelangen.
Wenn ich will nur den Text innerhalb der Listen,
Ich konnte Eingangs div Raum p Raumbereich Raumbereich Raum ein,
und es würde den gleichen Effekt zu erzielen.
Und für diejenigen unter Ihnen, die es interessiert in mit regulären Ausdrücken,
es geschieht, um Ihnen auch die regelmäßige Ausdruck Art von String an Eingang
um die Dinge zu finden Sie versuchen, zu finden.
>> So gibt es eine andere kühle Eigenschaft der Kimono, wo Sie Paginieren können,
die nicht nur kann ich kratzen die Ergebnisse dieser Seite
Ich kann auf diesem kleinen klicken Sie hier, Paginieren,
geben Sie die Schaltfläche, würde nimm mich auf die nächste Seite,
und dann wird es nur, dass sie kann auf die nächste Seite durchlaufen,
und dann kratzen alle the-- so lange wie es ist das gleiche Format der course--
scape alle diese Links auch.
>> Also, weil Kimono will nicht arbeiten mit Craigslist, was wir getan haben
ist Ich habe die Harvard Hochrot Kimonofied.
Ich habe einige der Art gezogen top vorgestellten Artikel, bestätigen Sie hier.
Sagen alle diese.
Ich habe diese API kompiliert für Sie vor der Zeit.
Aber sonst, was Sie tun würden wird Sie nur auf Fertig.
Geben Sie in Ihrem API Details.
Setzen Sie ihn auf entweder automatische oder manuelle kriechen.
So dass Sie zu aktualisieren, könnte Ihre Daten alle 15 Minuten,
wöchentlich, täglich, was auch immer Sie wollen.
Benennen Sie Ihre API.
Erstellen Sie die API.
Zu Ihrem Vorteil, die ich angelegt habe die Hochrot Titelseite API bereits.
>> So erstellen Sie einfach ein Konto auf dem Kimono, und es
werden alle Ihre APIs für Sie zu speichern.
So im Wesentlichen das ist, alle Ihre getrennte verschiedene Schürfwunden.
>> Also, wenn wir hier sehen, ist dies die Meinungen Links, die ich gesammelt habe.
Dies sind die vorgestellten Links, die ich gesammelt habe.
Und das sind die am meisten gelesene Links, die ich gesammelt habe
von diesem letzten API-scape.
>> Also, wenn Sie hier sehen können, diese wäre die vorgestellten,
diese würden die Meinungen sein, die in diesem Beispiel,
Ich habe sie alle in Verbindung in eine Sammlung.
Aber wenn Sie nur spielen, um mit ihm ein wenig, können Sie es aufteilen
und teilen sie sich jedoch Sie möchten so lange
Der Formatierungs ist etwas anders.
>> Einfach zu spielen, um mit diesem, das crawl einzurichten, einer der Nachteile
wird man nur kriechen 25 Seiten zu einem Zeitpunkt.
Das ist einer der begrenzenden Faktoren.
Aber hier, wenn Sie es eingestellt auf Hand kriechen, diese
ist, wie Sie es sagen, um Ihre Daten zu aktualisieren.
Und hier können Sie Ihre crawl Geschichte zu sehen von allem, was du hast kroch.
Und euch kann zurückgehen, melden Sie sich an, spielen, um mit all den verschiedenen Möglichkeiten,
dass Sie zu ändern und nutzen Ihre Daten können.
>> Kimono kann bis zu festgelegt werden kratzen Links innerhalb Links.
Und Sie würden so vom ersten zu tun Schaben eine Liste von Links,
und dann unter Verwendung dieses API als Startplatz für eine weitere API
dass Sie das Skript erstellen.
Aber das ist komplizierter als was wir in heute.
>> Also das ist, Kimono.
Wir werden über die Vor-und sprechen Wider Nokogiri und Kimono.
>> Nokogiri, es ist wirklich schnell.
Es ist einfach zu testen.
Sie können einfach macht nichts Konsole, einfach zu konfigurieren.
Sie können genau das, was zu entscheiden Sie kratzen und speichern möchten.
Es gibt keine Grenzen Seite.
Ich tatsächlich verwendet werden, dass es wie kratzen 1800 South African School Websites
E-Mails für ein Praktikum, das ich getan habe.
>> Also das ist möglich, wenn auch Best-Practice- wäre die Aufteilung des Skripts.
Denn wenn es fehlschlägt, Sie etwas nicht bekommen.
Aber wenn Sie ein hundert tun, vielleicht 200 Seiten zu einem Zeitpunkt,
dann haben Sie eine gewisse Chance haben mindestens bekommen es Stückwerk, vor allem
wenn Sie schlechte Internet.
>> Leider kann es nur kratzen HTML.
Also, wenn Sie dynamisch geladen pages--
und ich werde Ihnen ein Beispiel zeigen, wie Kayak in einem second--
Nokogiri leider kann nicht zu kratzen, dass.
>> Aber Kimono ist auch einfach zu bedienen.
Wie Sie gesehen haben, ist es im wesentlichen ein Punkt, und klicken Sie auf.
Es kann JavaScript kratzen.
Leider gibt es ein Maximum um wie viele Seiten Sie kratzen können.
Manchmal ist es ein wenig schwer zu konfigurieren.
Es gerät durcheinander.
Aber es ist auf jeden Fall etwas zu prüfen,
wenn Sie nicht versuchen, eine haben werden Super-robuste wartbar kratzen.
Wenn Sie nur wollen, um zu bekommen alles aus einer Seite schnell,
dann Kimono ist ein wirklich gutes Werkzeug zu benutzen.
Und wie ich bereits erwähnt, gibt es Die erweiterte Funktion des Kimono
dass Sie wissen, wie man zeigt, Zugriff auf das einzigartige HTML
Element, das super nützlich ist, auch wenn Sie in Nokogiri arbeiten.
>> Also, wenn wir zum Kayak Website, für Beispielsweise können Sie es sehen können ist--
oder vielleicht können Sie nicht sehen.
Aber wenn ich Ihnen zeigen, die URL für Kayak, eigentlich ist nur der Quell-URL.
Dies ist die URL bevor es gleichgültig mit welchen JavaScript-Skripten modifiziert
dass sie geht.
Und es wird anders aussehen von der Überprüfung des Elements.
>> Also, wenn Sie über gehen und Sie Spiel dich die Inspect Element
Code zum Quellcode, es eigentlich vor sich geht, anders zu sein.
Und das ist im Wesentlichen, warum Nokogiri kann nicht kratzen dynamisch belasteten Standorten.
Weil Nokogiri ist Abkratzen der Quell-URL,
wohin Kimono ist eigentlich Schaben, was Sie sind im Wesentlichen
Sehen Sie in der Select-Element.
>> Also, wenn ich durch und ich gehe versuchen und Kimonofy Kayak,
Ich kann tatsächlich durchlaufen und wählen Sie den Preis.
Es ist ein wenig schwieriger, und in diesem Fall ist es
tatsächlich sehen diesen Preis als verschieden von diesen.
Während also Sie configure-- kann oder Wäre dies nicht dynamisch geladen,
Sie könnten Nokogiri konfigurieren alle diese zu bekommen.
>> Da die Formatierung etwas verschiedene für diese Auflistung
als es dem Rest verglichen wird von ihnen, und Sie hier sehen können
es ist tatsächlich weg und ausgewählt alle Flugpreise.
Vielleicht möchte ich auswählen Flugzeit-als auch.
Und ich kann gehen durch und Art zu konfigurieren, dass.
Ich möchte nicht, dass.
Ich will einfach nur die Zeit des nächsten Fluges.
Und dann nach ein paar davon gehen durch, wird es das Bild.
So Kimono ist ziemlich smart.
Es ist nur nicht ganz so robust.
>> Es gibt einige andere Alternativen, die Sie verwenden können.
Und ich werde Ihnen es hier anzuzeigen.
Wenn Sie mehr Komfort in sind Python anstelle von Ruby vielleicht,
gibt es eine Bibliothek genannt Schöne Suppe.
Sie können, dass.
Es ist sehr ähnlich zu Nokogiri.
Es hat ein paar mehr Funktionen.
Sie können ein HTML-Tag zu finden und dann nach oben oder seitwärts bewegen.
>> Es gibt PyQt.
Dies kann tatsächlich kratzen dynamischen Websites, weil es eine Art ist
ist ein WebKit, die zu sein vorgibt, ein Browser, ohne dass es tatsächlich
ein Browser.
So wäre es für alle warten JavaScript zunächst zu laden, und dann
gehen und versuchen, und kratzen Sie die Seite.
>> Wenn Sie Ruby bleiben wollen, können Sie kann eine Ebene über Nokogiri gehen.
Sie können mit Capybara verwenden ein Poltergeist-Wrapper.
Und dies kann tatsächlich im wesentlichen das gleiche tun
wie PyQt, das ist, es ist ein WebKit.
Es wartet auf die JavaScript zuerst laden.
Wenn Sie rund um genug Geige mit ihm, Sie können sogar erhalten, um an Dinge klicken.
>> Also, wenn es einen Link, ist keine klassische href wo
der Weg ist leicht zu erreichen, und es ist eine Sache, die JavaScript erkennt
ein Klick, können Sie tatsächlich tun.
Je beliebter Bibliothek um einen Benutzer zu simulieren
ist in JavaScript, die PhantomJS ist.
Dies kann natürlich kratzen dynamischen Seiten, da dies im wesentlichen
vorgibt, Chrome sein ohne die Benutzerschnittstelle.
>> Und dann natürlich die robust, aber langsamste Option,
Selen ist ein Browser-Automatisierung.
Und leider, du wirst doch nicht zu sein,
Lage, dies in Ihrem CS50 IDE zu tun.
Da im Wesentlichen, was es tut, ist er startet Chrome,
Firefox, unabhängig von Browser dass Sie verwenden möchten,
und es verfolgt vielleicht der Maus Bewegung, was Sie geben,
und es einfach irgendwie automatisiert diesen Prozess.
So wurde es als eine Art entwickelt, Website Automatisierung Test-Tool.
Aber eine Menge Leute verwenden Selen zu Websites kratzen
dass sie sonst ein Menge Schwierigkeiten Schaben
mit einigen dieser anderen, schnelleren Werkzeuge.
>> Also das ist alles, was ich für Web-Scraping bekam.
Hab Spaß.
>> ZIELGRUPPE: Frage.
>> ROBERT KRABEK: Ja.
>> Publikum: Gibt es einen Mechanismus, um Hash die Website, so konnte man im Grunde
durch sie gehen später.
ROBERT KRABEK: Ja.
Also haben wir das in unserer Beispiel für beide von ihnen,
stellen wir die gesamte Website in Dok.
Und so konnte man eigentlich nur nehmen die Variable doc und schreiben Sie es in eine Datei.
Also, wenn ich wollte, könnte ich schreibe es als HTML-Datei,
und dann anstelle von OpenURI und eine cURL Anfrage,
dann habe ich nur öffnen doc könnte HTML und dann dafür zu suchen.
>> ZIELGRUPPE: Aber können Sie erhalten die Art von Online-Nutzung
während Sie offline zu tun.
Beispielsweise. Wenn Du ..... bist Fliegen für mehrere Stunden,
Ich möchte im Grunde Archiv die gesamte Website. [UNVERSTÄNDLICH]
>> ROBERT KRABEK: Ja, das ist exactly-- so wörtlich, was dieser tut,
wird es nimmt alles, was das wäre bei dieser URL sein.
Also, wenn wir liefen cURL, ist es nehmen Sie die gesamte HTML,
und es ist Speicherung innerhalb der variablen doc.
Also was auch immer Sie tun können die Sie mit doc tun möchten.
Sie können die Ausgabe in eine Datei.
ZIELGRUPPE: Aber es ist nicht verbunden.
Es ist nicht dynamisch.
Es ist nicht rekursiv, nicht wahr?
Sie sehen, was ich meine?
Ich versuche, im Grunde eine Art von Hash- die gesamte Website auf meiner Festplatte
so dass ich im Grunde tun es für mehrere Stunden ohne Internet.
>> ROBERT KRABEK: Richtig.
Also, wenn ich had-- so wo ist meine Datei-I / O?
Das ist also der Datei-I / O. So sagen statt dieser, ich dieses craigslist.html nennen.
Ich würde, dass zu öffnen.
Ich würde puts doc hinein.
Ich schließe die Datei.
Und dann, nur weil die CS50 IDE ist auf der Wolke, das ist, was auch immer.
Ich kann hier.
Ich kann die Datei herunterzuladen.
Und dann wäre auf meiner Festplatte sein.
So können Sie es auf diese Weise.
Oder wenn Sie zu Hause sind, nicht mit dem CS50 IDE, wie Sublime oder so etwas,
Dies ist sogar noch einfacher, weil das ist alles vor Ort verfügbar,
nicht mit dem Internet verbunden.
>> ZIELGRUPPE: Ich verstehe.
Dies ist für ein bestimmtes Problem.
Kannst du es rekursiv zu tun, so dass Sie gehen mehrere Lagen tief Art der Sache?
>> ROBERT KRABEK: Ich kann Ordner herunterladen wie auch, wenn das, was Sie fragen.
ZIELGRUPPE: Ja.
>> ROBERT KRABEK: Kühle.