提问者:小点点

用php加载外部div


我试图从H&M加载一个页面(出于学习目的),当我注意到一个div的内容没有加载,但是如果我从浏览器保存页面,div就会正确保存。 有人能解释为什么会发生这种情况吗?
我要查找的div(最重要的是,ist的内容)是:
body>;div main>;div content>; div relatedInformationContainer
(里面有很多内容:div relatedInformation>;等。。。)
这是我使用的代码:

<?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();
?>

如果有人能向我解释为什么会发生这种情况,如果有一个解决方案,我会答应的。 谢了。


共1个答案

匿名用户

DIV是从JavaScript加载的。 您需要检索Javascript调用是什么,并在PHP中复制它。

在使用Firefox和Firebug时,我看到页面向

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

它返回DIV及其所有内容(我猜它会取代DIV)。 你必须捕捉到它。

此外,一些服务器检查谁在询问什么以及代表谁询问什么。 因此,如果没有将HTTP_REFERER字段设置为正确的原始页面,使用正确的用户代理和会话cookie等,则上述查询可能无法工作(通常情况下,这里似乎不是这样--尽管我可能是错的)。