用php加载外部div

时间:2012-09-17 17:46:01

标签: php

我正在尝试从H& M(用于学习目的)加载页面,当我注意到未加载一个div的内容时,但如果我从浏览器保存页面,则div被正确保存。 任何人都可以解释为什么会发生这种情况吗? 我正在寻找的div(最重要的是,ist的内容)是:
正文> div 主> div 内容> 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 个答案:

答案 0 :(得分:1)

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

使用Firefox和Firebug,我看到该页面发出了对

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

返回带有所有内容的DIV (我猜它取代了DIV)。你必须抓住它。

此外,一些服务器会检查谁在询问是谁以及代表谁。因此,如果HTTP_REFERER字段未设置为正确的发起页面,并且具有正确的用户代理和会话cookie等,则上述查询可能不起作用(一般情况下;这似乎不是这种情况 - 即使我可能是错的)。