前提・実現したいこと
WEBページのスクレイピングを勉強中です。
以前はDOMDocumentとXPathにて情報を取得していましたが、
現在は処理速度の向上、同期処理実装のためにcURLを使用したいと考えております。
発生している問題・エラーメッセージ
DOMDocumentのみを使用してページ情報を取得する操作は問題ありませんが、
cURLを使用したところ、XPathのオブジェクトを生成できません。
該当のソースコード
php
1 /*動作する*/ 2 $dom = new DOMDocument; 3 @$dom->loadHTMLFile('https://hoge.com/'); 4 $page = new DOMXPath($dom); 5 unset($dom); 6 7 $c = $page->query('//title')->item(0)->nodeValue; 8 echo $c; 9 10 11 /*動作しない*/ 12 $ch = curl_init(); 13 $timeout = 5; 14 curl_setopt($ch, CURLOPT_URL, 'https://hoge.com/'); 15 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 16 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 17 $html = curl_exec($ch); 18 19 curl_close($ch); 20 21 $dom = new DOMDocument; 22 @$dom->loadHTMLFile( $html ); 23 $page = new DOMXPath($dom); 24 25 $c = $page->query('//title')->item(0)->nodeValue; 26 echo $c; 27 //Notice: Trying to get property 'nodeValue' of non-object
試したこと
loadHTMLFile
にはhtmlエンティティを代入しなければいけないこと、
curl_exec
で返ってくる情報がテキストであることから、
mb_convert_encoding
でHTML-ENTITIES
に変換しましたが、依然状況が変わりません。
curl_exec
で取得したオブジェクトをloadHTMLFile
に適正な型に変換する方法がありましたら、ご教授いただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/17 01:15