我正在尝试从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();
?>
如果有人能解释我为什么会这样,并且有解决方案的话,我会感到很高兴。 感谢。
答案 0 :(得分:1)
DIV是从Javascript加载的。您需要检索Javascript调用的内容,并在PHP中复制它。
使用Firefox和Firebug,我看到该页面发出了对
的调用http://www.hm.com/gb/product/05427/05427-A/related
返回带有所有内容的DIV (我猜它取代了DIV)。你必须抓住它。
此外,一些服务器会检查谁在询问是谁以及代表谁。因此,如果HTTP_REFERER字段未设置为正确的发起页面,并且具有正确的用户代理和会话cookie等,则上述查询可能不起作用(一般情况下;这似乎不是这种情况 - 即使我可能是错的)。