2014-09-20 27 views
0
<?php 
    $ch = curl_init("http://www.alibaba.com/showroom/black-and-white-wedding-dresses.html"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); 
    $html = curl_exec($ch); 
    curl_close($ch); 
    $dom = new DOMDocument; 
    $dom->strictErrorChecking = false; 
    @$dom->loadHTML($html); 
    $xpath = new DOMXpath($dom); 

    $description = $xpath->query('//meta[@name="description"]/@content'); 
    foreach ($description as $n) { 
     echo $n->nodeValue ; 
    } 
?> 

沒有任何返回信息..與其他URL一起工作正常。 可能是什麼問題?無法打開遠程文件以在其上運行Xpath

回答

0

當我在Safari或Chrome的DOM檢查器中檢查該頁面時,它說明<meta>元素(以及所有元素)位於XHTML名稱空間(URI爲http://www.w3.org/1999/xhtml的名稱空間)中。我不知道他們爲什麼在這個命名空間中(原始標記沒有指定它們在該命名空間中,AFAICT),但它可以解釋爲什麼你的XPath表達式不選擇它們:它要求一個meta元素,它是在沒有命名空間。

爲了解決這個問題,使用此解決方法:

$description = $xpath->query('//*[local-name() = 'meta' and 
            @name="description"]/@content'); 

這將找到meta元素,無論他們在什麼命名空間

或者,更高效,創建具有名稱空間解析xhtml前綴綁定到XHTML命名空間URI,然後使用此命名空間解析與表達

$description = $xpath->query('//xhtml:meta[@name="description"]/@content'); 

但後者只會爲網絡工作其中meta元素位於XHTML名稱空間中的頁面。

+0

@derp:謝謝,我將不得不考慮這樣做......它的怪異。它位於XHTML名稱空間中,但乍看之下,似乎並不遵守XML名稱空間建議(http://www.w3.org/TR/REC-xml-names/)。 – LarsH 2014-09-21 03:30:21

+0

@derp HTML5如何從SGML中破解?我認爲HTML是SGML的一個應用。 – LarsH 2014-09-22 02:46:07

2

您的XPath表達式很好。該網站正在執行用戶代理檢測,並返回一個HTTP 302響應,並將該位置設置爲請求的IP地址。將其轉儲到文件中查看。

如果您添加用戶代理標題來模擬桌面瀏覽器,請求將通過,所有內容都將按預期工作。

$ch = curl_init("http://www.alibaba.com/showroom/black-and-white-wedding-dresses.html"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0.1'); 
$html = curl_exec($ch); 
curl_close($ch); 
$dom = new DOMDocument; 
$dom->strictErrorChecking = false; 
@$dom->loadHTML($html); 
$xpath = new DOMXpath($dom); 

$description = $xpath->query('//meta[@name="description"]/@content'); 
foreach ($description as $n) { 
    echo $n->nodeValue ; 
} 

輸出:

Black And White Wedding Dresses, You Can Buy Various High Quality Black And White Wedding Dresses Products from Global Black And White Wedding Dresses Suppliers and Black And White Wedding Dresses Manufacturers at Alibaba.com 
相關問題