※ ChatGPTを利用し、要約された質問です(原文:メソッドから値を引っ張ってこれない。)
スクレイピングでnodeValueの値を引っ張れないエラー
このQ&Aのポイント
phpのgoutteを使用してスクレイピングを行いたいが、elementオブジェクトからnodeValueの値が取得できない。
エラーメッセージにはUndefined property: Symfony\Component\DomCrawler\Crawler::$nodeValueと表示されている。
var_dumpで確認したところ、nodeValueに値が存在しているように見えているが、取得できない原因がわからない。
phpのgoutteを使用して、下記ソースを記述しました。
スクレイピング対象のHTTPアドレスの記述に間違いはありません。
※アドレスはダミーです。
ただ、elementオブジェクトから、
nodeValueの値を引っ張れないのです。
■phpソース
<?php
require_once 'goutte.phar';
use Goutte\Client;
$crawler = $client->request('GET', 'http://www.test.xml');
$crawler->filter('item')->each(function($element)
{
echo $element->nodeValue;
});
?>
■スクレイピング先ソース
<rss version="2.0">
<channel>
<item>
<title>タイトル1</title>
<category>本1</category>
<link>http://www.test.co.jp/book/book1/</link>
<description>本1について詳細を説明します。</description>
<pubDate>2015-01-09</pubDate>
</item>
<item>
:以降繰り返し
:
</iem>
</channel>
</rss>
■エラー内容
PHP Notice: Undefined property: Symfony\\Component\\DomCrawler\\Crawler::$nodeValue in /php配置ディレクトリ/Test.php
■$erementのvar_dump出力結果
object(Symfony\Component\DomCrawler\Crawler)#908 (4) {
["storage":"SplObjectStorage":private]=>
array(1) {
["000000005a6bd4e800000000d42c592e"]=>
array(2) {
["obj"]=>
object(DOMElement)#19 (18) {
["tagName"]=>
string(4) "item"
["schemaTypeInfo"]=>
NULL
["nodeName"]=>
string(4) "item"
["nodeValue"]=>
string(286) "
タイトル1
本1
http://www.test.co.jp/book/book1/
本1について詳細を説明します。
2015-01-09
"
}
["inf"]=>
NULL
}
}
nodeValueで値を拾えない原因がわからないのです。
var_dumpで確認したところ、nodeValueに値が存在しているように見えていることは確認できています。(Stringの数値286はダミーです)
requireが足りないのでしょうか。
それともアクセスの方法が間違っているのでしょうか。
ご教示よろしくお願いいたします。
お礼
情報ありがとうございます。 >array(1) { >["000000005a6bd4e800000000d42c592e"]=> >array(2) { >["obj"]=> >の部分が考慮されてないように思えます。nodeValueを持っているオブジェクトこの配列の一要素です。たとえ要>素数が 1 であっても直接アクセスが出来ませんし、 やはり、そうですか。 ループで取り出したいので、ランダム生成値の部分を抜いて アクセスできないか。確かめたかったのです。 情報ありがとうございました。