もじれつとがめん

プログラムの忘備録とゲームとかその他色々。

クローリングとスクレイピングしてみる

クローリングとスクレイピング

この二つは要するに、"自動で任意のwebページのDOMから必要な情報(要素)を抜き出して取得する"という事。

クローリングは自動でwebページを巡回してDOMを入手する事 スクレイピングDOMを操作して要素を取得する事

今回は定期的かつ自動的にwebページから必要な情報を取得続けたいのでこの二つを使ってbotみたいなのをつくる必要がある。

ツールについて

node.jsとかrubyとか色々あるみたいだけど、触ってないから多少読むのにも書くのにも時間がかかりそう... なので、なじみのあるphpで出来ないかなーと思ってググる

http://person-link.co.jp/web/964 http://liginc.co.jp/programmer/archives/4921

この二つのサイトが良さげでいい感じに纏められてた。

この二つは別々のphpのツールを使って実装しているので今回は Simple HTML DOM Parser を使って実装してみる事にする。

やり方

あんまり難しく無くて、手順的には

  1. phpのコードにツールのソースをインクルード
  2. 対象のurlをhtmlを読み込む関数に代入
  3. 各操作を実行するだけ

この三つの行程で大体出来るらしい。

参考になりそうなサイト達はこれ http://qiita.com/chkk525@github/items/3d3fba394514fa2c4529 http://d.hatena.ne.jp/Kshi_Kshi/20101228/1293508350

スクリプトにインクルード

あんまり説明がいらない気がするので簡単に...

[php] //ライブラリをインクルード require_once('simple_html_dom.php'); [/php]

対象のurlの読み込み

問題はココかもしれない。 というのも、欲しい情報があるページは毎日変わるので自動で毎日取得するには読み込むurlを動的に取得する手段が必要になる。

[php] $url = 'http://39mamon.com'; $html = file_get_html($url); //$htmlの中にはオブジェクトが入っている [/php]

読み込むと、代入した変数にはDOM構造のオブジェクトが入るので、あとはそれを欲しい要素を取得するだけだ。

各操作の実行

各作業については現状欲しい情報がまだどの要素に入っているのか特定してないからどれくらい時間を取られるか不明だけども、 そんなに難しいとは今のところは思えない。 単純にオブジェクトの中身をjavascriptっぽい記法で要素を切り出していくだけだから。

[php] //読み込んだhtmlの中からimgタグを取得して、そのsrcプロパティを取得する foreach($html->find(‘img’) as $element){ echo $element->src.’’; } [/php]

このようにfindで要素を指定してプロパティも指定する事で、目的の情報を取得していくらしい。 もちろん子要素を取得したり、id指定をして特定の要素を指定する事もできる。

[php] //idがcenter_dateのdivの中にあるpタグを取得する foreach ($html->find(‘div[id=center_date]’ as $div_center){ foreach($div_center->find(‘p’ as $p1){ echo $p1->plaintext; } } [/php]

これでやりたい事の大半は出来るはず。 後は必要に応じて調べて追記する予定。

 

----追記-----

2015/06/14

http://qiita.com/ka215/items/79c30e9c15ae0462f457

このサイトで他のライブラリも紹介してた。

どうやらこの二つの方が実装するには良さそう。文献も比較的新しいし。