0

我试图从 H&M 加载一个页面(用于学习目的),当我注意到一个 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 字段未设置为正确的原始页面、正确的用户代理和会话 cookie 等,则上面的查询可能不起作用(通常;这里似乎不是这种情况 - 即使我可能是错的)。

于 2012-09-17T17:54:08.547 回答