[ htmlSQL ] SQL みたいな文法で HTML を抽出する PHP のライブラリ

SQL みたいな文法で HTML を抽出する [ htmlSQL ] と言う PHP のライブラリを使ってみました。

簡単な流れのサンプル

[ htmlSQL ] の簡単な流れは次の通り。

<?php

// [ htmlSQL ] のライブラリを読み込む
include_once("./snoopy.class.php");
include_once("./htmlsql.class.php");

// インスタンス化
$htsql = new htmlsql();

// 取得したい HTML を指定
// ( URL から取得する場合 [ url ] と書き、ファイルから取得する場合 [ file ] と書く )

if (!$htsql->connect('file', './test.html')){
    print 'Error while connecting: ' . $htsql->error;
    exit;
}

// SQL 文を書く
if (!$htsql->query('SELECT * FROM a ')){ // a 要素の全ての情報を取得する
    print "エラー!取得できません!" . $htsql->error;
    exit;
}

// 結果を表示する
foreach($htsql->fetch_array() as $row){
    var_dump($row);
}

?>

SQL 部分のサンプル

ダウンロードした [ htmlSQL ] に同梱されているサンプルに書いてありますが、とりあえずメモしておきます。

a 要素の全ての情報を取得する
SELECT * FROM a
class=”test” が含まれる a 要素から href 属性値を取得する
SELECT href FROM a WHERE $class=="test"
[ ../hoge/ ] から始まるリンクを抽出
SELECT * FROM a WHERE preg_match("/^\.\.\/hoge\//i", $href)

文字列に挟まれた部分を検索対象とする

// 下記の文字列に挟まれた部分を検索対象とする。
$htsql->isolate_content('<!-- start -->', '<!-- end -->');

日本語で正規表現検索する場合

日本語での正規表現が上手くマッチしないので、読み込んだデータの文字コードを自動判別して、UTF-8 に変換しておきます。

// 読み込んだデータの文字コードを自動判別して、UTF-8 に変換する。
$htsql->page = mb_convert_encoding( $htsql->page, "UTF-8", "auto" );

また、preg 系の正規表現にパターン修飾子 [ u ] を指定し、パターン文字列を UTF-8 でエンコードされた文字列として扱う。

// [ あいうえお ] から始まるリンクを抽出
SELECT * FROM a WHERE preg_match("/^あいうえお/u", $text)

分かった事

任意のリファラとユーザーエージェントを設定できる。

同じ要素が入れ子になっていると、中の要素が取得できないみたい。

<div class="hoge">
    <div class="fuga">
        あいうえお
    </div>
</div>

例えば、上のような HTML ソースに対して、

select * from div where $class == "fuga"

とやっても値が帰ってこない。

面倒だけれど、$class == “hoge” で取ってきた結果をもう一回処理するみたいな処理が必要なようです。

文法とかで参考になりそうなところ

ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。