SlideShare ist ein Scribd-Unternehmen logo
1 von 20
RawlerC#用のWebスクレイピングフレームワーク Twitter:@kiichi54321
Webスクレイピング Webスクレイピングとは、HTMLの部分抽出すること。 最近は、CSSが普及して、デザインのロジックが明確化したので、やりやすい。 ライブラリーが探すと結構見つかる。 PHP,Rubyあたりはよく見つかる。 結局似たようなことをやるので、単純なんだけど面倒。 ログイン処理、ページの読み込み、取る場所の指定、繰り返し処理などなど。 単純なことの組み合わせである。 ごちゃごちゃしてくるとやっていることの構造が見えなくなる。 当然だけど、ライブラリーを使うためには、プログラミングの知識が必要となる。 Webのここのデータがほしいのだけど・・と思っても敷居が高い。
Rawler そんなわけで、Webスクレイピングツール?を作ってみた。(車輪の再発明臭が漂うけど・・) ツールというより、ライブラリーとかフレームワークに近い。 C#用。でも使うことだけなら、C#の知識はそれほど必要ない。 XAMLを使って記述する。 初めはGUIでやれることを考えていたけど、諦めた。XAMLが優秀すぎる。 ここで公開 http://web.sfc.keio.ac.jp/~kiichi/wiki/index.php?Rawler
XAML(Extensible Application Markup Language) XAMLとは、MSの開発した、多数のオブジェクトの状態と関係をテキストで記述するためのXMLみたいなもの。 主に、UIのデザインで使われる。(WPF、 Silverlightなど) 複数のオブジェクトの記述をコピペできるのが強み。 親子関係の入れ替えとか、コードとして書くとすごく面倒。それがコピペで済むなんて。 C#4.0からSystem.XAML空間が追加され、UIだけのものでもなくなった。(はず) そんなに使われていない?オブジェクトの状態保存には便利。 Webスクレイピングは動作の組み合わせなので、XAMLとの相性はいい。 Visual Studioは優秀なXAML編集ソフトである。インテリセンスも使える。 そのため、このフレームワークには、Visual Studioが必要。優秀なXAML編集コントロールがあれば、不要になるのだけど… また、 Visual Studioでは、単純なXAMLだけでなく、コードビハインドとしてコードも書けるので拡張性がよすぎる。 コピペ以上の優秀なUIを用意することが面倒だったので、XAMLの記述で満足しちゃった。
インストールと手順 必要なもの:Visual Studio2010以降 C:sersユーザ名)ocumentsisual Studio 2010emplatestemTemplates に、Zip圧縮ファイル内のZipファイルを移動 そうするとテンプレートに追加される。 手順 Visual Studioで新しくプロジェクト(WPF)を作り、Rawler.dllを参照に追加。 RawlerControlを画面に張る。 RawlerTreeを構築 デバック開始(F5) 作ったRawlerTreeを選択。Runボタンを押す。 待つ DataViewでデータの中身を見ることができ、TSVで出力でファイル書きだし。
RawlerTreeの構築の仕方 ブランドの一覧ページからブランドを取ってくる例。 基本が詰まっている。
基本設計 Rawlerクラス(ここで使われているタグはすべてRawlerクラスです)は、一つの親と多数の子を持つクラスです。 タグで括られているところは、子クラスに相当します また、親のTextを参照し、クラス内で特定の処理をして、自クラスのTextを作ります。 そのため、親から子、子から孫へとTextの処理を進めていきます。 子を多数持てるため、一つのテキストソースから複数の処理をすることが可能です。(処理する順番は登録した順番です。) リンクなど複数のテキストを抽出した時(IsMulti)、子をコピーして、それぞれのテキストに対して処理を行います。
ページの取得 WebClientクラスでWebClientの文字コードを指定します。WebClientは省略可能で省略時、UTF8以外の日本語文字コードを自動的に判別してくれます。 Pageクラスでページの取得をします。指定している場合は、そのアドレスを取得。指定していない場合は親のテキストをURLとしてページの取得を行います。ページ取得時には先祖のWebClientを使います。 NextPageクラスで直近の先祖のPageクラスにページ取得の命令を出します。 Linkクラスを使い適切なNextPageを指定してください。それによってNextPage処理ができます。 WebClient の代わりにLoginClientを使うとログインが必要なサイトでも取得可能です。
Webページの解析 ページの規則性を発見して、それに合わせて作っていく。 主な解析用のクラス ClipText 指定した文字列で挟まれた文字列を取得し子に送ります。IsMulti指定で複数可能。 TagExtraction 指定したタグで囲っている文字列を取得し子に送ります。IsMulti指定で複数可能。Filterでほしい要素を限定することができます。 Link <a></a> で挟まれたリンクを取得し子に送ります。IsMulti指定で複数可能。Filterでほしい要素を限定することができます。子に送る文字列をVisbleTypeで指定します。
他の解析用クラス ImageLink <img> タグを取得し子に送ります。IsMulti指定で複数可能。Filterでほしい要素を限定することができます。子に送る文字列をVisbleTypeで指定します。 Contains 指定した文字列を含んでいる時、親文字列を子に送ります。ResultプロパティをFalseに指定したとき、「指定した文字列を含んでいない時」になります。 実質IF文です。条件分岐に使ってください。 Replace 親の文字列に対して、置換処理をします。 Trim 親の文字列の前後の空白を除去します。DoChopReturnCodeプロパティをTrue時に、改行コードも除去します。 RegularExpressions 正規表現で抽出します。Pattern に正規表現を、GroupNum に抽出するグループ番号を入れる。デフォルトは0。 TagClear <>で囲まれたタグをすべて削除します。また文字参照(<など)も置換します。
データの取得と蓄積 Dataクラスに取得したデータは蓄積されます。そのため、Dataクラスは上流に配置してください。 DataWriteクラスは、親のTextを一番近いDataクラスに指定した属性付きで書き込みに行きます。同じ属性に対して何度もデータを追加することができます(リストです。上書きしません)。 NextDataRowクラスで次の行に進みます。 Dataクラスの Commitedイベントを追加することで、NextDataRowを呼び出した時のDataRowを取得できます。データベースへの登録時に活用してください。 Dataクラスは複数配置することが可能です。
その他の便利クラス Document ただの文字列を親にするときに使うクラスです。処理はしません。 使い道的には、親の文字列とは違うものを使いたいとき使うといいでしょう。Contain-Document-DataWrite の流れで指定の文字列が含まれていた時の書き込む文字列の指定など。 内部的には複数文字列処理をするときの親クラスです。 Iterator 複数の文字列を親にするときに使うクラスです。Textsプロパティに扱いたい複数の文字列を入れてください。 使い道的には、例えば複数のURLから取得したい時などに使うといいでしょう。 Report ReportManageクラスにレポートを送ります。挙動チェックなどに使います。 Sleep 挙動を一時的に止めます。デフォルト値では3秒止めます。連続アクセスで止まるサイト対策です。
リンク先のページを読み込む ウェブサイトの連続読み込みができる。 この場合、Page->Link->Pageの入れ子を作ることで、複数のページに飛ぶことを表現している。 この場合具体的には、wikipediaの英語ページ->日本語ページに飛んでいる。
繰り返し処理 Iteratorを使った事例 すごく多い場合は、プログラムからテキストを追加した方がいいと思う。 リンクのVisbleTypeをTagとすることで、そのタグの中のパラメータを取得する。 ちょっと変則手法。この形式に合わせるために無理やり。
ログインが必要となるページ ログインが必要なサイトの場合、上位にLoginClientを使い、こういう風に書く。それ以外は同じ。パラメータに関しては、HTMLのFORMタグの内容を解読してください。
PreTreeを使って入れ子の削減 いろいろ作っていくと、入れ子がすごいことになって、全体の見通しが悪くなる。 必要だけど、本質的ではない入れ子は邪魔だ。 PreTreeはどのオブジェクトにもあるプロパティで、そのオブジェクトの動作をする前に行う処理を同様に記述する。 一番末尾の結果を元にその処理をする。 折りたためるため、折りたたむとすっきりする。 注意点:PreTree内では「IsMulti= true」は意味をなしません。 折りたためるのですっきり 階層の深いツリー 上の階層をPreTreeに入れる
DataWriteでのPreTreeとAttributeTreeの使用例 DataWrite.AttributeTreeは、Attributeの文字列を作るためのTreeです。 DataWrite.AttributeTreeはPreTreeの影響を受けません。 Attributeが変動するときに使います。 対象のHTMLソース <table>   <tr>     <th>名前</th>     <td>*****</td>   </tr>   <tr>     <th>出身地</th>     <td>*****</td>   </tr> </table>
データベースを使う ,[object Object]
Stock はデータを蓄積するか?ということ。通常はTrue。データベースに書き込むなら蓄積は必要としないので、Flase.
CommitedイベントはNextDataRowを呼ばれた時、発動する。

Weitere ähnliche Inhalte

Was ist angesagt?

DB tech showcase: 噂のMongoDBその用途は?
DB tech showcase: 噂のMongoDBその用途は?DB tech showcase: 噂のMongoDBその用途は?
DB tech showcase: 噂のMongoDBその用途は?
Hiroaki Kubota
 
Orf2013バックツール
Orf2013バックツールOrf2013バックツール
Orf2013バックツール
Takaichi Ito
 
Mongo dbを知ろう
Mongo dbを知ろうMongo dbを知ろう
Mongo dbを知ろう
CROOZ, inc.
 

Was ist angesagt? (14)

RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
 
45分で理解する webクローリング入門 斉藤之雄
45分で理解する webクローリング入門 斉藤之雄45分で理解する webクローリング入門 斉藤之雄
45分で理解する webクローリング入門 斉藤之雄
 
MongoDB World 2014に行ってきた!
MongoDB World 2014に行ってきた!MongoDB World 2014に行ってきた!
MongoDB World 2014に行ってきた!
 
がっつりMongoDB事例紹介
がっつりMongoDB事例紹介がっつりMongoDB事例紹介
がっつりMongoDB事例紹介
 
MongoDBざっくり解説
MongoDBざっくり解説MongoDBざっくり解説
MongoDBざっくり解説
 
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
 
DB tech showcase: 噂のMongoDBその用途は?
DB tech showcase: 噂のMongoDBその用途は?DB tech showcase: 噂のMongoDBその用途は?
DB tech showcase: 噂のMongoDBその用途は?
 
実践スクレイピング
実践スクレイピング実践スクレイピング
実践スクレイピング
 
Orf2013バックツール
Orf2013バックツールOrf2013バックツール
Orf2013バックツール
 
MongoDB
MongoDBMongoDB
MongoDB
 
初めてのMongo db
初めてのMongo db初めてのMongo db
初めてのMongo db
 
Post by email for pulse cms
Post by email for pulse cmsPost by email for pulse cms
Post by email for pulse cms
 
HTTPと Webクローリングについて
HTTPと WebクローリングについてHTTPと Webクローリングについて
HTTPと Webクローリングについて
 
Mongo dbを知ろう
Mongo dbを知ろうMongo dbを知ろう
Mongo dbを知ろう
 

Ähnlich wie Rawler C#用のWebスクレイピングフレームワーク

プログラマがデザインをがんばってみた
プログラマがデザインをがんばってみたプログラマがデザインをがんばってみた
プログラマがデザインをがんばってみた
だいすけ ふるかわ
 
20110305_Code4Lib2011参加報告会:田辺浩介参加報告
20110305_Code4Lib2011参加報告会:田辺浩介参加報告20110305_Code4Lib2011参加報告会:田辺浩介参加報告
20110305_Code4Lib2011参加報告会:田辺浩介参加報告
Code4Lib JAPAN
 
カフェのWEBサイトを作って、WEBデザインの基礎と技術を学ぶ
カフェのWEBサイトを作って、WEBデザインの基礎と技術を学ぶカフェのWEBサイトを作って、WEBデザインの基礎と技術を学ぶ
カフェのWEBサイトを作って、WEBデザインの基礎と技術を学ぶ
webcampusschoo
 
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
Nobukazu Hanada
 

Ähnlich wie Rawler C#用のWebスクレイピングフレームワーク (20)

WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?
 
プログラマがデザインをがんばってみた
プログラマがデザインをがんばってみたプログラマがデザインをがんばってみた
プログラマがデザインをがんばってみた
 
鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料
 
「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方
 
PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門
 
「現場のプロが教えるWebデザイン新・スタンダードテクニック37」に載っているテクニックでLP作ってみた話
「現場のプロが教えるWebデザイン新・スタンダードテクニック37」に載っているテクニックでLP作ってみた話「現場のプロが教えるWebデザイン新・スタンダードテクニック37」に載っているテクニックでLP作ってみた話
「現場のプロが教えるWebデザイン新・スタンダードテクニック37」に載っているテクニックでLP作ってみた話
 
Web技術勉強会第1回目
Web技術勉強会第1回目Web技術勉強会第1回目
Web技術勉強会第1回目
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
 
serverless
serverlessserverless
serverless
 
実はとても面白い...Documentation library
実はとても面白い...Documentation library実はとても面白い...Documentation library
実はとても面白い...Documentation library
 
Tech fun rails_workshop
Tech fun rails_workshopTech fun rails_workshop
Tech fun rails_workshop
 
7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminar7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminar
 
サーバーレスでアンケートフォームを作ってみた
サーバーレスでアンケートフォームを作ってみたサーバーレスでアンケートフォームを作ってみた
サーバーレスでアンケートフォームを作ってみた
 
20110305_Code4Lib2011参加報告会:田辺浩介参加報告
20110305_Code4Lib2011参加報告会:田辺浩介参加報告20110305_Code4Lib2011参加報告会:田辺浩介参加報告
20110305_Code4Lib2011参加報告会:田辺浩介参加報告
 
Crawler Commons
Crawler CommonsCrawler Commons
Crawler Commons
 
カフェのWEBサイトを作って、WEBデザインの基礎と技術を学ぶ
カフェのWEBサイトを作って、WEBデザインの基礎と技術を学ぶカフェのWEBサイトを作って、WEBデザインの基礎と技術を学ぶ
カフェのWEBサイトを作って、WEBデザインの基礎と技術を学ぶ
 
Tableauのつまづきポイント
TableauのつまづきポイントTableauのつまづきポイント
Tableauのつまづきポイント
 
カフェのWEBサイトを作って、WEBデザインの基礎と技術を学ぶ
カフェのWEBサイトを作って、WEBデザインの基礎と技術を学ぶカフェのWEBサイトを作って、WEBデザインの基礎と技術を学ぶ
カフェのWEBサイトを作って、WEBデザインの基礎と技術を学ぶ
 
カフェのWEBサイトを作って、WEBデザインの基礎と技術を学ぶ
カフェのWEBサイトを作って、WEBデザインの基礎と技術を学ぶカフェのWEBサイトを作って、WEBデザインの基礎と技術を学ぶ
カフェのWEBサイトを作って、WEBデザインの基礎と技術を学ぶ
 
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
 

Rawler C#用のWebスクレイピングフレームワーク