Symfony 2.8 と DomCrawler を使用して Web サイトを解析していdata
ますが、HTML エンティティからの属性の読み取りに問題があります。属性の特定の規則と同じくらい単純かもしれませんが、data
DomCrawler を介してデータ属性を取得する方法について説明している参考文献や例をウェブ上で見つけることができませんでした。
詳細は次のとおりです。
解析中の HTML でこの構造のインスタンスに遭遇しました (別の Web サイトから取得したため、この HTML を変更することはできません)。
<div class='slideshowclass' id='slideshow'>
<div data-thumb='http://www.example.com/thumbs/1.jpg'
data-src='http://www.example.com/thumbs/1.jpg'></div>
<div data-thumb='http://www.example.com/thumbs/2.jpg'
data-src='http://www.example.com/thumbs/2.jpg'></div>
<div data-thumb='http://www.example.com/thumbs/3.jpg'
data-src='http://www.example.com/thumbs/3.jpg'></div>
<div data-thumb='http://www.example.com/thumbs/4.jpg'
data-src='http://www.example.com/thumbs/4.jpg'></div>
<div data-thumb='http://www.example.com/thumbs/5.jpg'
data-src='http://www.example.com/thumbs/5.jpg'></div>
<div data-thumb='http://www.example.com/thumbs/6.jpg'
data-src='http://www.example.com/6.jpg'></div>
</div>
このコードを使用して のブロックを検索しdiv
、値を返しdata-src
ます。
function getList( Crawler $pWebDoc ) {
$list = $pWebDoc->filter( 'div#slideshow');
if ( !$list )
return null;
$retlist = null;
$x = $list->count();
if ( $x > 0 ) {
/* @var $item Crawler */
$retlist = $list->children()->each( function (Crawler $item, $i ) {
return ( "$i:" . $item->attr( 'data-src' ));
});
}
return ( $retlist );
}
DomCrawler docs から、attr
関数がdata-src
属性値を返すことを期待していますが、null を返します。私の関数からの戻り値は、追加のテキストではなく数字だけの6つの要素の配列です。
よろしくお願いします。