2012-09-17 74 views
0

我试图从H & M加载一个页面(用于学习的目的),当我发现一个div的内容没有加载,但如果我从浏览器保存页面, div正确保存。 任何人都可以解释为什么会发生这种情况?
股利(也是最重要的,IST的内容)我正在寻找的是:
体>DIV主要>DIV内容>DIVrelatedInformationContainer
(里面有很多内容:DIV relatedInformation>等...)
这是我使用的代码:我用更简单的方法用php加载外部div

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

,SAM e结果:

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

我会apreciate如果有人能解释我为什么会发生这种情况,如果有解决方案。 谢谢。

回答

1

该DIV从Javascript加载。您需要检索Javascript调用的内容,并将其复制到PHP中。

使用Firefox使用Firebug,我看到页面发布到

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

与所有内容(我猜它取代了DIV)返回DIV 通话。你将不得不捕捉它。

另外,有些服务器会检查谁在询问谁以及代表谁。因此,如果上面的查询的HTTP_REFERER字段没有设置为正确的始发页面,并且没有正确的用户代理和会话cookie等,那么上面的查询可能无法正常工作(一般来说,这里似乎并非如此 - 尽管我可能是错的)。

+0

谢谢Iserni!我真的错过了这个细节......我发现我可以使用相同的结构模拟该请求:'hm.com/gb/product/(product code)/(产品代码) - (变体)/相关的',并从那里回顾使用DOMXpath方法的内容。看起来我更喜欢萤火虫。谢谢 –