SQL みたいな文法で HTML を抽出する [ [htmlSQL](http://www.jonasjohn.de/lab/htmlsql.htm) ] と言う PHP のライブラリを使ってみました。
簡単な流れのサンプル
———————————————————————-
[ htmlSQL ] の簡単な流れは次の通り。
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(‘‘, ‘‘);
日本語で正規表現検索する場合
———————————————————————-
日本語での正規表現が上手くマッチしないので、読み込んだデータの文字コードを自動判別して、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)
分かった事
———————————————————————-
任意のリファラとユーザーエージェントを設定できる。
同じ要素が入れ子になっていると、中の要素が取得できないみたい。
例えば、上のような HTML ソースに対して、
select * from div where $class == “fuga”
とやっても値が帰ってこない。
面倒だけれど、$class == “hoge” で取ってきた結果をもう一回処理するみたいな処理が必要なようです。
文法とかで参考になりそうなところ
———————————————————————-
– [htmlSQLでモバイルSEOを簡単にシステムツール化して管理する | 携帯サイトをつくろう。](http://www.plusmb.jp/2009/01/30/2378.html)
– [floatingdays: htmlSQLの基本的な使い方](http://fdays.blogspot.com/2008/04/htmlsql.html)
– [htmlsqlが会社ではやって?いるのかな – ニート=>(vb=>..なんて無かった)=>ネトゲ屋](http://d.hatena.ne.jp/cast_everything/20090607/1244405354)
– [htmlSQLでプロ野球速報をWebスクレイピングして携帯のフルブラウザで見られるようにする実験 [ゼロと無限の間に]](http://0-oo.net/sbox/php-tool-box/html-sql-baseball-news)
– [htmlsql: 戯言](http://abiys.cocolog-nifty.com/blog/2009/09/htmlsql.html)
ありがとうございます。