0

H&Mから(勉強のために)ページを読み込もうとしていたところ、1つのdivのコンテンツが読み込まれていないことに気づきましたが、ブラウザからページを保存すると、divは正しく保存されます。なぜこれが起こるのか誰かが私に説明できますか?
私が探しているdiv(そして最も重要なistのコンテンツ)は次のとおりです:
body> div main> div content> div relatedInformationContainer
(多くのコンテンツがあります:div relatedInformation> etc ...)
これは私が使用したコードです:

<?php
$url = "http://www.hm.com/gb/product/05427";
libxml_use_internal_errors(true);
$html = file_get_contents($url);  
$dom = new DomDocument();  
$dom->loadHTML($html);  
$xp = new domxpath($dom);

$contentDivs = $xp->query('//div[@id="content"]')->item(0);
$numContentDivs = $xp->evaluate('count(div)', $contentDivs);
// echo $numContentDivs; // output:3 (correct)
$relatedDiv = $xp->query('//div[@id="content"]/div[2]')->item(0)->getAttribute("id");
echo $relatedDiv; // output:relatedInformationContainer (correct)
$relatedDivContent = $xp->query('//div[@id="content"]/div[2]')->item(0);
$numRelatedDivContent = $xp->evaluate('count(div)', $relatedDivContent);
echo $numRelatedDivContent; // output:0 (incorrect!!! it should output 1)
?>

より単純な方法を使用しましたが、同じ結果になりました。

<?php
$url = "http://www.hm.com/gb/product/05427";
$doc = new DOMDocument();
$load = @$doc->loadHTMLFile($url);
echo $doc->saveHTML();
?>

なぜこれが起こるのか、そして解決策があれば、誰かが私に説明してくれれば幸いです。ありがとう。

4

1 に答える 1

1

DIVはJavascriptからロードされます。Javascript呼び出しが何であるかを取得し、それをPHPで複製する必要があります。

FirefoxとFirebugを使用すると、ページがに呼び出しを発行することがわかります

http://www.hm.com/gb/product/05427/05427-A/related

これは、DIVとそのすべての内容を返します(DIVを置き換えると思います)。それをキャプチャする必要があります。

また、一部のサーバーは、誰が誰に代わって何を尋ねているかをチェックします。したがって、HTTP_REFERERフィールドが正しい元のページに設定されておらず、適切なUser-AgentやセッションCookieなどがある場合、上記のクエリは機能しない可能性があります(一般的に、ここではそうではないようです-私は間違っているかもしれませんが)。

于 2012-09-17T17:54:08.547 に答える