質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1567閲覧

[php]simple_html_domパーサーのスクレイピングについて

valk

総合スコア12

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/06/21 12:11

編集2016/06/21 15:13

###前提・実現したいこと
以下の様な入れ子構造のhtmlで、foo0とfoo1を取得したい場合ですが、simple_html_domでは前方一致での属性指定が可能ということなので、1つ目のループで前方一致のuid○を処理し、2つ目のループでdivの1つ目を処理しようとしたのですが、期待通りに動いていません。

###スクレイピング対象のHTMLコード

html

1<div id="uid0"> 2 <div>foo0</div> 3 <div>bar0</div> 4</div> 5<div id="uid1"> 6 <div>foo1</div> 7 <div>bar1</div> 8</div>

###該当のソースコード

php

1<? 2 3require_once("simple_html_dom.php"); 4 5$src = " 6 <div id=\"uid0\"> 7 <div>foo</div> 8 <div>bar</div> 9 </div> 10 <div id=\"uid1\"> 11 <div>foo</div> 12 <div>bar</div> 13 </div> 14"; 15 16$html = str_get_html($src); 17 18foreach($html->find("div[id^=uid]") as $element){ 19 foreach($element->find("div",0) as $element2){ 20 print $element2."\n"; 21 } 22} 23 24?>

上記、正常に取得するにはどのようにループ処理を行うべきでしょうか?

ギークな皆さんのご回答お待ちしています。
よろしくお願い致します!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

これだと2度目の検索条件で、親のdivが検索に引っかかってしまいますね。

foreach($html->find("div[id^=uid]") as $element){ foreach($element->find("div",0) as $element2){ print $element2."\n"; } }
そうならないためには、二度目の検索条件で要素の内側だけ検索してあげるようにしないとダメなようです。 foreach($html->find("div[id^=uid]") as $element){ foreach($element->find("div",0) -> innertext as $element2){ print $element2."\n"; } }

これで、どう動きますか?

投稿2016/06/22 03:27

編集2016/07/01 09:29
FKM

総合スコア3633

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

valk

2016/06/22 04:05

ありがとうございます! 内側だけ検索出来るようになって解決できました!流石です!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問