ジモティーで、毎日3つ投稿しています。
ジモティーの投稿管理では、閲覧数があります。閲覧数で人気度がわかると思いますが、閲覧数の推移がわかりません。
そこで、データを毎日チェックしようと思いました。
ポイント
- 今回はDBは使用せず、スクレイピングのみ
- PHPのスクレイピングライブラリ
Webアプリのデモ
こちらから動作確認できます。
実際のデータを元に、3件のデータを用意しました。
こちらがデータとなります。
データのソースを表示します。クロームなら右クリックで表示できます。
すべてのソースをコピーし、ペーストします。
送信ボタンをクリックします。
残念!
エラーが表示されました。
自分のPCではエラーはでなかったのですが、ホスティングサービスの制限がいろいろあるようです。
最低限のデータに編集しました。
こちらのデータを使用します。
ソースをコピペし、送信ボタンをクリックします。
以下は、テーブルに表示するための配列を生成する部分のプログラムです。
<php
// PHP Simple HTML DOM Parser の読み込み
include("lib/scraping/simple_html_dom.php");
// URLを指定してオブジェクト化します
$src = $_POST["src"];
$html = str_get_html($src);
$trs = $html->find("tr");
$datas = array();
foreach($trs as $tr){
// 行の1行目は飛ばす
if($tr->find("td",0)->plaintext != "投稿日"){
$data = array();
$data['key'] = $tr->find("td",1)->plaintext;
$data['title'] = $tr->find("td",3)->plaintext;
$data['cnt'] = $tr->find("td",9)->plaintext;
array_push($datas, $data);
}
}
?>
ポイント
今回はDBは使用せず、スクレイピングのみ
まずは、欲しいデータだけを抽出するために、抽出方法を決定しないといけません。
いろいろと話題のスクレイピング。
最近ではPythonがもてはやされていますが、PHPでもライブラリを探すとありました。
PHPのスクレイピングライブラリ
最初は、「phpQuery」というライブラリでやってみました。
なぜか、mb_eregi() がないってエラー。php.iniで、マルチバイトは有効になっているはずなのに。。。
いろいろネットで探してみると、こちらの記事を見つけました。
「phpQuery」は、2009年以降、更新されていないけど、「PHP Simple HTML DOM Parser」は現在でも更新され続けています。
幸いにも「phpQuery」でうまくいかなくてよかったです。
検索で上位や大量に表示されても、よく吟味する必要がありますね。
というわけで、うまくスクレイピングできました!
まとめ
これでPHPでも、いろいろスクレイピングができますね!
でも、ホスティングサービスでは負荷がかかったり、制限もあるようなので、自分のPC上でやることになりそうです。
さて、DBを使って毎日チェックできるようにしよう!