人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

simple_html_domで複数URLを処理したい。

複数のURL(HTMLファイル)を配列に格納して、
find関数を使ってa要素を取り出したいのですが、
うまくいきません。

私の書いたプログラムファイルと対象となるファイルは
http://1811way.com/work008/test-sample.txt
です。

結果は、
「グーグルですYahoo!ですamazonです」
(&それぞれのトップページへリンク)
が得られればいいのですが、できません。

私の環境は
PHP5.3.8&MySQL5.5(localhostの環境でapache2.2&Windows7)

test.php を直していただけると助かります。
よろしくお願いします。


●質問者: kohhi
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● gizmo5
●50ポイント

file_get_html は、ひとつの URL や文字列を処理するようになっているので、複数の URL を処理する場合にはループで回してあげる必要があります。

http://simplehtmldom.sourceforge.net/manual_api.htm

object file_get_html ( string $filename )Creates a DOM object from a file or a URL.

ループの回し方と Aタグの内容の取り方はいろいろありますが、このような処理になると思います。

<?php
include_once('simple_html_dom.php'); 

$list = array(
'a1.html',
'a2.html',
'a3.html'
);

foreach($list as $url){
$html = file_get_html($url);

$items = $html->find('a');

foreach($items as $item){
echo $item;
}
}

?>

kohhiさんのコメント
早速お返事いただき、ありがとうございました。

2 ● ぽけっとしすてむ
●50ポイント

ソースを見ると、'$list'というURLを探しに行く感じではないでしょうか。


foreach($list as $value){
 $html = file_get_html($value); //読みに行く
 array_push($items , $html->find('a') );
 // file_get_htmlの初期化が必要であれば、ここで行う
}

foreach($items as $item){
echo $item;
}



kohhiさんのコメント
早速お返事いただきありがとうございました。

3 ● snow0214
●200ポイント ベストアンサー

回答リクエストをもらいました。

基本的にはgizmo5さんの回答と同じですが、file_get_html()を繰り返し利用するときはメモリリークが発生し、そのまま続けると「セグメンテーション違反です」「zend_mm_heap corrupted」が発生してPHPプロセスが停止してしまうので、その回避のために意図してメモリを解放する必要があります。

<?php
include_once('simple_html_dom.php'); 

$list = array(
 'a1.html',
 'a2.html',
 'a3.html'
);

foreach ($list as $url) {
 $html = file_get_html($url);
 $items = $html->find('a');
 foreach ($items as $item) {
 echo $item;
 }
 $html->clear(); //オブジェクトに含まれる全ての要素を削除
 unset($html); //オブジェクトを削除
}
?>

kohhiさんのコメント
早速お返事いただきありがとうございました。出来ました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ