PHPでHTMLをパースする。
スクレイピングをやってみる
HTML Parserを使います。
参考リンク
HTML Parser for PHP:WEB管理者の為の総合ポータルサイトBenzo
研究開発:PHP HTML-parserの使い方 - livedoor Blog(ブログ)
今回はクックパッド(COOKPAD)の「話題のレシピ」の情報を取得します。
※クックパッドの表示系が変わったら動かなくなります。(2009/08/04動作確認済)
抽出元
COOKPAD
demo
ソース(UTF-8)
<?php // ライブラリを読み込む require_once('../lib/htmlparser.inc'); // まずはソースを一括取得するURLを指定 $parser = HtmlParser_ForURL("http://cookpad.com/"); // パースを行う while ($parser->parse()) { // 指定IDのノード発見 // id=wadai-recipe-inner 且つ 開始タグである if($parser->iNodeAttributes['id'] == "wadai-recipe-inner" && $parser->iNodeType == NODE_TYPE_ELEMENT ) { $parentFounded = true; } // id=wadai-recipe-inner 且つ そのタグの終了タグである if($parser->iNodeAttributes['id'] == "wadai-recipe-inner" && $parser->iNodeType == NODE_TYPE_ENDELEMENT) { $parentFounded = false; continue; // この回のループを飛ばす。 } // 指定IDのノード以下のノードのみの処理 if( $parentFounded ){ // 日付取得 if($parser->iNodeAttributes['class'] == "hot font10") { $date = $parser->iNodeValue; } // テキスト取得 if($parser->iNodeAttributes['class'] == "recipe-title") { $text = "<a href=\"" . $parser->iNodeAttributes['href'] . "\" target=\"_blank\">" . $parser->iNodeValue . "</a>"; } // 【出力】 if($date && $text) { print $date; print $text ; // 表示内容を初期化 $date = ""; $text = ""; } } } ?>
2008/09/01 修正
【出力】のコメント部分を修正