2014-09-20 80 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 
相关问题