dポイントプレゼントキャンペーン実施中!

phpのgoutteでスクレイピングし、作成したい表があります。

下記の構造で、テーブルが作られています。

■タグ
<table>
<tr><td><a href="URLアドレス" target="_blank" >文字列1</a></td></tr>
<tr><td>文字列2</td></tr>
<tr><td><a href="URLアドレス" target="_blank" >文字列1</a></td></tr>
</table>

上記タグ内容をスクレイピングし、下記のような表を作りたいのです。
ただし、URLアドレス(aタグ)がない場合は、記述しない。

■作成したい表
文字列1,URLアドレス
文字列2,
文字列3,URLアドレス

と表にしてスクレイピングかけたいのですが、
$crawler->filter('table td')->each(function($element) {
 $element->text().",";
 $element->filter('a')->attr('href').","; 
});

と記述すると、a要素がない文字列2の部分で、戻り値がないためエラーになってしまします。

■表示結果
文字列1,URLアドレス
文字列2,▲
三角の部分で、戻り値がないためエラーになってるようです。

空判定を入れてみればいいかと思いやってみたのですが、同じ結果になりダメでした。
※empty()も試してみました。

■ソースコード抜粋
$crawler->filter('table td')->each(function($element) {
 $element->text().","; 
 $judge=$element->filter('a');
 
 if($judge===FALSE){
  echo "タイトルにアンカーが未設定で、戻り値が空のためスキップ。<br>";
 }else{
  echo $element->filter('a')->attr('href').",";
 }; 
});


作成したい表のようにスクレイピングするには、どのようにソースを書き直せばいけるでしょうか?
ご教示お願いします。

A 回答 (1件)

if(count($element->filter('a'))>0){・・・



的な処理が必要?
    • good
    • 0
この回答へのお礼

ありがとうございます。
教えていただいたコードで問題なく動きました。

お礼日時:2015/09/23 17:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!