SQL のように HTML を解析できる htmlSQL
「真面目にエロサイトを作ってみた」というエントリで紹介されていた、スクレイピングに使われている htmlSQL に興味を持ったので試しに使ってみた。
jonasjohn.de: htmlSQL – a PHP class to query the web by an SQL like language
準備
上記サイトよりダウンロードして解凍した中に入っている “snoopy.class.php” と “htmlsql.class.php” という2つのファイルを使用する PHP からインクルードできるところに入れます。
使い方
実際に Yahoo! のトップページからヤフーニュースのトピックスのニュースタイトルを取ってくるコードを書いてみました。
コードを見てもらえば分かるようにまさに SQL を発行している感じです。
include_once("snoopy.class.php"); include_once("htmlsql.class.php"); $wsql = new htmlsql(); // Yahoo はブラウザに UA によって HTML が変わるので UA を偽装 $wsql->set_user_agent('Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'); // URL で接続 if (!$wsql->connect('url', 'http://www.yahoo.co.jp/')){ print 'Error while connecting: ' . $wsql->error; exit; } // SELECT する範囲を指定して、その範囲の a タグのテキスト取得する $wsql->isolate_content('
- ', '
ダウンロードした中にサンプルコードも載っていますので、サンプルを眺めればやりたい事はだいたいできるかと思います。
以下のようなことができます。
全ての h1 タグの内容を取得
SELECT * FROM h1
全ての a タグの内容を取得
SELECT * FROM a
全ての a タグの href とテキストを取得
SELECT href as url, text FROM a
http:// から始まるリンクの a タグの内容を取得
SELECT * FROM a WHERE preg_match(“/^http:?/?//”, $href)
id = ‘header’ のタグの内容を取得
SELECT * FROM * WHERE $id == “header”
“/” から始まるリンクの a タグの内容を取得
SELECT * FROM a WHERE substr($href,0,1) != “/”
class=”nav_item” のタグの内容を取得
SELECT * FROM * WHERE $class == “nav_item”
AND OR などで条件を指定することも可能
SELECT * FROM a WHERE ($href == “foo.htm” and $title == “foo”) or ($title == “bar”)
関連する投稿
3 comments
コメントをどうぞ
Additional comments powered by BackType
[...] SQL のように HTML を解析できる htmlSQL | Sun Limited Mt. (tags: html) [...]
[...] SQL のように HTML を解析できる htmlSQL | Sun Limited Mt. [...]
HTMLをSQLのように取り扱えるライブラリ。http://www.syuhari.jp/blog/archives/1987 snoopyクラスの方がUTF-7で読み込んでShift_JISとかで保存しなおさないと文字化けしているっぽい。
This comment was originally posted on Twitter