前提・実現したいこと
下記ニュースサイトから最新20件のニュースのタイトル・投稿時間・詳細URLへのリンク・タグを取得する。
https://www3.nhk.or.jp/news/catnew.html
発生している問題・エラーメッセージ
phamtomjsでjavascript実行後のhtmlを読み込み、phpQueryでスクレイピングを行いたいのですが、
読み込んだhtmlから欲しい情報だけを指定してテキスト化しようとするとエラーがでます。
ターミナルで php php.index を実行すると下記エラーが発生します。
Fatal error: Uncaught Error: Call to a member function query() on null in /Users/sh/myapps/basic_php_v3-master/work/phpQuery-onefile.php:1764 Stack trace: #0 /Users/sh/myapps/basic_php_v3-master/work/phpQuery-onefile.php(1893): phpQueryObject->runQuery('//body//*[@id='...', '.content--list', 'matchClasses') #1 /Users/sh/myapps/basic_php_v3-master/work/index.php(32): phpQueryObject->find('body #content ....') #2 {main} thrown in /Users/sh/myapps/basic_php_v3-master/work/phpQuery-onefile.php on line 1764
該当のソースコード
<?php require_once("phpQuery-onefile.php"); require 'vendor/autoload.php'; use JonnyW\PhantomJs\Client; use JonnyW\PhantomJs\DependencyInjection\ServiceContainer; $client = Client::getInstance(); $request = $client->getMessageFactory()->createRequest(); $response = $client->getMessageFactory()->createResponse(); $url = 'https://www3.nhk.or.jp/news/catnew.html'; $request->setUrl($url); $client->send($request,$response); $htmlstr = $response->getContent(); $dom = new DOMDocument; @$dom->loadHTML($htmlstr); $dom->saveHTML(); $doc = phpQuery::newDocument($dom); echo $doc->find("body #content .content--list li dl dd a em")->text(); ?>
最後の一行を下のように変更すると、ニュースのタイトルや投稿時間を含むhtml全体がテキスト化されたものが出力されます。
echo $doc->text();
試したこと
findの()内の条件をいろいろ変えて試してみましたが、全て同じエラーがでました。
補足情報(FW/ツールのバージョンなど)
PHP 7.3.11
phpQuery 0.9.5
回答1件
あなたの回答
tips
プレビュー