2017-09-13 20 views
1

私はGoogle Playページからデータを取得するためにDomCrawlerを使用していますが、特定のdivが見つからないページを見つけた以外は、99%のケースで動作します。私はHTMLコードをチェックし、それは間違いなくそこにある。私は、特定のページには、私は、しかしsymfonyのDomCrawlerが特定のタグを見つけられない

PHP Fatal error: Uncaught InvalidArgumentException: The current node list is empty.を取得し、私は他のIDを使用している場合、私は望ましい結果を得ることを実行すると、私のコードは

$autoloader = require __DIR__.'\vendor\autoload.php'; 
use Symfony\Component\DomCrawler\Crawler; 

$app_id = 'com.balintinfotech.sinhalesekeyboardfree'; 

$response = file_get_contents('https://play.google.com/store/apps/details?id='.$app_id); 
$crawler = new Crawler($response); 
echo $crawler->filter('div[itemprop="datePublished"]')->text(); 

です。 DomCrawlerを破るそのページについて正確に何か

+0

これはこの1ページでのみ発生しますか?私はそれを働かせることができました: '14 de marzo de 2017'(あなたのコードをコピー/ペーストするだけで) – ishegg

+0

@isheggこのページの上に。私はあなたがスペイン語であなたの結果を得ているのを見ます、これは英語のページにのみ影響します。 –

+0

@ishegg URL「https://play.google.com/store/apps/details?id = com.balintinfotech.sinhalesekeyboardfree&hl = ja」を使用してみることができます –

答えて

1

正しく分かっているように、これは英語版では起こりませんが、スペイン語版では起こります。

ユーザーがනියමයි ඈと言っている相違点が1つ見つかりました。そこにクローラを気にする何かがあるようです。あなたは空の文字列でcharacted null\x00)を交換した場合、それは正確にあなたが探しているものを取得します。

<?php 
$app_id = 'com.balintinfotech.sinhalesekeyboardfree'; 
$response = file_get_contents('https://play.google.com/store/apps/details?hl=en&id='.$app_id); 
$response = str_replace("\x00", "", $response); 
$crawler = new Symfony\Component\DomCrawler\Crawler($response); 
var_dump($crawler->filter('div[itemprop="datePublished"]')->text()); // string(14) "March 14, 2017" 

私はこれに多くを見てみます。

+0

DomCrawlerのバグかどうかは不思議です。私の前回の返信を削除しなければならなかったのは、UTF-8へのエンコーディングが実際には機能しなかったからです。 –

+0

そうではありません。ヌル文字を見つけたときに結果を切り捨てる 'file_get_contents()'があることに注目してください。 'DomCrawler'はうまくやっています。だから、問題はPHP側にあるようです。それはさらに深くなるかもしれない。 – ishegg

+0

私の最後には切り詰められません。私は全体のHTMLを取得します。 –

関連する問題