PHPスクレイピングプログラム ITかあさん

ITかあさん

WordPress×スクレイピングプログラム設置方法

ここでは、example.comというドメインと過程し、
ドメインの直下にWordPressがインストールされていることを前提にスクレイピングのプログラム設置方法を説明していきます。

プログラムを全てダウンロードし、WordPressのインストールディレクトリを同じ階層に各種プログラムを設置します

PHP Simple HTML DOM Parser
スクレイピングプログラム parthディレクトリ

初期設定

設置後、初期設定を行います。初期設定の内容は下記の項目の通り

  • DBの設定
  • simplehtml_1_5のパスを繋ぐ設定
  • スクレイピング管理画面に必要なテーブルの自動生成
  • ファイルの書き込み権限に関する設定

初期設定の項目がやや多いですが、難しいところはないと思います。
CakePHPで作られていますので、ほとんどがCakePHPのインストに関する事柄です。

DBの設定

スクレイピングプログラムにWordPressと同じDBの設定を書きます。
$testのarrayは未記入で放置でお願いします。
parth/app/config/database.php

class DATABASE_CONFIG {
 var $default = array(
  'driver' => 'mysql',
  'persistent' => false,
  'host' => 'localhost',
  'login' => 'データベースログインユーザー',
  'password' => 'パスワード',
  'database' => 'データベース名',
  'prefix' => '',
  'encoding' => 'utf8',
  );
 var $test = array(
  'driver' => 'mysql',
  'persistent' => false,
  'host' => 'localhost',
  'login' => 'user',
  'password' => 'password',
  'database' => 'test_database_name',
  'prefix' => '',
  //'encoding' => 'utf8',
  );
  }

simplehtml_1_5のパスを繋ぐ設定

parth/app/controllers/components/config.php
function files() {
//simple_html_domへのファイルパス
  $simple_html_dom ='/home/hoge/simplehtmldom_1_5/simple_html_dom.php';

//スクレイピングプログラムの設置場所 サーバーのパスではなく、URLから見た絶対パス http://example.com/wordpress/parth (これ!)
  $parth ='/parth';

$this->controller->set('parth',$parth);
return $simple_html_dom;
  }
}

初期設定は以上で完了。スクレイピングプログラムの管理画面にアクセスします。

スクレイピング管理画面に必要なテーブルの自動生成

設置したスクレイピングプログラムの管理画面トップにアクセスします。

http://example.com/parth/

すると、エラー画面になります。

テーブルが存在しないために発生するエラーなので、必要なテーブルを自動で作成するためにこちらにアクセスします。

http://example.com/parth/sqls/

すると、管理画面のトップページに移動します。

一度/parth/sqls/にアクセスすると、スクレイピングに必要なテーブル構造にWordPressのDBが変更されるのです。
無事管理画面のトップが表示されたらテーブル生成の以下のファイルは必要ないので削除しましょう。

parth/app/controllers/sqls_controller.php

もしもそれでもMissing Table の表示が出る場合は Create Tableの権限がユーザーにはないのかもしれません。
phpMyAdminから以下のSQLを順に実行していきましょう。

CREATE TABLE IF NOT EXISTS `items` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `url` varchar(255) DEFAULT NULL,
  `term_id` int(11) DEFAULT NULL,
  `tag` varchar(255) DEFAULT NULL,
  `tag2` varchar(255) DEFAULT NULL,
  `page` varchar(255) DEFAULT NULL,
  `encode` varchar(255) DEFAULT 'UTF-8',
  `full_path` varchar(255) DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  `count` int(11) DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `count` (`count`),
  KEY `term_id` (`term_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `tags` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `item_id` int(11) DEFAULT NULL,
  `tag` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

ALTER TABLE  `wp_posts` ADD  `val` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
ADD INDEX (`val`);

ALTER TABLE  `wp_posts` ADD  `item_id` INT NULL ,
ADD INDEX (  `item_id` );

ALTER IGNORE TABLE wp_posts ADD UNIQUE (
val
);

ここまでやったところで、初めて管理画面にアクセスできます。
http://example.com/parth/

ファイルの書き込み権限に関する設定

何とか管理画面にアクセスできるようにはなったものの、ファイルの書き込み権限に関するエラーが出ると思います。
(Windowsでローカル環境 例えばXAMPPなどを利用している方はファイルの書き込み権限は何もしなくて大丈夫です。)

Warning (512): /home/example.com/public_html/parth/app/tmp/cache/ is not writable [CORE/cake/libs/cache/file.php, line 281]
Warning (512): /home/example.com/public_html/parth/app/tmp/cache/persistent/ is not writable [CORE/cake/libs/cache/file.php, line 281]
Warning (512): /home/example.com/public_html/parth/app/tmp/cache/models/ is not writable [CORE/cake/libs/cache/file.php, line 281]

ファイルの書き込み権限に関するエラーが目立ちます。
ブラウザにもよりますが、文字コードの宣言よりも先に文字列があると文字化けします。
ファイルに書き込み権限を与えていく
FTPツールなどを利用して、ファイルの書き込み権限を変更していきます。

以下ディレクトリのパーミッション777

/home/example.com/public_html/parth/app/tmp/cache/
/home/example.com/public_html/parth/app/tmp/cache/persistent/
/home/example.com/public_html/parth/app/tmp/cache/models/

以下ディレクトリの中のファイルのパーミッションを666

以下はディレクトリの『中身のファイルのパーミッション』を666にして下さい。

/home/2chan.kaasan.biz/public_html/wordpress/parth/app/tmp/cache/models/
/home/2chan.kaasan.biz/public_html/wordpress/parth/app/tmp/cache/persistent/

全てのエラーが解消されたら以上でスクレイピングプログラムの設置が完了です。
次は認証の方法とPHPの実行時間の設定の変更です。

ITかあさん作PHPスクレイピングプログラムの使い方-その1

さて、ITかあさん自作のWordPressにスクレイピングしたものを記事投稿できるプログラムの詳しい使い方を解説していきます。

WordPress→スクレイピングの使い方手順

  • スクレイピングしたいURLの登録
  • スクレイピングしたい箇所をタグで指定
  • スクレイピングを実行する

基本はこの3ステップでございます。

スクレイピング可能なものとそうじゃないもの

このプログラムで可能なことは、

サイトにカテゴリーがあって、その下層(詳細ページ)をWordPressの記事データとして保存する

です。
例えばブログなどはその典型とも言える形ですが、ほとんどのポータルサイトも

検索結果があって、その下層(詳細ページ)がある

と、言えますね。(だから大抵のサイトはスクレイピングできると思います、たぶん)
URLを叩いたら表示されるものは基本スクレイピングできると考えて下さい。
ユーザー認証が必要で、URL叩いても一発で出て来ないものは逆に言うとスクレイピングできません。

それではスクレイピングしたいURLの投稿から解説していきます。

WordPressを母体としたPHPスクレイピングプログラムを公開!

子供達!母さんついにPHPスクレイピングプログラムを公開したよ!

ブログをしばらく更新をお休みして9/2の勉強会での発表に向けた準備を進めていました。

WordPressを母体としたPHPのスクレイピングプログラムを作れないものか、しかも管理画面付で誰でも楽しく!

そんなことが出来ないものかと試行錯誤して 作りましたよ!

こんだけ大掛かりなもの作って、未だ名前が決まっていません・・

これから使い方ガイドなどの記事を書いたり、活用方法をブログで公開していきます。
ベースはCakePHPで管理画面は作成しました。

URLを複数登録できるので、スクレイピングは一つのサイトからではなく、複数のサイトを組み合わせた自分だけのオリジナルのまとめサイトが作成可能です。

ちょっとしたポイント

スクレイピングデータをWordPressの記事として登録できるのはもちろんのこと、
さらに個別のデータにも対応できるよう管理画面からカスタムフィールドの登録も出来るようになっています。
なので、かなり自由度が高くスクレイピングサイトを作成できるようにしました。

スクレイピング可能なもの

原則 カテゴリーがあって、その下層に詳細ページがあるようなものはだいたい引き抜くことが出来ます。
現在画像のスクレイピングまでは対応していませんが、今後対応を考えています。

使用上の注意とお願い

重複してしまいますが、以下のことはしないようにお願いします

・このプログラムの再配布
・スクレイピングプログラムで著作権の侵害行為

スクレイピングするというこは 2次利用になるわけで、著作元に利用の確認を取る、取ることが出来ない場合は個人で楽しむ程度にして外部には公開しないなどの配慮をして下さい。

またこのプログラムを利用して発生した問題はITかあさんはいかなる責任は負いかねます。
(スクレイピングプログラムを実行したら ブログデータが壊れた!スクレイピングで著作権侵害で訴えられた など)

ルールとモラルを守って、楽しくサイトを作ってください!

ダウンロードはこちら