2012-09-17 71 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方法的內容。看起來我更喜歡螢火蟲。謝謝 –