2017-12-30 43 views
0

ドキュメントパーサーの結果をエコーすることができますか、結果を表示するために最初に配列を作成する必要がありますか?とにかく、コードを実行すると何も表示されず(出力もエラーもなく)、私は両方の方法を試しました。おそらくサイトの問題かもしれませんが、私は他のいくつかを試してみて、同じ結果を得ています。PHPドキュメントパーサーの結果を表示

<?php 
$ebayquery ='halo'; 
$ebayhtml = 'https://www.ebay.com/sch/i.html_from=R40&_trksid=p2380057.m570.l1311.R6.TR12.TRC2.A0.H0.X.TRS0&_nkw=' . $ebayquery . '&_sacat=0'; 
$ebayresults = array(); 

$document = new \DOMDocument('1.0', 'UTF-8'); 
$internalErrors = libxml_use_internal_errors(true); 
$document->loadHTML($ebayhtml); 
libxml_use_internal_errors($internalErrors); 
$xpath = new DOMXpath($document); 
$links = $xpath->query('//h3[@id="lvtitle"]/a'); 

foreach($links as $a) { 
    echo $a->nodeValue; 
} 
?> 

答えて

1

コードにはいくつか問題があります。まず、loadHTML()は、ファイル名またはURIではなく、HTMLの文字列を取ります。だから最初にあなたはウェブページを読んでそれを渡す必要があります(ここではfile_get_contents()を使っています)。

第2に、XPathはid属性がlvtitleの<h3>タグを探していましたが、class属性がlvtitleのインスタンスのみが存在します。代わりにこれを使用するようにXPath式を更新しました。

$ebayquery ='halo'; 
$ebayhtml = 'https://www.ebay.com/sch/i.html_from=R40&_trksid=p2380057.m570.l1311.R6.TR12.TRC2.A0.H0.X.TRS0&_nkw=' . $ebayquery . '&_sacat=0'; 
$ebayresults = array(); 

$document = new \DOMDocument('1.0', 'UTF-8'); 
$internalErrors = libxml_use_internal_errors(true); 
$ebayhtml = file_get_contents($ebayhtml); 
$document->loadHTML($ebayhtml); 
libxml_use_internal_errors($internalErrors); 
$xpath = new DOMXpath($document); 
$links = $xpath->query('//h3[@class="lvtitle"]/a'); 
print_r($links); 
foreach($links as $a) { 
    echo $a->nodeValue.PHP_EOL; 
} 
+0

第二の問題へのソリューションが魅力のように働いている間に実行する場合、URLはウェブサイトに、再度検索クエリで取得するために1回、2回使用されているので、最初のものは、やや欠陥があります。したがって、表示される結果は、「from = R40&trksid ........」が検索ボックスに入力されているかどうかに基づいています。 – Capattax

+0

また、結果リストの前にDOMNodeListオブジェクト([length] => 48)を付けずに結果を出力するにはどうすればよいですか? – Capattax

+1

結果のページをどのように取得する必要があるのか​​よく分かりませんが、重要な部分はURIではなくページを取得した結果を渡すことです。余分な出力を削除するには、コードからprint_rを削除します。 –