phpでhtmlをスクレイピングしてみる

簡単にライブラリを作ってみたので使ってみたいと思います。
javascriptの感覚で...

まだまだ未完成な部分もありますが、大抵パース可能と思います。

https://github.com/masahiroike/chdocument
http://masahiroike.com/blog/php-chdocument-html-parser/

```lang:PHP

//classをロード
include chdocument.php;

//コンストラクターを作成
//第二引数は任意で文字コードの指定が出来ます。
//デフォルトでは自動判定になっています。
//stringを入力する事も可能です。その際はURLに文字列を入れてください。
$document = chdocument(URL);

//idでnodeを取得する
$ID = $document -> getElementById(ID);

//classでnodeを取得する
$CLASS0 = $document -> getElementsByClassName(CLASS) -> item(0);

//nameでnodeを取得する
$NAME0 = $document -> getElementsByName(NAME) -> item(0);

//tagでnodeを取得する
$TAG0 = $document -> getElementsByTagName(TAG) -> item(0);

//itemの数をカウントする
数 = $TAG0 -> length;

//nodeのタグ名を取得する
タグ名 = $TAG0 -> tagName;

//属性の値を取得する
値 = $TAG0 -> 属性名;

//ページ内すべてのアンカーを取得する
$content = '';
$a = $document -> getElementsByTagName('a');
for($i = 0, $count = $a -> length; $i < $count; $i++) {
 $content .= $a -> item($i) -> outerHTML;
}

//ページ内すべてのアンカーのhrefを取得する
for($i = 0, $count = $a -> length; $i < $count; $i++) {
 $content .= $a -> item($i) -> href;
}

//ページ内すべてのアンカーのinnerTextを取得する
for($i = 0, $count = $a -> length; $i < $count; $i++) {
 $content .= $a -> item($i) -> innerHTML;
}

//指定したnodeの親nodeを取得する
$li = $document -> getElementsByTagName('li');
$ul = $li -> item(0) -> parentNode;

//指定したnodeの子nodeを取得する
//※戻り値が配列なので、注意してください。
$child = $ul -> children;
$child = $ul -> children[0] -> outerHTML;

//nodeに属性を付与する
$option = $document -> getElementsByTagName('option');
$option -> item(0) -> selected = true;
$option -> item(0) -> value = 'testString';

//nodeのinnerを書き換える
$document -> getElementsByTagName('a') -> item(0) -> innerHTML = 'リンクテキスト';

//nodeのouterを書き換える
$document -> getElementsByTagName('a') -> item(0) -> outerHTML = '<p>もともとリンクです</p>';

//取得変更したページを表示
echo $document;

//classをロード
include chdocument.php;
 
//コンストラクターを作成
//第二引数は任意で文字コードの指定が出来ます。
//デフォルトでは自動判定になっています。
//stringを入力する事も可能です。その際はURLに文字列を入れてください。
$document = chdocument(URL);
 
//idでnodeを取得する
$ID = $document -> getElementById(ID);
 
//classでnodeを取得する
$CLASS0 = $document -> getElementsByClassName(CLASS) -> item(0);
 
//nameでnodeを取得する
$NAME0 = $document -> getElementsByName(NAME) -> item(0);
 
//tagでnodeを取得する
$TAG0 = $document -> getElementsByTagName(TAG) -> item(0);
 
//itemの数をカウントする
数 = $TAG0 -> length;
 
//nodeのタグ名を取得する
タグ名 = $TAG0 -> tagName;
 
//属性の値を取得する
値 = $TAG0 -> 属性名;
 
//ページ内すべてのアンカーを取得する
$content = '';
$a = $document -> getElementsByTagName('a');
for($i = 0, $count = $a -> length; $i < $count; $i++) {
 $content .= $a -> item($i) -> outerHTML;
}
 
//ページ内すべてのアンカーのhrefを取得する
for($i = 0, $count = $a -> length; $i < $count; $i++) {
 $content .= $a -> item($i) -> href;
}
 
//ページ内すべてのアンカーのinnerTextを取得する
for($i = 0, $count = $a -> length; $i < $count; $i++) {
 $content .= $a -> item($i) -> innerHTML;
}
 
//指定したnodeの親nodeを取得する
$li = $document -> getElementsByTagName('li');
$ul = $li -> item(0) -> parentNode;
 
//指定したnodeの子nodeを取得する
//※戻り値が配列なので、注意してください。
$child = $ul -> children;
$child = $ul -> children[0] -> outerHTML;
 
//nodeに属性を付与する
$option = $document -> getElementsByTagName('option');
$option -> item(0) -> selected = true;
$option -> item(0) -> value = 'testString';
 
//nodeのinnerを書き換える
$document -> getElementsByTagName('a') -> item(0) -> innerHTML = 'リンクテキスト';
 
//nodeのouterを書き換える
$document -> getElementsByTagName('a') -> item(0) -> outerHTML = '<p>もともとリンクです</p>';
 
//取得変更したページを表示
echo $document;

```