この記事の概要
KNIME(ナイム)でスクレイピングをする方法を解説。
Webpage Retriever(ウェブページリトライバー)とXpath(エックスパス)を
用いたスクレイピング方法を解説。
「KNIME(ナイム)って何?」というかたはこちらをクリック!
そのほかのスクレイピング方法についてはこちらをクリック!
KNIME(ナイム)って何?という方は?
KNIME(ナイム)の基本的な説明については下記の記事をご覧ください。
本ページはKnimeの使い方やできること、などについて説明しています。Knimeはエクセルと同じように表計算ができる無償ソフトウェア エクセルと違ってVBA記述など不要でマクロをどうさせることが来ます。 ワークフローと呼ばれるカラフルな四角いマークと矢印をつなぐことで動かす
スクレイピングとは?
目次[非表示]
スクレイピングって?
と思う方が多いかもしれませんが
スクレイピングは「抽出」することを指します。
抽出とはすなわち必要な情報を抜き出すということですね。
スクレイピングを行う人またはプログラムを「スクレイパー」と言います。
スクレイピングとよく似た言葉として
クローリングというのがあります。
クローリングの意味は「巡回」です。
クローリングを行う人またはプログラムを「クローラー」と言います。
つまりスクレイピングは何か?というとざっくり言うと
「複数のwebページに自動でアクセスし必要な情報を集めること」です。
Webページの複数閲覧を自動化できるといったところが分かりやすいでしょうか?
スクレイピングって何に使うの?
スクレイピングの用途としては様々なウェブページをめぐって情報を集めることです。
データ収集などに役立てられており、Yahoo!やGoogleなどの検索エンジンでも利用されています。
スクレイピングを行う際の注意事項
スクレイピングやクローリングはやり方を間違えるとサーバーに過度の負荷を与えてしまう場合や、著作権侵害、利用規約違反に反する可能性があるので注意が必要です。
スクレイピングやクローリングにより損害が発生した場合でも、当ブログでは責任を一切負いません。
詳細は下記ページに詳しく書いてあるのでご確認ください。
Knimeでスクレイピングを行う方法
Webpage RetrieverとXpathのノードを組み合わせて使います。
必要な情報を抜き出すのにColumn splitter(filter)もあったほうが良いと思います。ワークフローは下記のような接続になります。
前回の記事でWebpage Retrieverについて解説しました。
詳細は下記のページからご参照ください。
Knimeでスクレイピング(クローリング)する方法を解説しているページです。まずはWebpage Retrieverの設定方法を主に解説しております。FANTOM-06が発売。スクレイピングやクローリングはやり方を間違えるとサーバーに過度の負荷を与えてしまう場合や、著作権侵害、利用規約違反に反する
XPathノードの使い方
XPathノードはWebpage Retrieverで出力されたXMLを分解して抽出するノードです。
それではConfigure画面から見ていきましょう
XML column :
抽出元となるXML情報をもつ列の指定です。
データ形式がXMLの列でないと選択できません。
XML Cell Preview :
読み込んだXMLのプレビューです。
この画面から対応するXMLパスを選択して「Add XPath」ボタンを押すと
パスが入力された状態でAdd XPathの設定を開くことができます。
ためしにプレビュー画面内の青字(Titleなど)を選択してAdd Xpathボタンを押すと分かりやすいです。
しかしこのプレビューからパスを指定するのはなかなか不便なので
Chromeを使ってXMLのパスを指定する方法を後述します。
Add XPath:
Add XPathボタンを押すと下記のようにウィンドウが開かれます。
New column name:
抽出したデータのカラム名称を入力できます。
XPath value query:
抽出するデータのパスを指定します。
パスの指定方法はChromeを使う方法を後述します。
XPath data type:
抽出するデータの型を決定します。
特に数字を扱う必要がなければ【String cell】で問題ないと思います。
Multiple tag opitions:
抽出するデータをどのような形式で出力するか選択できます。
- Single Cell
一つのパスに対して1つのデータが1つのセルに出力されます。
パスに該当するデータが複数あった場合でも出力されるのは先頭のデータ1つのみです。
- Collection Cell
1つのパスに対して複数のデータが1つのセルにまとめて出力されます。
パスに該当するデータが複数あった場合はすべて出力されます。
- Multiple Columns
1つのパスに対して複数のデータが1行に出力されます。
データは1セルに対して1つです。
行方向(横方向)に出力されます。
パスに該当するデータが複数あった場合はすべて出力されます。
- Multiple Rows
1つのパスに対して複数のデータが1行に出力されます。
データは1セルに対して1つです。
列方向(縦方向)に出力されます。
パスに該当するデータが複数あった場合はすべて出力されます。
実際にスクレイピングしてみる(XML出力)
ノードの説明だけだと分かりにくいので実際にスクレイピングをしてみます。
まず下記のようにノードをワークフロー画面に配置します。
スクレイピングするのはGoogle検索で「Knimeでひねくれデータ解析」と検索した時の検索結果ページです。
出てきたー検索結果のページ名称とページのURLを抽出し一覧表にまとめようと思います。
404件検索結果がありますが今回は最初の1ページだけ出力にします。
(自分のブログがサイト上位に表示されていない…
悲しい…泣)
悲しい…泣)
まずGoogleの検索結果のURLを確認すると下のようなURLになっていると思います。
https://www.google.co.jp/search?q=Knimeでひねくれデータ解析
もしくは
https://www.google.co.jp/search?q=Knime%E3%81%A7%E3%81%B2%E3%81%AD%E3%81%8F%E3%82%8C%E3%83%87%E3%83%BC%E3%82%BF%E8%A7%A3%E6%9E%90
Googleの検索結果は「https://www.google.co.jp/search?q=”検索ワード”」で表せるので
このURLをスクレイピング先のURLとしてWebpage Rtrieverに入力します。
Delay Timeを2000ms以上
Currencyを1
Replace relative URLs with absolute URLsにチェックを入れるのを忘れないようにしましょう。
するとExecuteされ、XMLが出力されます。
こんな感じでXMLが出力されます。
まずサイト名称です。
Chromeで「https://www.google.co.jp/search?q=Knimeでひねくれデータ解析」にアクセスします。
Chromeの右上の…をクリックし、「その他のツール」→「デベロッパーツール」を開きます。
かなりごちゃついていますが慌てずに。
右上のウィンドウの矢印アイコン(下の画像でいうところの赤丸)を一回クリックして
一番上のサイトをクリックします。
今回で言うとにほんブログ村さんのサイトをクリックになります。
変わったかと思います。
右上のウィンドウのハイライト表示されている箇所を右クリックし
Copy→Copy XPathを選択します。
勘が良い方は分かったと思いますが右上のウィンドウは表示しているサイトのXMLで
矢印アイコンはウェブ上のクリックした個所のXMLを左上のウィンドウで表示してくれる
ツールなわけです。
適当なテキストエディタにペースとしてみるとコピーしたパスが分かります。
//*[@id="rso"]/div[1]/div/div[1]/div/a/h3
と表示されます。
XMLの詳しい説明は省きますがこれがサイト名称のパスになります。
実際にスクレイピングしてみる(XPathを設定)
このまま貼り付けてもなぜかKnimeではうまくデータを抽出してくれないので
//*[@id="rso"]/div[1]/div/div[1]/div/a/h3
↓
//div[1]/div/div[1]/div/a/h3
のように修正します。赤字の部分を削除です。
(多分ブラウザが異なると出力されるXMLも変わるっぽい?)
Knimeの画面に戻って
XPathノードのConfigureを開きAdd XPathを開きます。
XPath value query:
に編集したパスをペーストします。
Column Nameは「サイト名称」とかにしておきます。
Mupliple tag optionは「Multiple Rows」を選択します。
Ctrlキーを押しながらOKで[Execute-OK]になります。
XPathを右クリックして一番下のOutput Tableを選択します。
これでサイト名の抽出はできました。
もう一度Add Xpathをクリックし新しいパスを入力します。
先ほどのXPathペーストして再度編集します。
//div[1]/div/div[1]/div/a/h3
↓
//div[1]/div/div[1]/div/a/h3/../@href
赤字の部分を追記してください。
ちなみにXPathの指定方法での属性、テキストの取得方法について
下記のページで詳しく解説しております。
スクレイピングにおけるXPathの使い方を初心者向けに解説した記事です。XPathとは、基本的な書き方、id・classなど様々な属性やテキストの取得方法、contains関数の使い方など要点を全て解説しています。
下図のような設定になると思います。
この状態でCtrl+OKでExecuteします。
今更ですがRemove source columnにチェックを入れると入力されるXMLを
出力データから自動で取り除いてくれます。
つまりこのあと使うColumn Splitterが不要になります。
実際にスクレイピングしてみる(Column Splitterを設定)
ここまでくればあとはColumn Splitterで余計な列を取り除くだけです。
「Document」の列を取り除きます。
Column SplitterのConfigureを開き下図のような設定にします。
Coumn Splitter を右クリックして「Splitted table, Top partition」をクリックします。
検索結果が一覧表で表示されました!
Splitted table, Top partitionで全体を選択してCtrl+Cでコピーできますので
それをエクセルに貼り付けるも良し。
抽出したデータを自由に使えます。
ふぅーっ。ちょっと大変だったけどスクレイピングできたぞ!
お疲れ様!
スクレイピングはサイトによってXPathを変える必要があるよ。
サイトに合わせてXPathを編集してね。
スクレイピングはサイトによってXPathを変える必要があるよ。
サイトに合わせてXPathを編集してね。
あとがき
いかがでしたでしょうか?
スクレイピングはウェブサイトのデータを効率的に収集する良い方法なので
ぜひ実践できるようにKNIMEの使い方をマスターしましょう。
それでは!
0 件のコメント:
コメントを投稿
ここにコメントを書いてね!