>> [音楽再生]
ロバート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：クール。