[音楽再生] ロバートKRABEK:こんにちは、みんな。 私の名前はロバートKrabekで、 私は君たちを教えるされます でウェブをこすりする方法 Rubyのライブラリです鋸山、 Chromeの拡張機能であり、着物、。 したがって、最初あります そのあなたのカップルの事 多分あなたがしてきた場合に行うことができます これまでのすべてのpsetをやっ そして、ワークスペースがあります 少しの完全取得。 私たちは、実際には行くことができ、 あなたのための新しいワークスペースを作成します ただで新しいプロジェクトを行います。 ですから、継続したいならば CS50のテンプレートIDでの作業 あなたが現在持っていること、 お気軽に、そしてあなただけのことができます CFLAGSと鋸山をインストール equals--逸品鋸山をインストールします。 しかし、そうでなければ、私はあなたを紹介 新しいものをセットアップする方法について説明します。 そしてこれは、本質的に より多くの補助輪を落とします。 あなたがであるかのように、あなたがコーディングしています ただ崇高か何かでのコーディング。 我々はそれを上にシフトするのであれば。 だから、これはあなたの現在のCS 50のIDであると言います。 あなたはちょうどここCloud9に行くことができます。 あなたのダッシュボードに行くことができます。 これは、[ワークスペース]タブを表示する必要があります。 そして、あなただけクリックすることができます ここでは、新しいワークスペースを作成します。 あなたの新しいワークスペースに名前を付け、 多分テスト、または擦過。 そしてここで、このカスタムタブをクリックし、 代わりにCS50テンプレート]タブの。 そして、あなただけ行くことができます そして、新しいワークスペースを作成します。 私はすでにここでワークスペースを作成しました。 だから我々はこれで作業になります。 そして、あなたは新しいを作成した場合 [カスタム]タブでそのように、ワークスペース、 あなただけの逸品をインストール入力することができます ここに行くのではありません鋸山、。 [OK]を、それは少し凍ったのです。 しかし、あなたは鋸山をインストール宝石を入力することができます。 そして、それはすべてのことでなければなりません インストールにあります。 私が言ったように、前にあなたはまだしている場合 あなたのCS50のテンプレートIDでの作業、 あなただけのCFLAGSを入力する必要があります 鋸山の宝石インストール等しいです。 そして、私はすでにインストールしています ここで私はそれを行うことはありません。 しかし、これらについては、以下の 沿って、そうして自由に感じます。 つまり、あなたの鋸山を持ってたら ワークスペースまたはライブラリがインストール、 私はあなたに少しを与えるつもりです Rubyの構文でクラッシュコース 鋸山はRubyのライブラリであるため。 だから、いくつかの基本的なを知っている必要があります 鋸山で作業するためのRubyの構文。 だから、いくつかの基本的な違い あなたが慣れているものとから おそらく、あなたが作業してきた場合 これまでちょうどCとPHPで、 あなたはなしタイプの変数を宣言します。 あなたはセミコロンを使用しないでください、 これは救済の一種です。 今周りに括弧がありません またはwhileループ、例えば。 あなただけのコードのブロックを持っており、 あなたはその終わりに終止符を打ちます。 何のプラスプラスはありません またはマイナスのマイナス、ちょうどそう 知っているときのために あなたは、ループのためにやっています、 ただプラスイコールとマイナスに等しいです。 その代わりにハッシュには、 あなたは、その後、必要と使用します しようとしてどのようなライブラリー あなたのプログラムにロードします。 Rubyはコンパイル言語ではありません。 だから、他の救済です。 これは、PHPの場所に、より似ています それはインタプリタ言語です。 あなたは、任意のRubyスクリプトを実行できます Rubyは、その後で次のように記述 スクリプトまたはプログラムの名前で。 それはRubyプログラムだことを示すために、 あなただけの.RB代わりの.Cで終了します。 そして、変数があります Rubyでサイズの配列、 これはあなたがいるときに超便利です こすると、おそらく追加したいです アレイに掻き取ってきたデータ。 あなたは、新しい配列ををmallocする必要はありませんし、 新しい配列に古い配列をコピーします。 あなただけで追加できます 2矢印記号。 そして、何の文字があり、存在しません ただ一文字列。 だから、少し簡単にする必要があります。 だから、私たちはあなたにいくつかを与えるだろう いくつかの基本的なRubyの構文の例。 だからここにあなたの代わりにそれを見ることができます スラッシュスラッシュは、Rubyでコメントします あなただけのシャープ記号を使用します。 そして、変数宣言、あなた ちょうど変数等号を入力 あなたは変数になりたいものは何でも。 彼らは文字列でできます。 あなたは、配列を有することができます あなたが値を取り込みます。 プットとプリントが似ています。 私たちの目的のために、 唯一の違いは、実際にあります それがために立って、置きます プットは、単に新しい行を置きます あなたが印刷しているものは何でもで文字。 だから私たちは小さなを与える場合 ここでデモ、 我々はこのwith--を実行することができます 新しいターミナルを開きます。 あなたはこれらのすべてを見ることができます 私の端末にあるファイル。 そして、私はちょうど実行した場合 ルビー、ルビーintro.rb、それ こんにちは5を出します メイザー、クインシー、キャリア。 アダムス。 だから、全部です 宣言アレイに。 対象者:ロバート、あなたが行うことができます あなたのフォントを少し大きめ? ロバートKRABEK:はい。 あなたがすることはできませんので、私は中にズームすることができます どうやらターミナルのフォントにズームイン。 だから、あなたが印刷方法です あなたの端末に変数。 使用することもできます 文字列の中の変数。 だから、最近のPHPで、 あなたが学んだことがあります 文字列補間があること。 ですから、ここで見てみると、私の場合 三つの変数、名前、ライブラリを宣言し、 言語、と私プット、私 文字列を書き込み、こんにちは私の名前はあります。 そして、代わりにPHPの 文字列補間のバージョン これはもう少し、このようになり、 あなたはその後、ポンド記号を持っており、 中かっこ、その後、 変数の名前。 そして、それは、たとえば、あなたが印刷したい方法です どのような変数名です。 そして、あなたがすることもできます 文字列を連結します。 Rubyは、それがスーパーになります プラス記号で簡単。 あなたはただ1つの文字列を持っています 左側のプラス変数に または、別の文字列を加えた文字列。 私はこれをプリントアウトした場合、それは必要がありますので、 ちょうど私の名前はロバートです、こんにちは言います。 私は、あなたがRubyで鋸山教えします。 そして、ちょうどそのことを確認してみましょう 確かにcase--ルビーイントロです。 こんにちは、私の名前はロバートです。 私は、あなたがRubyで鋸山教えします。 elseステートメント場合は、上に移動すると、 それは少し違います あなたが使用するかもしれないものから あなたはCで働いてきた場合 あなたは括弧を必要としません。 あなたは、中括弧を必要としません。 そして、代わりにあれば、他の、 それは、連結ELSIFです。 ここでだから、私はxは宣言した場合 私たちが見ることができるようにここで、xはまだ5です。 xが3未満であれば、それは小さなあげますよ。 それは、7未満の中、大他の人の場合。 だから5は、メディア番号です。 そして、私は最後でコードブロックを終了します。 ここに私のforループです。 そして、この構文でもあります わずかに違う。 ただ、基本的に5に0 0〜5の配列を宣言されています。 だから、配列内の5つのスロットがあります。 そして、その中の各スロットについて アレイは、私は私をインクリメントされます。 だから、これは4に5から0、または0を印刷する必要があります。 そして、これはメディアを印刷する必要があります。 そして、私はちょうどを通して切り開くでしょう。 君たちはアクセスする必要があります 後でこのコードへ。 だから君たちはこの自分自身を実行することができます。 だから、これはあなたの基本的なwhileループです。 これは単にJを印刷され、 私たちは5を打つまで、1ずつ増加。 スーパークイックRubyのクラッシュコース 関数の記述方法。 代わりに、言う、int型の階乗 数は、私たちはデフ持っています。 そして、基本的にあなたがいます ここで関数を定義します。 これは、になるだろう 関数の名前、 これはあなたのすべての変数であります 関数に渡したいです。 ステートメント内の場合は、することができます。 あなたは返すことができます。 この場合、私たちはしています 再帰を定義します 階乗関数を実装しました。 だから我々は単に関数を呼び出します このようなルビーインチ 私は、私はこれを定義しているので、もし 3に渡し、階乗を呼び出すことができ、 そしてその後、図3は、多数の変数になります 私は、関数内で使用することができます。 そして、このto_sはただ回しています 文字列に階乗の値を返します。 そうでない場合は、スローされます エラー私は、ああ言って string--を印刷することはできません あなたは覚えているので、 このためstring--入れて置きます 階乗は数が返されました。 だから我々はそれを変換することができます そのようなのような文字列へ。 そして逆に、あなたはまた、変換することができます to_iで整数に文字列。 だから、すべてが超シンプルな作り、 私はこれをコメントアウトした場合、保存 そして、階乗関数を実行します。 私たちは見ることができるはずです 3の階乗は6です。 そして、それは確かに真実です。 だから、Rubyであなたのクラッシュコースです。 そして今、あなたはルビーを知っていることを、我々は上に行くことができます 基本鋸山まで設定削れ。 基本的にあなたがしなければならないすべては、 Rubyで、ライブラリを必要とします。 そして、私たちの目的のために、私たちは使用しています ライブラリOpenURIなど鋸山。 そして、あなたがdo--、それはよ あなたthis--の構文を与えます あなたはと同じように多くのURLを開いています CのURLの略でcURLの要求、。 だから、のURLを取ります 問題のウェブサイト。 あなたは変数に格納します。 そして、あなたはそれを検索することができます 使用したユニークなHTMLタグのための変数 .cssのコマンド。 そして出力することができます あなたが好きな場所にコンテンツ。 あなたは、データベース内で開始することができます。 あなたができるファイルで出力しますか、 だけでも、それを画面に出力します。 だから我々はあなたに基本的なスクレーパーを紹介します。 だからここまで、あなたは私たちが見ることができます 鋸山を必要とする、オープン-URIが必要です。 あなたの基本的なセットアップ、レッツ ドキュメントまたはドキュメントを呼び出し、 鋸山に等しい::オープンHTML、 OpenURIより提供されているコマンド 図書館。 そして、我々は、それらのために、検索されます クワッドに住んでいる可能性があります、 ボストンにリストされているバイク ボストンCraigslistの自転車部に サイト。 だから、あなたが慣れていない場合 cURLので、私はちょうどよ 実際に素早くカールがどうなるかを示しています。 私は、URLからのすべてを取得したい場合 Craigslistのサイト、私はカールと入力した場合、 それだけで、URLのすべてをダンプします Craigslistの自転車サイトから 私の端末に。 それは特にありません 便利な私にはないので、 手動で通過したいです 私が探しているものを見つけます。 しかし、単にすることができますので、 私が実際だことを確認 あなたが見た場合、右のコードを使用して bikes--でCraigslistのためのURLに 何らかの理由でそれが見つからないです。 このページを見てみると あなたは、URLを見て、 これは、同一でなければなりません 私はちょうど送信cURLの要求。 そして実際、それはされているものです doc変数に格納されています。 ですから、私たちのコードに戻ったときに、我々 このドキュメント変数を操作することができます .cssファイルを使用します。 だから私はすべてを取得したいと言います span.txtのタグ、 そして、そのタグ内のすべてのAタグ。 そして、なぜ私たちがしたいことがあります 私はあなたが泣く聞く、これを行いますか? 我々は要素を検査した場合、それはあなたができます URLが構成されている方法の内訳。 私が通って下にスクロールした場合 ここで、あなたが見ることができます 何これらのそれぞれ異なります 要素を表します。 だから多分私はアクセスしたいです この特定の要素。 だから私は、Chromeの開発者を使用しています 要素を点検するためのツール。 私はこのことをここに見ることができますダウン スパン内のタグです TXTのクラスにタグ付け。 だから、これは私たちに到達します 最初の操作します そのタグであるdoc.cssスパンは、あります 私はこのすべてのURL内を探しています。 そして、.txtのは、CSSのような多くを操作し あなただけのCSSを書いているときに行います HTMLファイル内により クラスを指定します。 したがって、この特定のオペレータの意志 TXTのクラスでspanタグを指定します。 そして、私はスペースを残している場合、 これは、そのタグ内に移動します そしてその内のタグを見つけます。 だから私はちょうどこれを置く場合 ターミナル、私がすべき 基本的にすべてのものを見ることができます それは、クラスのtxtのこのスパンの範囲内です。 だから我々はそれをやってみますよ。 ルビーCraigslistのスクレーパー。 そして実際、それは私たちに、これらのすべてを提供します その様々なリストのタグ Craigslistのページにあります。 我々は戻ってあれば、我々はこれを変えることができます もう少し便利なものに。 多分私達はちょうど、リンクをしたいです。 このタグ内に、私はまただろうから パスのハイパーリンクを持っています このページはに行くこと。 ですから、ここにこのコードを見れば、 私がやることは、代わりの.cssであります 私はat_cssを行くことができます。 そして、これは単に最初を取得します それらのもののすべての要素。 だから私はそれを行うにした場合 コー​​ド私は以前に実証され、 代わりにすべて返します このうち、それだけだろう それらの最初のものを返します。 だから、at_cssオペレータがどのように動作するかです。 だから我々は、保存したいです 最初のタグのパスがすべて。 そして、私たちを与えるためA-- だから我々はまだの.cssを使用するつもりです。 しかし、これは与えるために起こっているので、 私たちバックタグの配列全体、 我々は、アクセスしようとしています 最初の要素。 だから、これは、あなたができる別の方法です よろしければ、任意の特定の要素にアクセス 素子のアレイを有しています それが返され、 あなたは何を扱うことができますので、その 基本的に、配列としてリターンを.CSS。 そして、我々は、アクセスしようとしています このハイパーテキストの参照属性。 だから、見てみると、あれば あなたは、ここで本当に近くに見えました ただ、基本的にあなたの場合 URLバーを見て、 これはパスであること あなたはこすることになるだろう。 だから、私たちは再びこれを実行する場合、 そして我々はそれを保存していることを確認します。 あなたは自宅でチェックすることができます。 これは実際には、このリンクをアップ一致します。 では、なぜ我々はこれを使用することをお勧めしますか? あなたがこすりしたい場合 ページとそれが持っています 以下のようなリンクのページ Craigslistのは、行います 次に行きたいかもしれません これらのリンクのそれぞれに して、こすり その内容、その 私たちがやろうとしている正確に何です。 だから、としてパスを持っていたら、 変数、もはや私は本当に それをプリントアウトを気に。 私は、変数として保存する必要があります。 そして、私は別のものをアクセスすることができます 私はアクセスするのと同じ方法でページ 最初の場所でドキュメント。 URLを除き、我々はつもりです 文字列の補間を使用します 私はで記述されたように ルビー以前に追加します ルートの最後にパス。 それでは、これを行うに起こっていることです これは、パスを置くために起こっています 私は以前に掻き取っていること して、それを回します 新しい項目に、あなたがしたいものは何でも 例えば、it-- first_listingを呼び出します。 しかし、私は残すつもりです 今の項目のこと、 それは私がここに使用しているものですので。 だから私は説明を取得したいと言います Craigslistの中の最初の投稿の。 だから私はここでダウンして行くだろう。 私は点検の要素をクリックしてくださいだろう 再び、これは、説明されるためです。 私はここでダウンして行くと参照してくださいね 私が見つけることができればどのように私はかもしれません このユニークなタグを検索することができます。 この場合には、それが持っています 私たちをリードID、 検索する私たちの次の道へ ハッシュタグであるタグ、。 だからクラスについては、次のことができます ドット演算子を使用します。 だから、.TXTはTXTのクラスを指定して、 ハッシュに対し、IDを指定します。 したがって、この場合には、タグは、 セクション、およびIDがpostingbodyです。 だから、これは行くと見つけました first--私たちがしているので、 これが行くat_css--使用し、 最初の要素を見つけること セクションのタグを思い付きます そして、postingbodyのID。 そして、あなたはテキスト要素にアクセスすることができます その項目の.textセクションに戻りました。 そして、我々は保存することができます 説明です。 だから今我々が持っていること 変数の説明、 私たちは、たとえば、行うことができるかもしれません ファイルI / O。だからRubyでのI / Oファイル I / Oをファイルに非常に似ています C言語で私たちは、ファイルを開く場所。 我々はそれに書き込む可能性があります。 そして、我々はそのファイルを閉じます。 そこでここでは、我々だけで命名しています ファイル、いくつかの任意の変数。 我々はまた、ちょうどここにこれを入れている可能性があります。 私たちは保存している変数を持っています File.openと同じように開いているファイル。 そして、我々は、このファイルに書いています 私たちは、Wオペレータで開きます。 そして、我々はに文字列を入れて .puts演算子を使用してファイル。 そして、我々は、我々の変数を置きます その内のファイルに書き込みたいです。 そして、我々は、単にファイルを閉じます。 だから我々は先に行くと、これを実行する場合、 これは、文書を作成する必要があります description.txtとする意志 その中にこの説明を持っています。 もしそうであればノーit--を実行します。 これは、テキストフ​​ァイルを作成しています うまくいけば、同じこと。 だから新しい投稿があったかもしれません 私が話をしてきた一方で、それは来ています。 あったように、実際にそれが見えます。 だから我々は、この古典的な自転車に行けば、 一致するように思われる1966年から1962年、。 そして、そこに行きます。 だから、最も基本的なのです スクレイピングの機能。 私たちの代わりに持つことができます ただ、このファイルへの書き込み、 我々は配列に物事を追加することができます。 だから私は3つの配列を宣言した場合、 タイトル、価格、説明。 そして、我々は今、ドキュメントのアイテム上で動作しています。 我々は通過して行くことができます span.txtのすべてを見つけます。 これは配列を返し、覚えています それが見つかったすべての項目の。 そしてRubyで、あなただけ使用することができます すべての項目を反復処理します.each 配列の。 そして、各項目について、 私はちょうどそれを呼び出すつもりです 、それはだからリンク 基本的にそれが何でありますか。 だから私は、各link.cssドットa.hdrlnkを置く場合、 これは実際にリンクに起こっています 別のそのリンク内で発見 HTML要素と対応するクラス。 だから我々は何を覚えていれば これは、span.txtました、 あなたは私がちょうど戻って手放すsee-できます span.txt内の実quick-- 我々は、他のクラスがたくさんあり​​ます。 だからspan.txt内側に、私たちは見ています クラスhdrlnkとタグ。 だから、私はちょうどそれを見つけてみましょう 実際に素早く君たちのために。 ですから、ここで見ることができ、これはタグであります それは、クラスのtxtのスパン内です それは、クラスhdrlnkを持っています。 そして、それは確かに何 我々が取得しようとしています。 だから我々は今、すべてを保存しようとしています タイトルの中にあるもののリンク。 そして、我々は、印刷しようとしています これらのリンクの各アウト。 いいえ、申し訳ありません。 私たちは、プリントアウトするつもりです それらのそれぞれの価格。 それでは、実際にこれを実行してみましょう 迅速かつそれが何を参照してください。 だから、これはただ、基本的に行ってきました 各リンクを介して、 今度は、問題のタグにアクセスし、 して、価格を引き抜きます。 そして、それが原因後のことでした あなたはタイトルにすべてを持っています、 私たちはそこにタイトルを保存されてきました。 私達はちょうど、リンクを保存されてきました 配列のタイトル内で。 そして、このループの動作では、 どこ代わりにa.hdrlnkに行くの、 我々はspan.priceを探しています。 だから私は本当にすぐに見つけることができれば 価格、あなたが要素を検査する場合、 あなたはそれがスパンであることがわかります 価格のクラスで。 そして、それは本質的にどのようです 我々はそこに価格を取得しています。 だから、本当にです こするの基本的なケース。 それはあなたがすべて取得する方法です ページの要素 つまり、あなたはすでにのURLを知っています。 だから我々は、取得したい場合 深さもう少し、 私たちは、ページ内のページをこすりすることができます。 そして、この例では、私はよ CSVファイルに出力すること。 だから私はここにCSVを必要としてい Rubyはないので、それ自体の内部には、 機能性を持っています ただ、出力CSVファイルに。 だから、超簡単です。 私はすぐ隣に行きましょう。 私たちは、ファイルI / Oをカバーしました。だから、この それがCであるかに似ています そして、私たちは着物に移動する前に、 私がどれだけあなたが本当に迅速紹介します スポット内のサイトをこすります。 だから我々はすでに方法を学びました Rubyで配列を宣言します。 だから、僕は宣言しています 任意の配列の束 私は、内のデータを格納すること。 ドキュメントは、同じように動作しています それは前のファイルで行ったように。 我々は見つけること、で行っています span.txt年代の各。 我々はすでにそれを知っています。 それは内の各コンテナです リンクは、私たちが望むすべてのデータを持っています。 だからここに私たちがやっていることは、それぞれのためのものです スパンクラスTXTのリンク、私たちが行っています 私たちは、タグを発見しています その最初の要素を見つけます。 、配列を返すの.css、覚えておいてください あるようにあなたはそれにアクセスすることはできません。 我々は最初の要素を見つけるつもりです。 それは、一つの配列の場合でも、 項目は、次の構文を使用する必要があり、 して、href属性を引き出します。 だから我々は以前これをしました。 だから、これはおなじみのはずです。 そして今、我々は配列を持っています 私たちのすべてのリンクのパスと呼ばれます 我々が使用したいとしていること。 だから我々は、すべてのこの配列を持っている場合 我々が使用するパスの、 我々はその後、それぞれに項目を作成することができます これらのページの私たちは、そのページを開いたとき。 だから我々はまた、上で見たように 前の構文ここで、 パスで文字列の補間を行います ここでは、そのように構文がパスだけのためのものです。 そして私は、この名前を付けることができ 変数任意の名前。 これは重要なものです。 これは、あなた'LL配列です 各要素にアクセスします。 しかし、あなたがパスにパスを言うとき、 これはパスの各要素ための手段と、 パスを呼び出し、それを使用しています。 ときにこれは本質的に似ています forループを行うと、あなたは私をintを使用します。 だから、あなたにパスを扱うことができます インクリメントだ変数。 そしてそれらのそれぞれについて、 これらのリンクのそれぞれに行きます。 私たちは商品ページでそれを保存しているので、 私たちは毎回新しいページを作成しています 我々はそれにアクセスします。 そして、その新しいページ内検索、 span.postingtitletext、span.price、 して、セクション#のpostingbody。 我々はすでにセクション#のpostingbodyをカバー 我々は、説明を見たとき。 だから我々は、Craigslistの記事で見に行くことができ、 あなただけのタイトルを見ている場合は、 あなたは、ここでそれを見ることができます スパンpostingtitletext。 そして、それはそれがあります理由です。 そして価格のため、次のことができます 価格のスパンクラスでそれにアクセスします。 だから我々はまた、おそらくかもしれません URLを保存したいです。 だから我々は単にこれを実行します 再び、配列に格納し、 あなたが探している場合ので、 Craigslistの上で、あなたがしています 場合、おそらく、への道をするつもり あなたは、あなたの興味のある何かを見ます バックそのサイトにアクセスしてください。 だから、あなただけ保存したいです 参照のためのURL。 これは単に、本質的です ループのための別の構文。 私はだけではなく、paths.eachんでした 指標とパスでパスの。 そして、この構文はルビーですfor-- パスは、私たちがここまでやったことあります 各項目の変数を宣言。 そしてインデックスは、同じように動作し ループのためのC言語で私。 だから、追跡することができます インデックスが何であるかの。 だからここだけです ちょっと便利なもの あなたはスクレーパーを実行しているときのために。 あなたは数百ページをこするしている場合は、 それがぶら下がっていないことを確認し、 それだけで出力は以下となり、 私はこのページにアクセスしています、 とことを確認すること それはまだ続いています。 しかし、我々の目的のために、なぜなら 百の項目があります、 私はそれらの3つだけにアクセスするつもりです ここでは、時間が不足しないようにします。 我々はそれに到達する前にしかし、私はちょうどよ あなたは本当に素早く表示するために行きます、 私はタイトルを出力します、 価格、説明、およびURL 私が掻き取ってきた各リンクの。 そして、これはただであります CSVライブラリの構文。 あなたは、CSVを開きます。 これは私がそれを呼び出すつもりだものです。 書き込みで開きください。 そしてCSVは、そのファイルになります あなたはにすべてを入力しています。 これがためだけの健全性チェックであります 私はそれを実行していることを知っています。 そして、これは私の健全性チェックであります それが完了していますことを知っています。 だから私は、内の行にタイトルを入れています CSV、価格、URL、説明、 CSVの行にすべて。 だから我々は行くと実行した場合 このnow--と私はちょうど 私が代わりにit--保存したことを確認してください 単に端末に出力します、 我々は、CSVを持つ必要があります 生産のファイル。 そこでここでは、CSVを見ることができます 生産されていたファイル。 これは、出力され 私はちょうど走った花茎。 あなたがここに見ることができるように、 ページ0、1、2、3にアクセスします。 これらはタイトルであり、 価格、説明。 そして、我々は、このCSVファイルを見れば 我々は、生成したファイル、 あなたは、そのここで出力を見ることができます。 これは、Excelではないので、そうではありません 行と列にフォーマットされています。 しかし、あなたはどのように想像することができます それがフォーマットされることがあります。 CSVはカンマ区切りの略です。 だから、これは行であるかもしれないと想像することができます。 また、各カンマが希望 別の列を示しています。 caution--の言葉だけ 時にはあなたがいます コンマの多くのものをこします。 ですから、出力している場合 それCSVファイルに、 それが出力されないかもしれません あなたが考えるかもしれない方法。 だから、基本的にすべてです 基本的なHTMLのスクレイピングにあり 鋸山持つページ。 だから、インターネットビーイング それは来ているとして、革新的な より自動化とGUIを持ちます バージョン、あまり堅牢ではあるが さまざまなウェブサイトをこするのバージョン。 そして、私たちの目的のために 私が実証されます 着物と呼ばれるChrome拡張。 そして、あなたがしなければならないすべては、あなたがナビゲートであります あなたがこすりしたいページに移動します。 あなたが興味のある分野をクリックしてください。 あなたは、フィールドを校正、 それは自動的になるため、 それがどう思うかを検出 あなたはスクレーピングしたいです、 して、あなただけのAPIを作成します。 だから我々はそれを実証した場合 Craigslistのは、それが実際に動作しないでしょう。 そして、これは私が戻って何が起こっていたかであります それはのように堅牢されていないについて言っ。 これは、トラブルのAPIを作成しています。 しかし、デモなど それはどうなるのかの、 あなたがChromeの拡張機能をインストールする場合、 あなたが行うすべては、あなたがそれをクリックします。 これは、ページをKimonofies、その後 あなたがスクリプトにしたいものをクリックしてください。 だから私は、上のクリックした場合 それは、それがハイライト表示になります 何それは私がしたいと考えて そのページを削り取ること。 だから多分私はこのリストを呼び出します。 これは私が選択したどのように多くの項目です。 そして、私はいくつかを確認するか、または拒否することができます 他の提案したリストの それがに追加取得します 何が掻き取られます。 だから今、私たちがあります見ることができます 百の項目が選択されています。 私は別のフィールドを持つようにしたい場合 また、これに関連しているこすり、 私は価格をこすりしたいと言います 同様に、私は同じことを行うことができます。 だから、ここでそれだ方法のデモンストレーションです はるかに少ない堅牢な、今だから 代わりに街を拾います 私はしたいの価格だけ。 そして今、それが200物事をピックアップしています。 あなたが戻って削除することができます。 もう一度試すことができます。 しかし、無保証。 これは、これは時々どのように動作するかです。 ここで見るように、今ではここまでの96を述べています。 これは、リンクの大部分をピックアップしています あなたがこすりしたいことではなく、 必ずしもそれらのすべて。 着物しかし別の有用なツール あなたは高度な機能に行くことができますです ここでは、高度に行き、 そして、それはあなたが表示されます 独特の内訳 HTMLにアクセスする方法 あなたがこすりしたいタグ。 だからリストのために、あなたはここを見れば、 あなたはdivのPスパンにアクセスする場合にまたがります、 あなたは、実際には使用することができます あなたの鋸山のコードでこの、 ここで、我々はspan.txtていた前に リストの各アクセスします。 私はテキストだけをしたい場合 リスト内で、 私ができた入力のdiv空間P 空間スパン空間スパン空間A、 それは、同じ効果を達成するであろう。 そして、興味を持っているあなたの人々のために 正規表現を使用して、 それはまた、あなたの定期的なを与えるために起こります 入力に文字列の発現ソート 物事を見つけるために あなたが見つけることをしようとしています。 だから、他のクールな機能があります あなたがページ付けでき着物の、 これだけではありません私はこすりすることができます このページの結果、 私はこの小さなをクリックすることができます ここでボタン、ページネーション、 その希望のボタンを指定します 次のページに私を取ります、 そして、それはちょうどそれを知っています それは次のページに繰り返すことができ、 そしてその後the--限りのすべてをこすり それはcourse--のと同じ形式だとして 同様にそれらのすべてのリンクをスケープ。 着物は望んでいないので、そのために 私たちが何をやったか、Craigslistのと連携 私はハーバード・クリムゾンをKimonofiedきています。 私は一種の一部を取り出してきました トップ記事を特色にし、ここで確認してください。 これらのすべてを言います。 私は、このAPIをまとめました あなたのために早めに。 しかし、そうでなければ、どうなるのか あなただけの[完了]をクリックしますでしょうです。 あなたのAPIの詳細を入力します。 いずれかに設定してください 自動または手動のクロール。 つまり、あなたの更新ができ データを15分ごとに、 毎週、毎日、何をしたいです。 あなたのAPIに名前を付けます。 APIを作成します。 あなたの利益のために、私が作成しました すでにフロントページAPIをクリムゾン。 だから、あなただけの作成します 着物のアカウント、およびそれ あなたのためにすべてのあなたのAPIを格納します。 だから、基本的にそれがすべてですあなた 独立した別の擦り傷。 私たちはここを見てあれば、これは 私が収集した意見へのリンク。 これらは紹介されています 私が収集したリンク。 そして、これらは、最も読まれています 私が収集したリンク この最新のAPI花茎から。 ですから、ここで見ることができれば、 これらは、特色になります これらは意見であろうが、 この例でいます、 私はそれらすべてを組み合わせました 1コレクションに。 しかし、あなたはそれで遊ぶ場合 少しは、あなたはそれを分割することができます としかし、それを分割 あなたがいる限りにしたいです フォーマットとしては若干異なります。 ただ、これをいじって、 クロール、欠点のいずれかを設定します あなただけのアップクロールできています 一度に25ページへ。 それが制限要因の一つです。 しかし、ここで、あなたはそれを設定した場合 マニュアルクロールに、この あなたはそれを伝えることができる方法です あなたのデータを更新します。 そして、ここであなたのクロール履歴を見ることができます あなたがクロールしましたすべての。 そして、あなたたちは、戻ってサインアップすることができ、 すべての異なった方法で遊びます あなたのデータを変更して使用することができ。 着物はまで設定することができます リンク内のリンクをこすり。 そして、あなたは最初にして行うことになります リンクのリストをこします、 そして、その後のようにそのAPIを使用して、 別のAPIのポイントから飛び降ります あなたは、スクリプトを作成すること。 しかし、それはより複雑です 私たちが今日に取得するつもりです。 だから、着物です。 私たちはプロの話をしますと、 鋸山と着物の短所。 鋸山は、それは本当に速いです。 これは、テストするのは簡単です。 あなただけに何かを置くことができます コンソールは、簡単に設定できます。 あなたは正確に何を決定することができます あなたはこすり、店舗にしたいです。 ページ・制限はありません。 私は実際のようにこすりするためにそれを使用しました 1800年南アフリカの学校のウェブサイト 私はインターンシップのための電子メールのために。 だから、ベストプラクティスが、可能性があります スクリプトを分割することであろう。 それが失敗した場合ので、その後、 あなたは何を得ることはありません。 しかし、あなたは百をすれば、 多分当時の200ページ、 あなたは、少なくともいくつかのチャンスがあります 特に、少しずつそれを取得 あなたが悪い、インターネットを持っている場合。 残念ながら、HTMLだけをこすりすることができます。 あなたが持っているのであれば 動的にロードさpages-- そして、私はあなたの例を紹介します second--でカヤックのような 残念ながら鋸山 それをこすりすることはできません。 しかし、着物にも使いやすいです。 あなたが見たように、それは本質的です ポイントとクリックします。 それは、JavaScriptをこすりすることができます。 残念ながら、最大値があります あなたがこすりことができますどのように多くのページへ。 時にはそれは少しです 設定するのは難しいです。 それは混乱してしまいます。 しかし、それは間違いです 考慮すべきもの あなたが持ってしようとしていない場合 超堅牢な保守性こすり。 あなただけ取得したい場合 すぐにページのオフすべて、 その後、着物は本当にあります 使用するには良いツール。 私は前に述べたように、あります 着物の高度な機能 それはあなたがどの​​ように示しています ユニークなHTMLにアクセス でも超便利な元素で、 あなたは鋸山で作業している場合。 だから我々は、カヤックのサイトに行けば たとえば、あなたが見ることができますis-- または多分あなたは見ることはできません。 しかし、私はあなたのカヤックのURLを示す場合、 これは、実際には元のURLです。 これは、従来ビーイングのURLです どのようなJavaScriptのスクリプトによって変更されました 彼らは起こっていること。 そして、それは異なって見えるために起こっています 要素を検査から。 だから、通過した場合 エレメントを点検一致 ソースコードにコードが、それはです 実際には異なることになるだろう。 そして、これは本質的理由鋸山であります 動的にロードされたサイトをこすりすることはできません。 鋸山であるため ソースURLをこします、 着物は、実際にあるのに対し、 あなたは基本的にしているものをこすります select要素で見て。 だから私は通過し、私ならば 試してみて、Kimonofyカヤック、 私は実際に通過することができます 価格を選択します。 それは、少し難しくなります この場合には、です 実際にこの価格を見て これらとは異なり。 あなたがconfigure--できるのに対し、そうか これは、動的にロードされなかった場合、 あなたは鋸山を設定でき これらのすべてを取得します。 書式はわずかであるため このリストには異なります これは他の部分に比較されます それらの、あなたはここで見ることができます それは実際に逝ってしまったと 選択されたすべての便価格。 たぶん私は選択したいです 飛行時間にも。 そして、私が通過することができ、 ソートのことを設定します。 私はそれを望んでいません。 私はちょうど次のフライトの時間が欲しいです。 そして、これらのカップルの後に 通過して、それが画像を取得します。 だから、着物の美しいスマート。 それはちょうどほど堅牢ではありません。 いくつかの他のがあります。 あなたが使用できる選択肢。 そして、私はここであなたにそれらを紹介します。 あなたは、より快適である場合 多分代わりにルビーのPythonの、 ライブラリがあります 美しいスープと呼ばれます。 あなたはそれを使用することができます。 それは鋸山に非常に似てます。 これは、いくつかのより多くの機能を持っています。 あなたは、HTMLタグを見つけることができますし、 その後、上に移動または横に移動します。 PyQtはがあります。 これは実際に動的なこすりすることができます サイト、それは一種のだから なりすましWebKitがあります そこに実際にせずにブラウザ ブラウザいます。 だから、すべてのを待つことになります 最初のロードするJavaScript、およびその後 行くとしようとサイトをこすり。 あなたはルビーに固執する場合は、 鋸山から1レベル上を行くことができます。 あなたはとカピバラを使用することができます ポルターガイストラッパー。 そして、これは実際にすることができます 本質的に同じことを行います それはWebKitのですPyQtは、のように。 それはのを待ちます JavaScriptは最初にロードします。 あなたは十分にそれを周りいじる場合は、 あなたも、それは物事をクリックして取得することができます。 だから、そのリンクがあるかどうか ここで古典的なHREFではありません パスは簡単にアクセス可能で、 それは、検出し、いくつかのJavaScriptのことです クリックは、あなたが実際にそれを行うことができます。 より人気のライブラリ ユーザをシミュレートします PhantomJSではJavaScript、です。 これは明らかに、動的こすりすることができます サイト、これは本質的であるため、 クロームのふり ユーザーインターフェースなし。 そして、もちろんほとんど 堅牢な、しかし最も遅いオプション、 セレンブラウザの自動化があります。 残念ながら、 あなたがあることを行っていません あなたのCS50のIDE内でこれを行うことができます。 基本的にどのようなので、 それはあなたのChromeをブートアップされ、 Firefoxの、どのようなブラウザ あなたが使用することを、 それは多分あなたのマウスを追跡 あなたが入力するどのような動き、 それだけでソート このプロセスを自動化します。 だから、のようなものとして開発されました ウェブサイトの自動テストツール。 しかし、多くの人が使用します ウェブサイトをこすりするセレン 彼らは、そうでなければ持っていること 難易度の多くこすります これらの他、より高速なツールのいくつかと。 だから、私は、Webスクレイピングのために持っているすべてです。 楽しむ。 聴衆:質問。 ロバートKRABEK:はい。 聴衆:ハッシュするメカニズムがあります ウェブサイトあなたは基本的にできたので、 後でそれを通過します。 ロバートKRABEK:うん。 だから私たちは私たちの中に、入れ 例えば、それらの両方のために、 私たちは、docにWebサイト全体を置きます。 だから、あなたは実際には取ることができます 変数ドキュメントとファイルに書き込みます。 私がしたかったのであれば、私ができました HTMLファイルとして書き出します、 そしてその後の代わりに使用して OpenURIとcURLの要求、 その後、私はドキュメントを開くことができ HTMLと、そのために検索します。 聴衆:しかし、あなたは保存することができます オンライン体験のソート あなたはオフラインを行いながら。 例えば。あなたがいるとき 数時間飛んで、 私は基本的にアーカイブします ウェブサイト全体。 [聞こえません] ロバートKRABEK:ええ、それはexactly--です そう、文字通りこれが何をしていますか それはすべてのものを取っているされています それは、次のURLからだろう。 我々はカールを実行したのであれば、それはです このHTMLのすべてを取って、 そしてそれを保存です 変数ドキュメントの内部。 だから、あなたは何でも行うことができます あなたは、docでやってみたいです。 あなたは、ファイルへの出力をすることができます。 聴衆:しかし、それがリンクアップしていません。 それは、動的ではありません。 それは右、再帰的ではありませんか? あなたは私が何を意味するか参照してください? 私は基本的に一種のハッシュにしようとしています 私のハードドライブ上のウェブサイト全体 私は基本的にそれを行うことができるように インターネットなしで数時間。 ロバートKRABEK:右。 私はそうhad--場合だからここで私のファイルI / Oがですか? だから、これはファイルI / Oです。だからではなく、言います このことから、私はこのcraigslist.htmlを呼び出します。 私はそれを開くと思います。 私はそれに入れドキュメントを思います。 私は、ファイルを閉じます。 そしてちょうどCS50 IDE理由 それは何だ、クラウド上にあります。 私はここに行くことができます。 私は、ファイルをダウンロードすることができます。 そしてそれは私のハードドライブになります。 だから、そのように行うことができます。 あなたが自宅にいる場合は、使用していません CS50 IDE、サブライムか何かのような、 これは、さらに簡単です これは、ローカルで使用可能なすべてのです インターネットに関連付けられていません。 聴衆:私は参照してください。 これは、1つの特定の問題のためです。 ようにするために、再帰的にそれを行うことができます いくつかの層に事の深い種類を行きますか? ロバートKRABEK:私は、フォルダをダウンロードすることができます 同様に、それはあなたが求めているものだ場合。 聴衆:うん。 ロバートKRABEK:クール。